summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid P. D. Moss <drkjam@gmail.com>2009-06-21 23:18:47 +0000
committerDavid P. D. Moss <drkjam@gmail.com>2009-06-21 23:18:47 +0000
commite44c897d47e42e831ed9f4b4de06641e075f0bdf (patch)
tree43e25130bf669cd3a910c7de38da104972034272
parentea156d62d35fa5aa8dbda7cceb186f4807e99371 (diff)
downloadnetaddr-e44c897d47e42e831ed9f4b4de06641e075f0bdf.tar.gz
Transition of old trunk to new refactored codebase.
-rw-r--r--AUTHORS1
-rw-r--r--CHANGELOG138
-rw-r--r--COPYRIGHT47
-rwxr-xr-xGLOSSARY31
-rwxr-xr-xLICENSE40
-rw-r--r--MANIFEST.in54
-rwxr-xr-xREADME21
-rwxr-xr-xdocs/api/api-objects.txt487
-rwxr-xr-xdocs/api/class-tree.html277
-rwxr-xr-xdocs/api/crarr.pngbin340 -> 0 bytes
-rwxr-xr-xdocs/api/epydoc.css322
-rwxr-xr-xdocs/api/epydoc.js293
-rwxr-xr-xdocs/api/frames.html17
-rwxr-xr-xdocs/api/help.html276
-rwxr-xr-xdocs/api/identifier-index.html1105
-rwxr-xr-xdocs/api/index.html17
-rwxr-xr-xdocs/api/module-tree.html127
-rwxr-xr-xdocs/api/netaddr-module.html410
-rwxr-xr-xdocs/api/netaddr-pysrc.html214
-rw-r--r--docs/api/netaddr.AddrConversionError-class.html178
-rw-r--r--docs/api/netaddr.AddrFormatError-class.html178
-rwxr-xr-xdocs/api/netaddr.address-module.html378
-rwxr-xr-xdocs/api/netaddr.address-pysrc.html4161
-rwxr-xr-xdocs/api/netaddr.address.Addr-class.html1537
-rw-r--r--docs/api/netaddr.address.AddrTypeDescriptor-class.html238
-rw-r--r--docs/api/netaddr.address.AddrValueDescriptor-class.html241
-rwxr-xr-xdocs/api/netaddr.address.CIDR-class.html938
-rwxr-xr-xdocs/api/netaddr.address.EUI-class.html641
-rw-r--r--docs/api/netaddr.address.FormatDescriptor-class.html237
-rwxr-xr-xdocs/api/netaddr.address.IP-class.html1307
-rw-r--r--docs/api/netaddr.address.IPRange-class.html1415
-rw-r--r--docs/api/netaddr.address.IPRangeSet-class.html500
-rw-r--r--docs/api/netaddr.address.PrefixLenDescriptor-class.html238
-rw-r--r--docs/api/netaddr.address.StrategyDescriptor-class.html238
-rwxr-xr-xdocs/api/netaddr.address.Wildcard-class.html486
-rw-r--r--docs/api/netaddr.core-module.html152
-rw-r--r--docs/api/netaddr.core-pysrc.html203
-rw-r--r--docs/api/netaddr.core.PrettyPrinter-class.html264
-rw-r--r--docs/api/netaddr.core.Publisher-class.html274
-rw-r--r--docs/api/netaddr.core.Subscriber-class.html189
-rw-r--r--docs/api/netaddr.eui-module.html437
-rw-r--r--docs/api/netaddr.eui-pysrc.html690
-rw-r--r--docs/api/netaddr.eui.FileIndexer-class.html262
-rw-r--r--docs/api/netaddr.eui.IAB-class.html599
-rw-r--r--docs/api/netaddr.eui.IABIndexParser-class.html253
-rw-r--r--docs/api/netaddr.eui.NotRegisteredError-class.html179
-rw-r--r--docs/api/netaddr.eui.OUI-class.html600
-rw-r--r--docs/api/netaddr.eui.OUIIndexParser-class.html253
-rw-r--r--docs/api/netaddr.ip-module.html284
-rw-r--r--docs/api/netaddr.ip-pysrc.html637
-rw-r--r--docs/api/netaddr.ip.DictUpdater-class.html268
-rw-r--r--docs/api/netaddr.ip.IPv4Parser-class.html277
-rw-r--r--docs/api/netaddr.ip.IPv6Parser-class.html277
-rw-r--r--docs/api/netaddr.ip.LineRecordParser-class.html292
-rw-r--r--docs/api/netaddr.ip.MulticastParser-class.html296
-rw-r--r--docs/api/netaddr.misc-module.html196
-rw-r--r--docs/api/netaddr.misc-pysrc.html194
-rwxr-xr-xdocs/api/netaddr.strategy-module.html219
-rwxr-xr-xdocs/api/netaddr.strategy-pysrc.html1334
-rwxr-xr-xdocs/api/netaddr.strategy.AddrStrategy-class.html917
-rwxr-xr-xdocs/api/netaddr.strategy.EUI48Strategy-class.html511
-rw-r--r--docs/api/netaddr.strategy.IPv4StrategyOpt-class.html524
-rw-r--r--docs/api/netaddr.strategy.IPv4StrategyStd-class.html319
-rwxr-xr-xdocs/api/netaddr.strategy.IPv6Strategy-class.html464
-rwxr-xr-xdocs/api/redirect.html38
-rwxr-xr-xdocs/api/toc-everything.html52
-rwxr-xr-xdocs/api/toc-netaddr-module.html50
-rwxr-xr-xdocs/api/toc-netaddr.address-module.html30
-rw-r--r--docs/api/toc-netaddr.core-module.html28
-rw-r--r--docs/api/toc-netaddr.eui-module.html30
-rw-r--r--docs/api/toc-netaddr.ip-module.html38
-rw-r--r--docs/api/toc-netaddr.misc-module.html32
-rwxr-xr-xdocs/api/toc-netaddr.strategy-module.html29
-rwxr-xr-xdocs/api/toc.html33
-rwxr-xr-xnetaddr/__init__.py115
-rwxr-xr-xnetaddr/address.py2926
-rwxr-xr-xnetaddr/core.py192
-rwxr-xr-xnetaddr/eui/__init__.py596
-rw-r--r--netaddr/eui/iab.idx4492
-rw-r--r--netaddr/eui/iab.txt453
-rwxr-xr-xnetaddr/eui/ieee.py285
-rw-r--r--netaddr/eui/oui.idx24382
-rw-r--r--netaddr/eui/oui.txt1271
-rw-r--r--[-rwxr-xr-x]netaddr/fbsocket.py (renamed from netaddr/fallback.py)509
-rwxr-xr-xnetaddr/interfaces/IPy.py224
-rw-r--r--netaddr/interfaces/TODO.txt7
-rw-r--r--netaddr/interfaces/__init__.py0
-rw-r--r--netaddr/interfaces/test_IPy.py845
-rwxr-xr-xnetaddr/ip/__init__.py1577
-rwxr-xr-xnetaddr/ip/iana.py413
-rw-r--r--netaddr/ipglob.py223
-rwxr-xr-xnetaddr/misc.py74
-rwxr-xr-xnetaddr/strategy.py845
-rwxr-xr-xnetaddr/strategy/__init__.py277
-rwxr-xr-xnetaddr/strategy/eui48.py293
-rwxr-xr-xnetaddr/strategy/eui64.py185
-rwxr-xr-xnetaddr/strategy/ipv4.py207
-rwxr-xr-xnetaddr/strategy/ipv6.py226
-rw-r--r--netaddr/tests/.coveragebin0 -> 96585 bytes
-rwxr-xr-xnetaddr/tests/coverage.py1163
-rw-r--r--netaddr/tests/eui/eui.txt154
-rw-r--r--netaddr/tests/eui/tutorial.txt245
-rw-r--r--netaddr/tests/ip/abbreviated.txt144
-rw-r--r--netaddr/tests/ip/cidr.txt521
-rw-r--r--netaddr/tests/ip/constructor.txt71
-rw-r--r--netaddr/tests/ip/ipglob.txt51
-rw-r--r--netaddr/tests/ip/multicast.txt43
-rw-r--r--netaddr/tests/ip/socket_fallback.txt60
-rw-r--r--netaddr/tests/ip/subnet.txt36
-rw-r--r--netaddr/tests/ip/tutorial.txt642
-rwxr-xr-xnetaddr/tests/netaddr_coverage.bat11
-rw-r--r--netaddr/tests/netaddr_coverage_report.txt18
-rwxr-xr-xnetaddr/tests/run_all.py62
-rw-r--r--netaddr/tests/strategy/eui48.txt93
-rw-r--r--netaddr/tests/strategy/ipv4.txt50
-rw-r--r--netaddr/tests/strategy/ipv6.txt256
-rwxr-xr-xnetaddr/tests/test.py11
-rwxr-xr-xnetaddr/util.py35
-rwxr-xr-xrelease.bat4
-rw-r--r--release.py34
-rwxr-xr-xrelease.sh3
-rwxr-xr-xtests/ipv4strategy_speed_tests.py80
-rwxr-xr-xtests/ipv6strategy_speed_tests.py82
-rw-r--r--tests/iterator_speed_tests.py112
-rwxr-xr-xtests/ut_netaddr.py2449
125 files changed, 24145 insertions, 51414 deletions
diff --git a/AUTHORS b/AUTHORS
index 29bf4f0..c16de9a 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,3 +1,4 @@
+
netaddr is a project that was released to the Python community under the
BSD license in early 2008.
diff --git a/CHANGELOG b/CHANGELOG
index 3c65023..e2d9488 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,139 @@
+
+Release: 0.7
+Date: DDth Jun 2009
+
+Changes since 0.6.x
+-------------------
+
+There has been a **major** (but necessary) reworking of the entire library!
+
+ Please Note - this release breaks backward compatibility with all previous
+ releases. Please consult the API documentation, the readable unit tests
+ (now bundled with all releases) as well as netaddr wiki example pages for
+ full details.
+
+Here is a brief run down of significant improvements and changes.
+
+* A whole redesign of the netaddr module hierarchy. Now, cleaner and simpler
+ with the correct division of labour between submodules.
+
+* The Addr base class no longer exists. There will no longer be examples of
+ it cited on mailing lists and in group discussions. It has been banished
+ for good!
+
+* The logic in former strategy classes have been moved into Python strategy
+ modules instead. This makes the most sense as the former strategy classes
+ were almost always singletons instantiated at module load time and hardly
+ (if ever) changed. This switch has meant some duplication of code in each
+ of the new strategy modules (violating DRY) but is deemed an acceptable
+ trade off to improve code clarity and readability. The gains from using
+ inheritance are now seen (in the cold light of day) as a false economy.
+
+* Functionality of previous Addr, IP and CIDR classes has been combined into
+ a single new IP class. Somewhat controversially perhaps, the new class
+ now represents both individual addresses *and* IP subnets / network blocks
+ *dependent on the methods and properties you choose to access*. Hopefully
+ this has been done in a sensitive enough way to stifle accusations of
+ conflation between individual IP addresses and IP subnets (fingers
+ crossed). Please direct any debate on this choice to the netaddr discussion
+ group.
+
+* The IPRange and Wildcard (IP globbing) classes have been removed in favour
+ of discrete functions. This greatly improves code clarity and readability
+ throughout the entire code base. A new netaddr.ipglob namespace separates
+ IP globbing (a specialist area) into its own sub module.
+
+* Moved IP address and subnet summarization and IP subtraction (exclusion)
+ logic into a set of functions. Old-style classful abbreviations of IPv4
+ CIDR addresses are still supported but through a pass through function
+ that is not part of the IP class constructor.
+
+* Removed all overt uses of Python descriptors for handling properties in
+ favour of standard @property decorators for read-only properties and
+ property() builtin calls for read-write properties. Descriptors were always
+ potentially confusing and non-obvious to contributors and code reviewers.
+ The reason for their use has also gone away with the massive reduction in
+ various related classes starting in this release. The switch from
+ supporting Python 2.3.x also supported this decision.
+
+* The whole internal formatting infrastucture has been removed. All methods
+ and properties of the various classes largely return objects, which can be
+ passed through str(), int(), hex() etc as required. There was so much
+ conditional code propping up formatting that I decided to hand off string
+ and integer IP address value conversion to the end user to make the library
+ simpler. This *greatly* improves the quality of netaddr's internal
+ implementation and gets around annoying edges cases where bugs are
+ introduced on pass through calls.
+
+ Here is a working example of some pass through code :-
+
+ >>> ip = IP('192.0.2.10/24')
+
+ >>> ip.network
+ IP('192.0.2.0/24')
+
+ >>> ip.network.bits()
+ '11000000.00000000.00000010.00000000'
+
+ >>> ip.network.packed()
+ '\xc0\x00\x02\x00'
+
+ If I implemented the formatting options as there were in netaddr 0.6.x and
+ earlier :-
+
+ >>> ip = IP('192.0.2.10/24', format=str)
+
+ >>> ip.network
+ IP('192.0.2.0/24')
+
+ >>> ip.network.bits()
+ AttributeError: 'str' object has no attribute 'bits'
+
+ The network property uses the internal formatting logic and breaks for the
+ user in non-obvious ways.
+
+ There could be the possibility of changing properties such as 'network' and
+ 'broadcast' back into methods in future that accept formatting arguments. It
+ will stay this way for now unless there are any major complaints as it is
+ far simpler.
+
+Specific bug fixes addressed in this release
+--------------------------------------------
+
+* FIXED Issue 26 - http://code.google.com/p/netaddr/issues/detail?id=26
+
+ - Refactor out use of isinstance()
+
+------------------------------------------------------------------------------
+
+Release: 0.6.3
+Date: DDth Jun 2009
+
+Major changes since 0.6.2
+-------------------------
+
+* Fixed line endings in a number of new files created under Windows.
+
+* Tweaked the ordering of values in tuple passed into the hash() function in
+ the __hash__ method of the IP and IPRange classes to make it the same as
+ the values used for comparisons implemented in the __eq__ method (Python
+ best practice).
+
+Specific bug fixes addressed in this release
+--------------------------------------------
+
+* FIXED Issue 35 - http://code.google.com/p/netaddr/issues/detail?id=32
+
+ - install error (on Python interpreters where socket.has_ipv6 is False)
+
+* FIXED Issue 36 - http://code.google.com/p/netaddr/issues/detail?id=36
+
+ - netaddr.CIDR fails to parse default route CIDR
+
+------------------------------------------------------------------------------
+
Release: 0.6.2
-Date: 13th Apr 2008
+Date: 13th Apr 2009
Major changes since 0.6.1
-------------------------
@@ -26,7 +160,7 @@ Specific bug fixes addressed in this release
------------------------------------------------------------------------------
Release: 0.6.1
-Date: 6th Apr 2008
+Date: 6th Apr 2009
Major changes since 0.6
-----------------------
diff --git a/COPYRIGHT b/COPYRIGHT
index 4e724ec..c624c24 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,34 +1,47 @@
-netaddr copyright notice
-------------------------
-Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+netaddr
+-------
-Released under the BSD license. See the LICENSE file for details.
+ Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+ Released under the BSD license. See the LICENSE file for details.
IANA (Internet Assigned Numbers Authority)
------------------------------------------
-Use of data from IANA is subject to copyright and is provided with prior
-written permission.
+ netaddr is not sponsored nor endorsed by IANA.
+
+ Use of data from IANA (Internet Assigned Numbers Authority) is subject to
+ copyright and is provided with prior written permission.
-IANA data files included with netaddr are not modified in any way but may be
-out of date. See README file and source code for URLs to latest copies of
-referenced files.
+ IANA data files included with netaddr are not modified in any way but are
+ parsed and made available to end users through an API.
-netaddr is not sponsored nor endorsed by IANA.
+ See README file and source code for URLs to latest copies of the relevant
+ files.
IEEE (Institution of Electrical Engineers)
------------------------------------------
-Use of data from IEEE is subject to copyright. See the following URL for
-details :-
+ netaddr is not sponsored nor endorsed by the IEEE.
+
+ Use of data from the IEEE (Institute of Electrical and Electronics
+ Engineers) is subject to copyright. See the following URL for
+ details :-
+
+ http://www.ieee.org/web/publications/rights/legal.html
+
+ IEEE data files included with netaddr are not modified in any way but are
+ parsed and made available to end users through an API. There is no
+ guarantee that referenced files are not out of date.
- http://www.ieee.org/web/publications/rights/legal.html
+ See README file and source code for URLs to latest copies of the relevant
+ files.
-IEEE data files included with netaddr are not modified in any way but may be
-out of date. See README file and source code for URLs to latest copies of
-referenced files.
+coverage.py
+-----------
-netaddr is not sponsored nor endorsed by the IEEE.
+ Copyright 2001 Gareth Rees. All rights reserved.
+ Copyright 2004-2008 Ned Batchelder. All rights reserved.
diff --git a/GLOSSARY b/GLOSSARY
deleted file mode 100755
index 78f9462..0000000
--- a/GLOSSARY
+++ /dev/null
@@ -1,31 +0,0 @@
-
-GLOSSARY
-========
-
-A handy reference for unfamiliar with some of the terms used in this library.
-
-EUI - Extended Unique Identifier
-
- A set of IEEE standards to represent unique addresses containing additional
- organisational information. This module provides supports for EUI-48 and
- EUI-64 addresses. The EUI-48 standard can be used to represent link layer
- addresses more commonly known as MAC (Media Access Control) addresses.
-
- Further Reading
-
- 1) Guidelines for use of a 48-bit Extended Unique Identifier :-
-
- http://standards.ieee.org/regauth/oui/tutorials/EUI48.html
-
- 2) Guidelines for use of a 64-bit Extended Unique Identifier :-
-
- http://standards.ieee.org/regauth/oui/tutorials/EUI64.html
-
-CIDR - Classless Inter-Domain Routing
-
- A way of defining groups of Internet Protocol addresses concisely based on
- bit masks. Used extensively in routing protocols.
-
- For further details see RFC 4632 :-
-
- http://www.faqs.org/rfcs/rfc4632.html
diff --git a/LICENSE b/LICENSE
index 8670290..65ead3c 100755
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,8 @@
netaddr - network address manipulation, done Pythonically
+COPYRIGHT AND LICENCE
+
Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -28,3 +30,41 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
+
+------------------------------------------------------------------------------
+
+License for coverage.py (included with netaddr's unit tests)
+
+The latest copy of this script can be found at the following URL :-
+
+ http://nedbatchelder.com/code/modules/coverage.html
+
+COPYRIGHT AND LICENCE
+
+Copyright 2001 Gareth Rees. All rights reserved.
+Copyright 2004-2008 Ned Batchelder. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the
+distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/MANIFEST.in b/MANIFEST.in
index be2c81f..a79fd70 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,35 +1,47 @@
-recursive-include docs/api *.html *.css *.js *.png
+include AUTHORS
+include CHANGELOG
+include COPYRIGHT
+include INSTALL
+include LICENCE
+include MANIFEST.in
+include README
+
+include release.bat
+include release.py
+include release.sh
+include setup.cfg
+include setup.py
+include setup_egg.py
+
+include docs
+include docs/epydoc.cfg
+include docs/epydoc.css
-include tests/ut_*.py
+recursive-include docs/api *.html *.css *.js *.png *.txt
include netaddr/__init__.py
-include netaddr/address.py
-include netaddr/strategy.py
include netaddr/core.py
-include netaddr/util.py
-include netaddr/fallback.py
+include netaddr/fbsocket.py
+include netaddr/ipglob.py
include netaddr/eui/__init__.py
-include netaddr/eui/*.txt
+include netaddr/eui/ieee.py
include netaddr/eui/*.idx
+include netaddr/eui/*.txt
include netaddr/ip/__init__.py
-include netaddr/ip/multicast-addresses
-include netaddr/ip/ipv6-address-space
+include netaddr/ip/iana.py
include netaddr/ip/ipv4-address-space
+include netaddr/ip/ipv6-address-space
+include netaddr/ip/multicast-addresses
-include AUTHORS
-include CHANGELOG
-include COPYRIGHT
-include GLOSSARY
-include INSTALL
-include LICENSE
-include README
-include python-netaddr.spec
-include setup.py
-include release.py
-include setup.cfg
-include setup_egg.py
+include netaddr/strategy/__init__.py
+include netaddr/strategy/eui48.py
+include netaddr/strategy/eui64.py
+include netaddr/strategy/ipv4.py
+include netaddr/strategy/ipv6.py
+
+recursive-include netaddr/tests *.txt *.py *.bat
global-exclude *.pyc
global-exclude *.svn*
diff --git a/README b/README
index 7d75f44..1174560 100755
--- a/README
+++ b/README
@@ -1,3 +1,4 @@
+
INTRODUCTION
============
@@ -86,24 +87,30 @@ Please see the CHANGELOG for details.
UNIT TESTS
----------
-No code can ever be deemed truly complete and trustworthy without reasonable
+No code can ever be deemed truly complete or trustworthy without reasonable
unit test coverage. Full coverage for netaddr is the certainly the ultimate
-goal. Wherever possible all changes and new features are covered with specific
+goal. To this end coverage.py by Gareth Rees and Ned Batchelder has been
+included starting with release 0.7.x to help track this. The latest coverage
+report, netaddr_coverage_report.txt in the same directory as coverage.py, is
+also included for those who are interested. Feel free to add tests to improve
+coverage ;-)
+
+Wherever possible all changes and new features will be covered with specific
regression tests.
-To run them just look the tests directory and run the following using your
-Python interpreter :-
+To run the unit tests, go into the netaddr/tests directory and run the
+following using your Python interpreter :-
- python ut_netaddr.py
+ python run_all.py
Tests are expected to run through without error. If any do fail, *please* help
-assist the project by creating bug reports at the following URL :-
+the project's user base by filing bug reports at the following URL :-
http://code.google.com/p/netaddr/issues/list
*IMPORTANT*
-Efforts have been made to ensure this code work equally well on both big and
+Efforts have been made to ensure this code works equally well on both big and
little endian architectures. However, the project does not own or have access
to any big endian hardware (e.g. SPARC and PowerPC) for continual regression
testing. If you happen to work on big endian architectures with Python and wish
diff --git a/docs/api/api-objects.txt b/docs/api/api-objects.txt
deleted file mode 100755
index ddaf5f0..0000000
--- a/docs/api/api-objects.txt
+++ /dev/null
@@ -1,487 +0,0 @@
-netaddr netaddr-module.html
-netaddr.ST_EUI48 netaddr-module.html#ST_EUI48
-netaddr.AT_NAMES netaddr-module.html#AT_NAMES
-netaddr.AT_LINK netaddr-module.html#AT_LINK
-netaddr.AT_INET netaddr-module.html#AT_INET
-netaddr.nrange netaddr-module.html#nrange
-netaddr.ST_IPV6 netaddr-module.html#ST_IPV6
-netaddr.ST_IPV4 netaddr-module.html#ST_IPV4
-netaddr.AT_UNSPEC netaddr-module.html#AT_UNSPEC
-netaddr.AT_INET6 netaddr-module.html#AT_INET6
-netaddr.BIG_ENDIAN_PLATFORM netaddr-module.html#BIG_ENDIAN_PLATFORM
-netaddr.AT_EUI64 netaddr-module.html#AT_EUI64
-netaddr.ST_EUI64 netaddr-module.html#ST_EUI64
-netaddr.address netaddr.address-module.html
-netaddr.address.AT_STRATEGIES netaddr.address-module.html#AT_STRATEGIES
-netaddr.address.nrange netaddr.address-module.html#nrange
-netaddr.core netaddr.core-module.html
-netaddr.eui netaddr.eui-module.html
-netaddr.eui.create_ieee_indices netaddr.eui-module.html#create_ieee_indices
-netaddr.eui.IEEE_OUI_METADATA netaddr.eui-module.html#IEEE_OUI_METADATA
-netaddr.eui.IEEE_IAB_REGISTRY netaddr.eui-module.html#IEEE_IAB_REGISTRY
-netaddr.eui.IEEE_OUI_INDEX netaddr.eui-module.html#IEEE_OUI_INDEX
-netaddr.eui.IEEE_OUI_REGISTRY netaddr.eui-module.html#IEEE_OUI_REGISTRY
-netaddr.eui.IEEE_IAB_METADATA netaddr.eui-module.html#IEEE_IAB_METADATA
-netaddr.eui.IEEE_IAB_INDEX netaddr.eui-module.html#IEEE_IAB_INDEX
-netaddr.eui.load_ieee_indices netaddr.eui-module.html#load_ieee_indices
-netaddr.ip netaddr.ip-module.html
-netaddr.ip.IANA_INFO netaddr.ip-module.html#IANA_INFO
-netaddr.ip.query netaddr.ip-module.html#query
-netaddr.ip.load_iana_info netaddr.ip-module.html#load_iana_info
-netaddr.misc netaddr.misc-module.html
-netaddr.misc.ipv6_cidr_prefixes netaddr.misc-module.html#ipv6_cidr_prefixes
-netaddr.misc.print_ipv6_cidr_prefixes netaddr.misc-module.html#print_ipv6_cidr_prefixes
-netaddr.misc.ipv4_cidr_prefixes netaddr.misc-module.html#ipv4_cidr_prefixes
-netaddr.misc.print_ipv4_cidr_prefixes netaddr.misc-module.html#print_ipv4_cidr_prefixes
-netaddr.strategy netaddr.strategy-module.html
-netaddr.strategy.USE_IPV4_OPT netaddr.strategy-module.html#USE_IPV4_OPT
-netaddr.strategy.ST_EUI48 netaddr.strategy-module.html#ST_EUI48
-netaddr.strategy._BYTES_TO_BITS netaddr.strategy-module.html#_BYTES_TO_BITS
-netaddr.strategy.ST_IPV6 netaddr.strategy-module.html#ST_IPV6
-netaddr.strategy.ST_IPV4 netaddr.strategy-module.html#ST_IPV4
-netaddr.strategy.ST_EUI64 netaddr.strategy-module.html#ST_EUI64
-netaddr.AddrConversionError netaddr.AddrConversionError-class.html
-netaddr.AddrFormatError netaddr.AddrFormatError-class.html
-netaddr.address.Addr netaddr.address.Addr-class.html
-netaddr.address.Addr.__int__ netaddr.address.Addr-class.html#__int__
-netaddr.address.Addr.ADDR_TYPES netaddr.address.Addr-class.html#ADDR_TYPES
-netaddr.address.Addr.__ne__ netaddr.address.Addr-class.html#__ne__
-netaddr.address.Addr.__str__ netaddr.address.Addr-class.html#__str__
-netaddr.address.Addr.value netaddr.address.Addr-class.html#value
-netaddr.address.Addr.__and__ netaddr.address.Addr-class.html#__and__
-netaddr.address.Addr.__lt__ netaddr.address.Addr-class.html#__lt__
-netaddr.address.Addr.__init__ netaddr.address.Addr-class.html#__init__
-netaddr.address.Addr.__sub__ netaddr.address.Addr-class.html#__sub__
-netaddr.address.Addr.__rshift__ netaddr.address.Addr-class.html#__rshift__
-netaddr.address.Addr.__invert__ netaddr.address.Addr-class.html#__invert__
-netaddr.address.Addr.strategy netaddr.address.Addr-class.html#strategy
-netaddr.address.Addr.packed netaddr.address.Addr-class.html#packed
-netaddr.address.Addr.bits netaddr.address.Addr-class.html#bits
-netaddr.address.Addr.addr_type netaddr.address.Addr-class.html#addr_type
-netaddr.address.Addr.__len__ netaddr.address.Addr-class.html#__len__
-netaddr.address.Addr.bin netaddr.address.Addr-class.html#bin
-netaddr.address.Addr.__isub__ netaddr.address.Addr-class.html#__isub__
-netaddr.address.Addr.__lshift__ netaddr.address.Addr-class.html#__lshift__
-netaddr.address.Addr.__getitem__ netaddr.address.Addr-class.html#__getitem__
-netaddr.address.Addr.__setitem__ netaddr.address.Addr-class.html#__setitem__
-netaddr.address.Addr.__or__ netaddr.address.Addr-class.html#__or__
-netaddr.address.Addr.__add__ netaddr.address.Addr-class.html#__add__
-netaddr.address.Addr.__gt__ netaddr.address.Addr-class.html#__gt__
-netaddr.address.Addr.__hex__ netaddr.address.Addr-class.html#__hex__
-netaddr.address.Addr.__eq__ netaddr.address.Addr-class.html#__eq__
-netaddr.address.Addr.__iter__ netaddr.address.Addr-class.html#__iter__
-netaddr.address.Addr.__iadd__ netaddr.address.Addr-class.html#__iadd__
-netaddr.address.Addr.__xor__ netaddr.address.Addr-class.html#__xor__
-netaddr.address.Addr.__le__ netaddr.address.Addr-class.html#__le__
-netaddr.address.Addr.__repr__ netaddr.address.Addr-class.html#__repr__
-netaddr.address.Addr.__hash__ netaddr.address.Addr-class.html#__hash__
-netaddr.address.Addr.STRATEGIES netaddr.address.Addr-class.html#STRATEGIES
-netaddr.address.Addr.__long__ netaddr.address.Addr-class.html#__long__
-netaddr.address.Addr.__ge__ netaddr.address.Addr-class.html#__ge__
-netaddr.address.AddrTypeDescriptor netaddr.address.AddrTypeDescriptor-class.html
-netaddr.address.AddrTypeDescriptor.__set__ netaddr.address.AddrTypeDescriptor-class.html#__set__
-netaddr.address.AddrTypeDescriptor.__init__ netaddr.address.AddrTypeDescriptor-class.html#__init__
-netaddr.address.AddrValueDescriptor netaddr.address.AddrValueDescriptor-class.html
-netaddr.address.AddrValueDescriptor.__set__ netaddr.address.AddrValueDescriptor-class.html#__set__
-netaddr.address.AddrValueDescriptor.__init__ netaddr.address.AddrValueDescriptor-class.html#__init__
-netaddr.address.CIDR netaddr.address.CIDR-class.html
-netaddr.address.CIDR.ADDR_TYPES netaddr.address.CIDR-class.html#ADDR_TYPES
-netaddr.address.CIDR.hostmask netaddr.address.CIDR-class.html#hostmask
-netaddr.address.IPRange.__ne__ netaddr.address.IPRange-class.html#__ne__
-netaddr.address.CIDR.__str__ netaddr.address.CIDR-class.html#__str__
-netaddr.address.IPRange.__gt__ netaddr.address.IPRange-class.html#__gt__
-netaddr.address.CIDR.prefixlen netaddr.address.CIDR-class.html#prefixlen
-netaddr.address.IPRange.__lt__ netaddr.address.IPRange-class.html#__lt__
-netaddr.address.IPRange.iprange netaddr.address.IPRange-class.html#iprange
-netaddr.address.CIDR.__init__ netaddr.address.CIDR-class.html#__init__
-netaddr.address.CIDR.STRATEGIES netaddr.address.CIDR-class.html#STRATEGIES
-netaddr.address.CIDR.subnet netaddr.address.CIDR-class.html#subnet
-netaddr.address.CIDR.span netaddr.address.CIDR-class.html#span
-netaddr.address.CIDR.network netaddr.address.CIDR-class.html#network
-netaddr.address.IPRange.__contains__ netaddr.address.IPRange-class.html#__contains__
-netaddr.address.IPRange.issupernet netaddr.address.IPRange-class.html#issupernet
-netaddr.address.CIDR.fmt netaddr.address.CIDR-class.html#fmt
-netaddr.address.CIDR.strategy netaddr.address.CIDR-class.html#strategy
-netaddr.address.IPRange.adjacent netaddr.address.IPRange-class.html#adjacent
-netaddr.address.IPRange.size netaddr.address.IPRange-class.html#size
-netaddr.address.CIDR.addr_type netaddr.address.CIDR-class.html#addr_type
-netaddr.address.IPRange.__len__ netaddr.address.IPRange-class.html#__len__
-netaddr.address.IPRange.overlaps netaddr.address.IPRange-class.html#overlaps
-netaddr.address.IPRange.__isub__ netaddr.address.IPRange-class.html#__isub__
-netaddr.address.IPRange.__getitem__ netaddr.address.IPRange-class.html#__getitem__
-netaddr.address.IPRange.format netaddr.address.IPRange-class.html#format
-netaddr.address.CIDR.broadcast netaddr.address.CIDR-class.html#broadcast
-netaddr.address.CIDR.netmask netaddr.address.CIDR-class.html#netmask
-netaddr.address.CIDR.__add__ netaddr.address.CIDR-class.html#__add__
-netaddr.address.CIDR.iter_host_addrs netaddr.address.CIDR-class.html#iter_host_addrs
-netaddr.address.IPRange.__eq__ netaddr.address.IPRange-class.html#__eq__
-netaddr.address.CIDR.abbrev_to_verbose netaddr.address.CIDR-class.html#abbrev_to_verbose
-netaddr.address.IPRange.last netaddr.address.IPRange-class.html#last
-netaddr.address.CIDR.cidrs netaddr.address.CIDR-class.html#cidrs
-netaddr.address.IPRange.__iter__ netaddr.address.IPRange-class.html#__iter__
-netaddr.address.IPRange.__iadd__ netaddr.address.IPRange-class.html#__iadd__
-netaddr.address.IPRange.__le__ netaddr.address.IPRange-class.html#__le__
-netaddr.address.CIDR.__repr__ netaddr.address.CIDR-class.html#__repr__
-netaddr.address.IPRange.wildcard netaddr.address.IPRange-class.html#wildcard
-netaddr.address.IPRange.issubnet netaddr.address.IPRange-class.html#issubnet
-netaddr.address.IPRange.__hash__ netaddr.address.IPRange-class.html#__hash__
-netaddr.address.CIDR.__sub__ netaddr.address.CIDR-class.html#__sub__
-netaddr.address.IPRange.__ge__ netaddr.address.IPRange-class.html#__ge__
-netaddr.address.IPRange.first netaddr.address.IPRange-class.html#first
-netaddr.address.EUI netaddr.address.EUI-class.html
-netaddr.address.Addr.__int__ netaddr.address.Addr-class.html#__int__
-netaddr.address.EUI.oui netaddr.address.EUI-class.html#oui
-netaddr.address.EUI.ei netaddr.address.EUI-class.html#ei
-netaddr.address.EUI.ADDR_TYPES netaddr.address.EUI-class.html#ADDR_TYPES
-netaddr.address.Addr.__isub__ netaddr.address.Addr-class.html#__isub__
-netaddr.address.Addr.__str__ netaddr.address.Addr-class.html#__str__
-netaddr.address.Addr.__gt__ netaddr.address.Addr-class.html#__gt__
-netaddr.address.Addr.__getitem__ netaddr.address.Addr-class.html#__getitem__
-netaddr.address.Addr.__iadd__ netaddr.address.Addr-class.html#__iadd__
-netaddr.address.Addr.__and__ netaddr.address.Addr-class.html#__and__
-netaddr.address.Addr.__lt__ netaddr.address.Addr-class.html#__lt__
-netaddr.address.EUI.iab netaddr.address.EUI-class.html#iab
-netaddr.address.Addr.packed netaddr.address.Addr-class.html#packed
-netaddr.address.Addr.__rshift__ netaddr.address.Addr-class.html#__rshift__
-netaddr.address.EUI.ipv6_link_local netaddr.address.EUI-class.html#ipv6_link_local
-netaddr.address.EUI.strategy netaddr.address.EUI-class.html#strategy
-netaddr.address.EUI.isiab netaddr.address.EUI-class.html#isiab
-netaddr.address.EUI.__init__ netaddr.address.EUI-class.html#__init__
-netaddr.address.Addr.bits netaddr.address.Addr-class.html#bits
-netaddr.address.EUI.addr_type netaddr.address.EUI-class.html#addr_type
-netaddr.address.Addr.__len__ netaddr.address.Addr-class.html#__len__
-netaddr.address.Addr.bin netaddr.address.Addr-class.html#bin
-netaddr.address.Addr.__ne__ netaddr.address.Addr-class.html#__ne__
-netaddr.address.Addr.__invert__ netaddr.address.Addr-class.html#__invert__
-netaddr.address.Addr.__add__ netaddr.address.Addr-class.html#__add__
-netaddr.address.Addr.__hash__ netaddr.address.Addr-class.html#__hash__
-netaddr.address.Addr.__setitem__ netaddr.address.Addr-class.html#__setitem__
-netaddr.address.Addr.__or__ netaddr.address.Addr-class.html#__or__
-netaddr.address.Addr.__lshift__ netaddr.address.Addr-class.html#__lshift__
-netaddr.address.EUI.STRATEGIES netaddr.address.EUI-class.html#STRATEGIES
-netaddr.address.Addr.__hex__ netaddr.address.Addr-class.html#__hex__
-netaddr.address.Addr.__eq__ netaddr.address.Addr-class.html#__eq__
-netaddr.address.EUI.info netaddr.address.EUI-class.html#info
-netaddr.address.Addr.__iter__ netaddr.address.Addr-class.html#__iter__
-netaddr.address.Addr.value netaddr.address.Addr-class.html#value
-netaddr.address.Addr.__xor__ netaddr.address.Addr-class.html#__xor__
-netaddr.address.Addr.__le__ netaddr.address.Addr-class.html#__le__
-netaddr.address.Addr.__repr__ netaddr.address.Addr-class.html#__repr__
-netaddr.address.EUI.eui64 netaddr.address.EUI-class.html#eui64
-netaddr.address.Addr.__sub__ netaddr.address.Addr-class.html#__sub__
-netaddr.address.Addr.__long__ netaddr.address.Addr-class.html#__long__
-netaddr.address.Addr.__ge__ netaddr.address.Addr-class.html#__ge__
-netaddr.address.FormatDescriptor netaddr.address.FormatDescriptor-class.html
-netaddr.address.FormatDescriptor.__set__ netaddr.address.FormatDescriptor-class.html#__set__
-netaddr.address.FormatDescriptor.__init__ netaddr.address.FormatDescriptor-class.html#__init__
-netaddr.address.IP netaddr.address.IP-class.html
-netaddr.address.Addr.__int__ netaddr.address.Addr-class.html#__int__
-netaddr.address.Addr.packed netaddr.address.Addr-class.html#packed
-netaddr.address.IP.ADDR_TYPES netaddr.address.IP-class.html#ADDR_TYPES
-netaddr.address.Addr.__isub__ netaddr.address.Addr-class.html#__isub__
-netaddr.address.IP.__str__ netaddr.address.IP-class.html#__str__
-netaddr.address.Addr.__gt__ netaddr.address.Addr-class.html#__gt__
-netaddr.address.Addr.__and__ netaddr.address.Addr-class.html#__and__
-netaddr.address.IP.netmask_bits netaddr.address.IP-class.html#netmask_bits
-netaddr.address.Addr.__iadd__ netaddr.address.Addr-class.html#__iadd__
-netaddr.address.IP.prefixlen netaddr.address.IP-class.html#prefixlen
-netaddr.address.Addr.__lt__ netaddr.address.Addr-class.html#__lt__
-netaddr.address.IP.iprange netaddr.address.IP-class.html#iprange
-netaddr.address.IP.is_ipv4_mapped netaddr.address.IP-class.html#is_ipv4_mapped
-netaddr.address.Addr.__rshift__ netaddr.address.Addr-class.html#__rshift__
-netaddr.address.Addr.__getitem__ netaddr.address.Addr-class.html#__getitem__
-netaddr.address.IP.hostname netaddr.address.IP-class.html#hostname
-netaddr.address.Addr.__iter__ netaddr.address.Addr-class.html#__iter__
-netaddr.address.IP.strategy netaddr.address.IP-class.html#strategy
-netaddr.address.IP.is_unicast netaddr.address.IP-class.html#is_unicast
-netaddr.address.IP.is_private netaddr.address.IP-class.html#is_private
-netaddr.address.IP.is_multicast netaddr.address.IP-class.html#is_multicast
-netaddr.address.IP.is_ipv4_compat netaddr.address.IP-class.html#is_ipv4_compat
-netaddr.address.IP.is_netmask netaddr.address.IP-class.html#is_netmask
-netaddr.address.Addr.bits netaddr.address.Addr-class.html#bits
-netaddr.address.IP.addr_type netaddr.address.IP-class.html#addr_type
-netaddr.address.Addr.__len__ netaddr.address.Addr-class.html#__len__
-netaddr.address.IP.ipv4 netaddr.address.IP-class.html#ipv4
-netaddr.address.Addr.bin netaddr.address.Addr-class.html#bin
-netaddr.address.Addr.__ne__ netaddr.address.Addr-class.html#__ne__
-netaddr.address.IP.wildcard netaddr.address.IP-class.html#wildcard
-netaddr.address.Addr.__invert__ netaddr.address.Addr-class.html#__invert__
-netaddr.address.Addr.__add__ netaddr.address.Addr-class.html#__add__
-netaddr.address.IP.ipv6 netaddr.address.IP-class.html#ipv6
-netaddr.address.IP.is_link_local netaddr.address.IP-class.html#is_link_local
-netaddr.address.IP.is_hostmask netaddr.address.IP-class.html#is_hostmask
-netaddr.address.Addr.__or__ netaddr.address.Addr-class.html#__or__
-netaddr.address.Addr.__lshift__ netaddr.address.Addr-class.html#__lshift__
-netaddr.address.Addr.__sub__ netaddr.address.Addr-class.html#__sub__
-netaddr.address.Addr.__hex__ netaddr.address.Addr-class.html#__hex__
-netaddr.address.IP.cidr netaddr.address.IP-class.html#cidr
-netaddr.address.IP.TRANSLATE_STR netaddr.address.IP-class.html#TRANSLATE_STR
-netaddr.address.Addr.__eq__ netaddr.address.Addr-class.html#__eq__
-netaddr.address.IP._ netaddr.address.IP-class.html#_
-netaddr.address.IP.info netaddr.address.IP-class.html#info
-netaddr.address.IP.is_reserved netaddr.address.IP-class.html#is_reserved
-netaddr.address.IP.is_loopback netaddr.address.IP-class.html#is_loopback
-netaddr.address.Addr.__setitem__ netaddr.address.Addr-class.html#__setitem__
-netaddr.address.Addr.value netaddr.address.Addr-class.html#value
-netaddr.address.Addr.__xor__ netaddr.address.Addr-class.html#__xor__
-netaddr.address.IP.reverse_dns netaddr.address.IP-class.html#reverse_dns
-netaddr.address.Addr.__le__ netaddr.address.Addr-class.html#__le__
-netaddr.address.IP.__repr__ netaddr.address.IP-class.html#__repr__
-netaddr.address.IP.__init__ netaddr.address.IP-class.html#__init__
-netaddr.address.Addr.__hash__ netaddr.address.Addr-class.html#__hash__
-netaddr.address.IP.STRATEGIES netaddr.address.IP-class.html#STRATEGIES
-netaddr.address.Addr.__long__ netaddr.address.Addr-class.html#__long__
-netaddr.address.Addr.__ge__ netaddr.address.Addr-class.html#__ge__
-netaddr.address.IPRange netaddr.address.IPRange-class.html
-netaddr.address.IPRange.ADDR_TYPES netaddr.address.IPRange-class.html#ADDR_TYPES
-netaddr.address.IPRange.__isub__ netaddr.address.IPRange-class.html#__isub__
-netaddr.address.IPRange.__str__ netaddr.address.IPRange-class.html#__str__
-netaddr.address.IPRange.__lt__ netaddr.address.IPRange-class.html#__lt__
-netaddr.address.IPRange.iprange netaddr.address.IPRange-class.html#iprange
-netaddr.address.IPRange.__init__ netaddr.address.IPRange-class.html#__init__
-netaddr.address.IPRange.size netaddr.address.IPRange-class.html#size
-netaddr.address.IPRange.__contains__ netaddr.address.IPRange-class.html#__contains__
-netaddr.address.IPRange.issupernet netaddr.address.IPRange-class.html#issupernet
-netaddr.address.IPRange.fmt netaddr.address.IPRange-class.html#fmt
-netaddr.address.IPRange.strategy netaddr.address.IPRange-class.html#strategy
-netaddr.address.IPRange.adjacent netaddr.address.IPRange-class.html#adjacent
-netaddr.address.IPRange.addr_type netaddr.address.IPRange-class.html#addr_type
-netaddr.address.IPRange.__len__ netaddr.address.IPRange-class.html#__len__
-netaddr.address.IPRange.overlaps netaddr.address.IPRange-class.html#overlaps
-netaddr.address.IPRange.__ne__ netaddr.address.IPRange-class.html#__ne__
-netaddr.address.IPRange.__getitem__ netaddr.address.IPRange-class.html#__getitem__
-netaddr.address.IPRange.format netaddr.address.IPRange-class.html#format
-netaddr.address.IPRange.__iter__ netaddr.address.IPRange-class.html#__iter__
-netaddr.address.IPRange.__gt__ netaddr.address.IPRange-class.html#__gt__
-netaddr.address.IPRange.__eq__ netaddr.address.IPRange-class.html#__eq__
-netaddr.address.IPRange.last netaddr.address.IPRange-class.html#last
-netaddr.address.IPRange.cidrs netaddr.address.IPRange-class.html#cidrs
-netaddr.address.IPRange.__iadd__ netaddr.address.IPRange-class.html#__iadd__
-netaddr.address.IPRange.__le__ netaddr.address.IPRange-class.html#__le__
-netaddr.address.IPRange.__repr__ netaddr.address.IPRange-class.html#__repr__
-netaddr.address.IPRange.wildcard netaddr.address.IPRange-class.html#wildcard
-netaddr.address.IPRange.issubnet netaddr.address.IPRange-class.html#issubnet
-netaddr.address.IPRange.__hash__ netaddr.address.IPRange-class.html#__hash__
-netaddr.address.IPRange.STRATEGIES netaddr.address.IPRange-class.html#STRATEGIES
-netaddr.address.IPRange.__ge__ netaddr.address.IPRange-class.html#__ge__
-netaddr.address.IPRange.first netaddr.address.IPRange-class.html#first
-netaddr.address.IPRangeSet netaddr.address.IPRangeSet-class.html
-netaddr.address.IPRangeSet.max_match netaddr.address.IPRangeSet-class.html#max_match
-netaddr.address.IPRangeSet.__init__ netaddr.address.IPRangeSet-class.html#__init__
-netaddr.address.IPRangeSet.any_match netaddr.address.IPRangeSet-class.html#any_match
-netaddr.address.IPRangeSet.__contains__ netaddr.address.IPRangeSet-class.html#__contains__
-netaddr.address.IPRangeSet.all_matches netaddr.address.IPRangeSet-class.html#all_matches
-netaddr.address.IPRangeSet.min_match netaddr.address.IPRangeSet-class.html#min_match
-netaddr.address.PrefixLenDescriptor netaddr.address.PrefixLenDescriptor-class.html
-netaddr.address.PrefixLenDescriptor.__set__ netaddr.address.PrefixLenDescriptor-class.html#__set__
-netaddr.address.PrefixLenDescriptor.__init__ netaddr.address.PrefixLenDescriptor-class.html#__init__
-netaddr.address.StrategyDescriptor netaddr.address.StrategyDescriptor-class.html
-netaddr.address.StrategyDescriptor.__set__ netaddr.address.StrategyDescriptor-class.html#__set__
-netaddr.address.StrategyDescriptor.__init__ netaddr.address.StrategyDescriptor-class.html#__init__
-netaddr.address.Wildcard netaddr.address.Wildcard-class.html
-netaddr.address.Wildcard.ADDR_TYPES netaddr.address.Wildcard-class.html#ADDR_TYPES
-netaddr.address.IPRange.__ne__ netaddr.address.IPRange-class.html#__ne__
-netaddr.address.Wildcard.__str__ netaddr.address.Wildcard-class.html#__str__
-netaddr.address.IPRange.__lt__ netaddr.address.IPRange-class.html#__lt__
-netaddr.address.IPRange.iprange netaddr.address.IPRange-class.html#iprange
-netaddr.address.Wildcard.__init__ netaddr.address.Wildcard-class.html#__init__
-netaddr.address.IPRange.size netaddr.address.IPRange-class.html#size
-netaddr.address.IPRange.__contains__ netaddr.address.IPRange-class.html#__contains__
-netaddr.address.IPRange.issupernet netaddr.address.IPRange-class.html#issupernet
-netaddr.address.Wildcard.fmt netaddr.address.Wildcard-class.html#fmt
-netaddr.address.Wildcard.strategy netaddr.address.Wildcard-class.html#strategy
-netaddr.address.Wildcard.is_valid netaddr.address.Wildcard-class.html#is_valid
-netaddr.address.IPRange.adjacent netaddr.address.IPRange-class.html#adjacent
-netaddr.address.Wildcard.addr_type netaddr.address.Wildcard-class.html#addr_type
-netaddr.address.IPRange.__len__ netaddr.address.IPRange-class.html#__len__
-netaddr.address.IPRange.overlaps netaddr.address.IPRange-class.html#overlaps
-netaddr.address.IPRange.__isub__ netaddr.address.IPRange-class.html#__isub__
-netaddr.address.IPRange.__getitem__ netaddr.address.IPRange-class.html#__getitem__
-netaddr.address.IPRange.format netaddr.address.IPRange-class.html#format
-netaddr.address.IPRange.__iter__ netaddr.address.IPRange-class.html#__iter__
-netaddr.address.IPRange.__gt__ netaddr.address.IPRange-class.html#__gt__
-netaddr.address.IPRange.__eq__ netaddr.address.IPRange-class.html#__eq__
-netaddr.address.IPRange.last netaddr.address.IPRange-class.html#last
-netaddr.address.IPRange.cidrs netaddr.address.IPRange-class.html#cidrs
-netaddr.address.IPRange.__iadd__ netaddr.address.IPRange-class.html#__iadd__
-netaddr.address.IPRange.__le__ netaddr.address.IPRange-class.html#__le__
-netaddr.address.Wildcard.__repr__ netaddr.address.Wildcard-class.html#__repr__
-netaddr.address.IPRange.wildcard netaddr.address.IPRange-class.html#wildcard
-netaddr.address.IPRange.issubnet netaddr.address.IPRange-class.html#issubnet
-netaddr.address.IPRange.__hash__ netaddr.address.IPRange-class.html#__hash__
-netaddr.address.Wildcard.STRATEGIES netaddr.address.Wildcard-class.html#STRATEGIES
-netaddr.address.IPRange.__ge__ netaddr.address.IPRange-class.html#__ge__
-netaddr.address.IPRange.first netaddr.address.IPRange-class.html#first
-netaddr.core.PrettyPrinter netaddr.core.PrettyPrinter-class.html
-netaddr.core.PrettyPrinter.update netaddr.core.PrettyPrinter-class.html#update
-netaddr.core.PrettyPrinter.__init__ netaddr.core.PrettyPrinter-class.html#__init__
-netaddr.core.Publisher netaddr.core.Publisher-class.html
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.core.Publisher.__init__ netaddr.core.Publisher-class.html#__init__
-netaddr.core.Subscriber netaddr.core.Subscriber-class.html
-netaddr.core.Subscriber.update netaddr.core.Subscriber-class.html#update
-netaddr.eui.FileIndexer netaddr.eui.FileIndexer-class.html
-netaddr.eui.FileIndexer.update netaddr.eui.FileIndexer-class.html#update
-netaddr.eui.FileIndexer.__init__ netaddr.eui.FileIndexer-class.html#__init__
-netaddr.eui.IAB netaddr.eui.IAB-class.html
-netaddr.eui.IAB.__int__ netaddr.eui.IAB-class.html#__int__
-netaddr.eui.IAB.organisation netaddr.eui.IAB-class.html#organisation
-netaddr.eui.IAB.registration netaddr.eui.IAB-class.html#registration
-netaddr.eui.IAB.split_iab_mac netaddr.eui.IAB-class.html#split_iab_mac
-netaddr.eui.IAB._parse_data netaddr.eui.IAB-class.html#_parse_data
-netaddr.eui.IAB.__repr__ netaddr.eui.IAB-class.html#__repr__
-netaddr.eui.IAB.address netaddr.eui.IAB-class.html#address
-netaddr.eui.IAB.__hex__ netaddr.eui.IAB-class.html#__hex__
-netaddr.eui.IAB.org netaddr.eui.IAB-class.html#org
-netaddr.eui.IAB.__str__ netaddr.eui.IAB-class.html#__str__
-netaddr.eui.IAB.__init__ netaddr.eui.IAB-class.html#__init__
-netaddr.eui.IABIndexParser netaddr.eui.IABIndexParser-class.html
-netaddr.eui.IABIndexParser.parse netaddr.eui.IABIndexParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.eui.IABIndexParser.__init__ netaddr.eui.IABIndexParser-class.html#__init__
-netaddr.eui.NotRegisteredError netaddr.eui.NotRegisteredError-class.html
-netaddr.eui.OUI netaddr.eui.OUI-class.html
-netaddr.eui.OUI.__int__ netaddr.eui.OUI-class.html#__int__
-netaddr.eui.OUI.organisation netaddr.eui.OUI-class.html#organisation
-netaddr.eui.OUI.address netaddr.eui.OUI-class.html#address
-netaddr.eui.OUI._parse_data netaddr.eui.OUI-class.html#_parse_data
-netaddr.eui.OUI.__repr__ netaddr.eui.OUI-class.html#__repr__
-netaddr.eui.OUI.registration netaddr.eui.OUI-class.html#registration
-netaddr.eui.OUI.__hex__ netaddr.eui.OUI-class.html#__hex__
-netaddr.eui.OUI.org netaddr.eui.OUI-class.html#org
-netaddr.eui.OUI.__str__ netaddr.eui.OUI-class.html#__str__
-netaddr.eui.OUI.__init__ netaddr.eui.OUI-class.html#__init__
-netaddr.eui.OUI.org_count netaddr.eui.OUI-class.html#org_count
-netaddr.eui.OUIIndexParser netaddr.eui.OUIIndexParser-class.html
-netaddr.eui.OUIIndexParser.parse netaddr.eui.OUIIndexParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.eui.OUIIndexParser.__init__ netaddr.eui.OUIIndexParser-class.html#__init__
-netaddr.ip.DictUpdater netaddr.ip.DictUpdater-class.html
-netaddr.ip.DictUpdater.update netaddr.ip.DictUpdater-class.html#update
-netaddr.ip.DictUpdater.__init__ netaddr.ip.DictUpdater-class.html#__init__
-netaddr.ip.IPv4Parser netaddr.ip.IPv4Parser-class.html
-netaddr.ip.LineRecordParser.parse netaddr.ip.LineRecordParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.ip.IPv4Parser.parse_line netaddr.ip.IPv4Parser-class.html#parse_line
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.ip.IPv4Parser.__init__ netaddr.ip.IPv4Parser-class.html#__init__
-netaddr.ip.IPv6Parser netaddr.ip.IPv6Parser-class.html
-netaddr.ip.LineRecordParser.parse netaddr.ip.LineRecordParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.ip.IPv6Parser.parse_line netaddr.ip.IPv6Parser-class.html#parse_line
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.ip.IPv6Parser.__init__ netaddr.ip.IPv6Parser-class.html#__init__
-netaddr.ip.LineRecordParser netaddr.ip.LineRecordParser-class.html
-netaddr.ip.LineRecordParser.parse netaddr.ip.LineRecordParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.ip.LineRecordParser.parse_line netaddr.ip.LineRecordParser-class.html#parse_line
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.ip.LineRecordParser.__init__ netaddr.ip.LineRecordParser-class.html#__init__
-netaddr.ip.MulticastParser netaddr.ip.MulticastParser-class.html
-netaddr.ip.MulticastParser.normalise_addr netaddr.ip.MulticastParser-class.html#normalise_addr
-netaddr.ip.LineRecordParser.parse netaddr.ip.LineRecordParser-class.html#parse
-netaddr.core.Publisher.attach netaddr.core.Publisher-class.html#attach
-netaddr.ip.MulticastParser.parse_line netaddr.ip.MulticastParser-class.html#parse_line
-netaddr.core.Publisher.notify netaddr.core.Publisher-class.html#notify
-netaddr.core.Publisher.detach netaddr.core.Publisher-class.html#detach
-netaddr.ip.MulticastParser.__init__ netaddr.ip.MulticastParser-class.html#__init__
-netaddr.strategy.AddrStrategy netaddr.strategy.AddrStrategy-class.html
-netaddr.strategy.AddrStrategy.int_to_bits netaddr.strategy.AddrStrategy-class.html#int_to_bits
-netaddr.strategy.AddrStrategy.int_to_packed netaddr.strategy.AddrStrategy-class.html#int_to_packed
-netaddr.strategy.AddrStrategy.int_to_words netaddr.strategy.AddrStrategy-class.html#int_to_words
-netaddr.strategy.AddrStrategy.__init__ netaddr.strategy.AddrStrategy-class.html#__init__
-netaddr.strategy.AddrStrategy.valid_bits netaddr.strategy.AddrStrategy-class.html#valid_bits
-netaddr.strategy.AddrStrategy.valid_int netaddr.strategy.AddrStrategy-class.html#valid_int
-netaddr.strategy.AddrStrategy.packed_to_int netaddr.strategy.AddrStrategy-class.html#packed_to_int
-netaddr.strategy.AddrStrategy.int_to_str netaddr.strategy.AddrStrategy-class.html#int_to_str
-netaddr.strategy.AddrStrategy.valid_str netaddr.strategy.AddrStrategy-class.html#valid_str
-netaddr.strategy.AddrStrategy.bits_to_int netaddr.strategy.AddrStrategy-class.html#bits_to_int
-netaddr.strategy.AddrStrategy.str_to_int netaddr.strategy.AddrStrategy-class.html#str_to_int
-netaddr.strategy.AddrStrategy.words_to_int netaddr.strategy.AddrStrategy-class.html#words_to_int
-netaddr.strategy.AddrStrategy.valid_words netaddr.strategy.AddrStrategy-class.html#valid_words
-netaddr.strategy.AddrStrategy.__repr__ netaddr.strategy.AddrStrategy-class.html#__repr__
-netaddr.strategy.AddrStrategy.int_to_bin netaddr.strategy.AddrStrategy-class.html#int_to_bin
-netaddr.strategy.AddrStrategy.STRUCT_FORMATS netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS
-netaddr.strategy.EUI48Strategy netaddr.strategy.EUI48Strategy-class.html
-netaddr.strategy.AddrStrategy.int_to_bits netaddr.strategy.AddrStrategy-class.html#int_to_bits
-netaddr.strategy.AddrStrategy.int_to_packed netaddr.strategy.AddrStrategy-class.html#int_to_packed
-netaddr.strategy.AddrStrategy.int_to_words netaddr.strategy.AddrStrategy-class.html#int_to_words
-netaddr.strategy.EUI48Strategy.__init__ netaddr.strategy.EUI48Strategy-class.html#__init__
-netaddr.strategy.AddrStrategy.valid_bits netaddr.strategy.AddrStrategy-class.html#valid_bits
-netaddr.strategy.AddrStrategy.valid_int netaddr.strategy.AddrStrategy-class.html#valid_int
-netaddr.strategy.AddrStrategy.packed_to_int netaddr.strategy.AddrStrategy-class.html#packed_to_int
-netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS netaddr.strategy.EUI48Strategy-class.html#RE_MAC_FORMATS
-netaddr.strategy.EUI48Strategy.int_to_str netaddr.strategy.EUI48Strategy-class.html#int_to_str
-netaddr.strategy.EUI48Strategy.valid_str netaddr.strategy.EUI48Strategy-class.html#valid_str
-netaddr.strategy.AddrStrategy.bits_to_int netaddr.strategy.AddrStrategy-class.html#bits_to_int
-netaddr.strategy.EUI48Strategy._ netaddr.strategy.EUI48Strategy-class.html#_
-netaddr.strategy.EUI48Strategy.reset netaddr.strategy.EUI48Strategy-class.html#reset
-netaddr.strategy.EUI48Strategy.str_to_int netaddr.strategy.EUI48Strategy-class.html#str_to_int
-netaddr.strategy.AddrStrategy.words_to_int netaddr.strategy.AddrStrategy-class.html#words_to_int
-netaddr.strategy.AddrStrategy.valid_words netaddr.strategy.AddrStrategy-class.html#valid_words
-netaddr.strategy.AddrStrategy.__repr__ netaddr.strategy.AddrStrategy-class.html#__repr__
-netaddr.strategy.AddrStrategy.int_to_bin netaddr.strategy.AddrStrategy-class.html#int_to_bin
-netaddr.strategy.AddrStrategy.STRUCT_FORMATS netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS
-netaddr.strategy.IPv4StrategyOpt netaddr.strategy.IPv4StrategyOpt-class.html
-netaddr.strategy.AddrStrategy.int_to_bits netaddr.strategy.AddrStrategy-class.html#int_to_bits
-netaddr.strategy.AddrStrategy.int_to_packed netaddr.strategy.AddrStrategy-class.html#int_to_packed
-netaddr.strategy.IPv4StrategyOpt.int_to_words netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words
-netaddr.strategy.IPv4StrategyOpt.__init__ netaddr.strategy.IPv4StrategyOpt-class.html#__init__
-netaddr.strategy.AddrStrategy.valid_bits netaddr.strategy.AddrStrategy-class.html#valid_bits
-netaddr.strategy.AddrStrategy.valid_int netaddr.strategy.AddrStrategy-class.html#valid_int
-netaddr.strategy.AddrStrategy.valid_words netaddr.strategy.AddrStrategy-class.html#valid_words
-netaddr.strategy.AddrStrategy.packed_to_int netaddr.strategy.AddrStrategy-class.html#packed_to_int
-netaddr.strategy.IPv4StrategyOpt.int_to_str netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str
-netaddr.strategy.IPv4StrategyOpt.valid_str netaddr.strategy.IPv4StrategyOpt-class.html#valid_str
-netaddr.strategy.AddrStrategy.bits_to_int netaddr.strategy.AddrStrategy-class.html#bits_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int
-netaddr.strategy.IPv4StrategyOpt.words_to_int netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int
-netaddr.strategy.IPv4StrategyStd.int_to_arpa netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa
-netaddr.strategy.AddrStrategy.__repr__ netaddr.strategy.AddrStrategy-class.html#__repr__
-netaddr.strategy.AddrStrategy.int_to_bin netaddr.strategy.AddrStrategy-class.html#int_to_bin
-netaddr.strategy.AddrStrategy.STRUCT_FORMATS netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS
-netaddr.strategy.IPv4StrategyStd netaddr.strategy.IPv4StrategyStd-class.html
-netaddr.strategy.AddrStrategy.int_to_bits netaddr.strategy.AddrStrategy-class.html#int_to_bits
-netaddr.strategy.AddrStrategy.int_to_packed netaddr.strategy.AddrStrategy-class.html#int_to_packed
-netaddr.strategy.AddrStrategy.int_to_words netaddr.strategy.AddrStrategy-class.html#int_to_words
-netaddr.strategy.IPv4StrategyStd.__init__ netaddr.strategy.IPv4StrategyStd-class.html#__init__
-netaddr.strategy.AddrStrategy.valid_bits netaddr.strategy.AddrStrategy-class.html#valid_bits
-netaddr.strategy.AddrStrategy.valid_int netaddr.strategy.AddrStrategy-class.html#valid_int
-netaddr.strategy.AddrStrategy.valid_words netaddr.strategy.AddrStrategy-class.html#valid_words
-netaddr.strategy.AddrStrategy.packed_to_int netaddr.strategy.AddrStrategy-class.html#packed_to_int
-netaddr.strategy.AddrStrategy.int_to_str netaddr.strategy.AddrStrategy-class.html#int_to_str
-netaddr.strategy.AddrStrategy.valid_str netaddr.strategy.AddrStrategy-class.html#valid_str
-netaddr.strategy.AddrStrategy.bits_to_int netaddr.strategy.AddrStrategy-class.html#bits_to_int
-netaddr.strategy.AddrStrategy.str_to_int netaddr.strategy.AddrStrategy-class.html#str_to_int
-netaddr.strategy.AddrStrategy.words_to_int netaddr.strategy.AddrStrategy-class.html#words_to_int
-netaddr.strategy.IPv4StrategyStd.int_to_arpa netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa
-netaddr.strategy.AddrStrategy.__repr__ netaddr.strategy.AddrStrategy-class.html#__repr__
-netaddr.strategy.AddrStrategy.int_to_bin netaddr.strategy.AddrStrategy-class.html#int_to_bin
-netaddr.strategy.AddrStrategy.STRUCT_FORMATS netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS
-netaddr.strategy.IPv6Strategy netaddr.strategy.IPv6Strategy-class.html
-netaddr.strategy.AddrStrategy.int_to_bits netaddr.strategy.AddrStrategy-class.html#int_to_bits
-netaddr.strategy.AddrStrategy.int_to_packed netaddr.strategy.AddrStrategy-class.html#int_to_packed
-netaddr.strategy.AddrStrategy.valid_bits netaddr.strategy.AddrStrategy-class.html#valid_bits
-netaddr.strategy.IPv6Strategy.__init__ netaddr.strategy.IPv6Strategy-class.html#__init__
-netaddr.strategy.AddrStrategy.valid_int netaddr.strategy.AddrStrategy-class.html#valid_int
-netaddr.strategy.AddrStrategy.valid_words netaddr.strategy.AddrStrategy-class.html#valid_words
-netaddr.strategy.AddrStrategy.packed_to_int netaddr.strategy.AddrStrategy-class.html#packed_to_int
-netaddr.strategy.AddrStrategy.int_to_words netaddr.strategy.AddrStrategy-class.html#int_to_words
-netaddr.strategy.IPv6Strategy.int_to_str netaddr.strategy.IPv6Strategy-class.html#int_to_str
-netaddr.strategy.IPv6Strategy.valid_str netaddr.strategy.IPv6Strategy-class.html#valid_str
-netaddr.strategy.AddrStrategy.bits_to_int netaddr.strategy.AddrStrategy-class.html#bits_to_int
-netaddr.strategy.IPv6Strategy.str_to_int netaddr.strategy.IPv6Strategy-class.html#str_to_int
-netaddr.strategy.AddrStrategy.words_to_int netaddr.strategy.AddrStrategy-class.html#words_to_int
-netaddr.strategy.IPv6Strategy.int_to_arpa netaddr.strategy.IPv6Strategy-class.html#int_to_arpa
-netaddr.strategy.AddrStrategy.__repr__ netaddr.strategy.AddrStrategy-class.html#__repr__
-netaddr.strategy.AddrStrategy.int_to_bin netaddr.strategy.AddrStrategy-class.html#int_to_bin
-netaddr.strategy.AddrStrategy.STRUCT_FORMATS netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS
diff --git a/docs/api/class-tree.html b/docs/api/class-tree.html
deleted file mode 100755
index 477196e..0000000
--- a/docs/api/class-tree.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Class Hierarchy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">&nbsp;</td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="class-tree.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<center><b>
- [ <a href="module-tree.html">Module Hierarchy</a>
- | <a href="class-tree.html">Class Hierarchy</a> ]
-</b></center><br />
-<h1 class="epydoc">Class Hierarchy</h1>
-<ul class="nomargin-top">
- <li> <strong class="uidlink">object</strong>:
- <em class="summary">The most base type</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.address.Addr-class.html">netaddr.address.Addr</a></strong>:
- <em class="summary">The base class containing common functionality for all subclasses
- representing various network address types.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.address.EUI-class.html">netaddr.address.EUI</a></strong>:
- <em class="summary">Represents an IEEE EUI (Extended Unique Identifier) indentifier.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.IP-class.html">netaddr.address.IP</a></strong>:
- <em class="summary">Represents <b>individual</b> IPv4 and IPv6 addresses.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.strategy.AddrStrategy-class.html">netaddr.strategy.AddrStrategy</a></strong>:
- <em class="summary">Basic support for common operations performed on each address type</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.strategy.EUI48Strategy-class.html">netaddr.strategy.EUI48Strategy</a></strong>:
- <em class="summary">Implements the operations that can be performed on an IEEE 48-bit
- EUI (Extended Unique Identifer) a.k.a.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.strategy.IPv4StrategyStd-class.html">netaddr.strategy.IPv4StrategyStd</a></strong>:
- <em class="summary">A 'safe' <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.strategy.IPv4StrategyOpt-class.html">netaddr.strategy.IPv4StrategyOpt</a></strong>:
- <em class="summary">An optimised <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.strategy.IPv6Strategy-class.html">netaddr.strategy.IPv6Strategy</a></strong>:
- <em class="summary">Implements the operations that can be performed on an Internet
- Protocol version 6 network address in accordance with RFC 4291.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.AddrTypeDescriptor-class.html">netaddr.address.AddrTypeDescriptor</a></strong>:
- <em class="summary">A descriptor that checks addr_type property assignments for
- validity and also keeps the strategy property in sync with any
- changes made.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.AddrValueDescriptor-class.html">netaddr.address.AddrValueDescriptor</a></strong>:
- <em class="summary">A descriptor that checks assignments to the named parameter passed
- to the constructor.</em>
- </li>
- <li> <strong class="uidlink">exceptions.BaseException</strong>:
- <em class="summary">Common base class for all exceptions</em>
- <ul>
- <li> <strong class="uidlink">exceptions.Exception</strong>:
- <em class="summary">Common base class for all non-exit exceptions.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.AddrConversionError-class.html">netaddr.AddrConversionError</a></strong>:
- <em class="summary">An Exception indicating a failure to convert between address types
- or notations.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.AddrFormatError-class.html">netaddr.AddrFormatError</a></strong>:
- <em class="summary">An Exception indicating that a network address format is not
- recognised.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.eui.NotRegisteredError-class.html">netaddr.eui.NotRegisteredError</a></strong>:
- <em class="summary">An Exception indicating that an OUI or IAB was not found in the
- IEEE Registry.</em>
- </li>
- </ul>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.FormatDescriptor-class.html">netaddr.address.FormatDescriptor</a></strong>:
- <em class="summary">A descriptor that checks formatter property assignments for
- validity.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.eui.IAB-class.html">netaddr.eui.IAB</a></strong>:
- <em class="summary">Represents an individual IEEE IAB (Individual Address Block)
- identifier.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.IPRange-class.html">netaddr.address.IPRange</a></strong>:
- <em class="summary">Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses
- using only a lower and upper bound IP address.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.address.CIDR-class.html">netaddr.address.CIDR</a></strong>:
- <em class="summary">Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless
- Inter-Domain Routing) notation.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.Wildcard-class.html">netaddr.address.Wildcard</a></strong>:
- <em class="summary">Represents blocks of IPv4 addresses using a wildcard or glob style
- syntax.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.eui.OUI-class.html">netaddr.eui.OUI</a></strong>:
- <em class="summary">Represents an individual IEEE OUI (Organisationally Unique
- Identifier) identifier.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.PrefixLenDescriptor-class.html">netaddr.address.PrefixLenDescriptor</a></strong>:
- <em class="summary">A descriptor that checks prefixlen property assignments for
- validity based on address type.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.core.Publisher-class.html">netaddr.core.Publisher</a></strong>:
- <em class="summary">A 'push' publisher that maintains a list of Subscriber objects
- notifying them of state changes when its subclasses encounter
- events of interest.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.eui.IABIndexParser-class.html">netaddr.eui.IABIndexParser</a></strong>:
- <em class="summary">A parser that processes IAB (Individual Address Block) registration
- file data published by the IEEE.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.ip.LineRecordParser-class.html">netaddr.ip.LineRecordParser</a></strong>:
- <em class="summary">A configurable Parser that understands how to parse line based
- records.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.ip.IPv4Parser-class.html">netaddr.ip.IPv4Parser</a></strong>:
- <em class="summary">A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv4 address space file.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.ip.IPv6Parser-class.html">netaddr.ip.IPv6Parser</a></strong>:
- <em class="summary">A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv6 address space file.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.ip.MulticastParser-class.html">netaddr.ip.MulticastParser</a></strong>:
- <em class="summary">A LineParser that knows how to process the IANA IPv4 multicast
- address allocation file.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.eui.OUIIndexParser-class.html">netaddr.eui.OUIIndexParser</a></strong>:
- <em class="summary">A parser that processes OUI (Organisationally Unique Identifier)
- registration file data published by the IEEE.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.address.StrategyDescriptor-class.html">netaddr.address.StrategyDescriptor</a></strong>:
- <em class="summary">A descriptor that checks strategy property assignments for validity
- and also keeps the addr_type property in sync with any changes
- made.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.core.Subscriber-class.html">netaddr.core.Subscriber</a></strong>:
- <em class="summary">Abstract class defining interface expected by a Publisher that
- concrete subclass instances register with to receive updates from.</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.ip.DictUpdater-class.html">netaddr.ip.DictUpdater</a></strong>:
- <em class="summary">Concrete Subscriber that inserts records received from a Publisher
- into a dictionary.</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.eui.FileIndexer-class.html">netaddr.eui.FileIndexer</a></strong>:
- <em class="summary">Stores index data found by a parser in a CSV file</em>
- </li>
- <li> <strong class="uidlink"><a href="netaddr.core.PrettyPrinter-class.html">netaddr.core.PrettyPrinter</a></strong>:
- <em class="summary">Concrete Subscriber that uses the pprint module to format all data
- from updates received writing them to any file-like object.</em>
- </li>
- </ul>
- </li>
- <li> <strong class="uidlink">set</strong>:
- <em class="summary">set(iterable) --&gt; set object</em>
- <ul>
- <li> <strong class="uidlink"><a href="netaddr.address.IPRangeSet-class.html">netaddr.address.IPRangeSet</a></strong>:
- <em class="summary"><b>*EXPERIMENTAL*</b> A customised Python set class that deals with
- collections of IPRange class and subclass instances.</em>
- </li>
- </ul>
- </li>
- </ul>
- </li>
-</ul>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/crarr.png b/docs/api/crarr.png
deleted file mode 100755
index 26b43c5..0000000
--- a/docs/api/crarr.png
+++ /dev/null
Binary files differ
diff --git a/docs/api/epydoc.css b/docs/api/epydoc.css
deleted file mode 100755
index 86d4170..0000000
--- a/docs/api/epydoc.css
+++ /dev/null
@@ -1,322 +0,0 @@
-
-
-/* Epydoc CSS Stylesheet
- *
- * This stylesheet can be used to customize the appearance of epydoc's
- * HTML output.
- *
- */
-
-/* Default Colors & Styles
- * - Set the default foreground & background color with 'body'; and
- * link colors with 'a:link' and 'a:visited'.
- * - Use bold for decision list terms.
- * - The heading styles defined here are used for headings *within*
- * docstring descriptions. All headings used by epydoc itself use
- * either class='epydoc' or class='toc' (CSS styles for both
- * defined below).
- */
-body { background: #ffffff; color: #000000; }
-p { margin-top: 0.5em; margin-bottom: 0.5em; }
-a:link { color: #0000ff; }
-a:visited { color: #204080; }
-dt { font-weight: bold; }
-h1 { font-size: +140%; font-style: italic;
- font-weight: bold; }
-h2 { font-size: +125%; font-style: italic;
- font-weight: bold; }
-h3 { font-size: +110%; font-style: italic;
- font-weight: normal; }
-code { font-size: 100%; }
-/* N.B.: class, not pseudoclass */
-a.link { font-family: monospace; }
-
-/* Page Header & Footer
- * - The standard page header consists of a navigation bar (with
- * pointers to standard pages such as 'home' and 'trees'); a
- * breadcrumbs list, which can be used to navigate to containing
- * classes or modules; options links, to show/hide private
- * variables and to show/hide frames; and a page title (using
- * <h1>). The page title may be followed by a link to the
- * corresponding source code (using 'span.codelink').
- * - The footer consists of a navigation bar, a timestamp, and a
- * pointer to epydoc's homepage.
- */
-h1.epydoc { margin: 0; font-size: +140%; font-weight: bold; }
-h2.epydoc { font-size: +130%; font-weight: bold; }
-h3.epydoc { font-size: +115%; font-weight: bold;
- margin-top: 0.2em; }
-td h3.epydoc { font-size: +115%; font-weight: bold;
- margin-bottom: 0; }
-table.navbar { background: #a0c0ff; color: #000000;
- border: 2px groove #c0d0d0; }
-table.navbar table { color: #000000; }
-th.navbar-select { background: #70b0ff;
- color: #000000; }
-table.navbar a { text-decoration: none; }
-table.navbar a:link { color: #0000ff; }
-table.navbar a:visited { color: #204080; }
-span.breadcrumbs { font-size: 85%; font-weight: bold; }
-span.options { font-size: 70%; }
-span.codelink { font-size: 85%; }
-td.footer { font-size: 85%; }
-
-/* Table Headers
- * - Each summary table and details section begins with a 'header'
- * row. This row contains a section title (marked by
- * 'span.table-header') as well as a show/hide private link
- * (marked by 'span.options', defined above).
- * - Summary tables that contain user-defined groups mark those
- * groups using 'group header' rows.
- */
-td.table-header { background: #70b0ff; color: #000000;
- border: 1px solid #608090; }
-td.table-header table { color: #000000; }
-td.table-header table a:link { color: #0000ff; }
-td.table-header table a:visited { color: #204080; }
-span.table-header { font-size: 120%; font-weight: bold; }
-th.group-header { background: #c0e0f8; color: #000000;
- text-align: left; font-style: italic;
- font-size: 115%;
- border: 1px solid #608090; }
-
-/* Summary Tables (functions, variables, etc)
- * - Each object is described by a single row of the table with
- * two cells. The left cell gives the object's type, and is
- * marked with 'code.summary-type'. The right cell gives the
- * object's name and a summary description.
- * - CSS styles for the table's header and group headers are
- * defined above, under 'Table Headers'
- */
-table.summary { border-collapse: collapse;
- background: #e8f0f8; color: #000000;
- border: 1px solid #608090;
- margin-bottom: 0.5em; }
-td.summary { border: 1px solid #608090; }
-code.summary-type { font-size: 85%; }
-table.summary a:link { color: #0000ff; }
-table.summary a:visited { color: #204080; }
-
-
-/* Details Tables (functions, variables, etc)
- * - Each object is described in its own div.
- * - A single-row summary table w/ table-header is used as
- * a header for each details section (CSS style for table-header
- * is defined above, under 'Table Headers').
- */
-table.details { border-collapse: collapse;
- background: #e8f0f8; color: #000000;
- border: 1px solid #608090;
- margin: .2em 0 0 0; }
-table.details table { color: #000000; }
-table.details a:link { color: #0000ff; }
-table.details a:visited { color: #204080; }
-
-/* Fields */
-dl.fields { margin-left: 2em; margin-top: 1em;
- margin-bottom: 1em; }
-dl.fields dd ul { margin-left: 0em; padding-left: 0em; }
-dl.fields dd ul li ul { margin-left: 2em; padding-left: 0em; }
-div.fields { margin-left: 2em; }
-div.fields p { margin-bottom: 0.5em; }
-
-/* Index tables (identifier index, term index, etc)
- * - link-index is used for indices containing lists of links
- * (namely, the identifier index & term index).
- * - index-where is used in link indices for the text indicating
- * the container/source for each link.
- * - metadata-index is used for indices containing metadata
- * extracted from fields (namely, the bug index & todo index).
- */
-table.link-index { border-collapse: collapse;
- background: #e8f0f8; color: #000000;
- border: 1px solid #608090; }
-td.link-index { border-width: 0px; }
-table.link-index a:link { color: #0000ff; }
-table.link-index a:visited { color: #204080; }
-span.index-where { font-size: 70%; }
-table.metadata-index { border-collapse: collapse;
- background: #e8f0f8; color: #000000;
- border: 1px solid #608090;
- margin: .2em 0 0 0; }
-td.metadata-index { border-width: 1px; border-style: solid; }
-table.metadata-index a:link { color: #0000ff; }
-table.metadata-index a:visited { color: #204080; }
-
-/* Function signatures
- * - sig* is used for the signature in the details section.
- * - .summary-sig* is used for the signature in the summary
- * table, and when listing property accessor functions.
- * */
-.sig-name { color: #006080; }
-.sig-arg { color: #008060; }
-.sig-default { color: #602000; }
-.summary-sig { font-family: monospace; }
-.summary-sig-name { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:link
- { color: #006080; font-weight: bold; }
-table.summary a.summary-sig-name:visited
- { color: #006080; font-weight: bold; }
-.summary-sig-arg { color: #006040; }
-.summary-sig-default { color: #501800; }
-
-/* Subclass list
- */
-ul.subclass-list { display: inline; }
-ul.subclass-list li { display: inline; }
-
-/* To render variables, classes etc. like functions */
-table.summary .summary-name { color: #006080; font-weight: bold;
- font-family: monospace; }
-table.summary
- a.summary-name:link { color: #006080; font-weight: bold;
- font-family: monospace; }
-table.summary
- a.summary-name:visited { color: #006080; font-weight: bold;
- font-family: monospace; }
-
-/* Variable values
- * - In the 'variable details' sections, each varaible's value is
- * listed in a 'pre.variable' box. The width of this box is
- * restricted to 80 chars; if the value's repr is longer than
- * this it will be wrapped, using a backslash marked with
- * class 'variable-linewrap'. If the value's repr is longer
- * than 3 lines, the rest will be ellided; and an ellipsis
- * marker ('...' marked with 'variable-ellipsis') will be used.
- * - If the value is a string, its quote marks will be marked
- * with 'variable-quote'.
- * - If the variable is a regexp, it is syntax-highlighted using
- * the re* CSS classes.
- */
-pre.variable { padding: .5em; margin: 0;
- background: #dce4ec; color: #000000;
- border: 1px solid #708890; }
-.variable-linewrap { color: #604000; font-weight: bold; }
-.variable-ellipsis { color: #604000; font-weight: bold; }
-.variable-quote { color: #604000; font-weight: bold; }
-.variable-group { color: #008000; font-weight: bold; }
-.variable-op { color: #604000; font-weight: bold; }
-.variable-string { color: #006030; }
-.variable-unknown { color: #a00000; font-weight: bold; }
-.re { color: #000000; }
-.re-char { color: #006030; }
-.re-op { color: #600000; }
-.re-group { color: #003060; }
-.re-ref { color: #404040; }
-
-/* Base tree
- * - Used by class pages to display the base class hierarchy.
- */
-pre.base-tree { font-size: 80%; margin: 0; }
-
-/* Frames-based table of contents headers
- * - Consists of two frames: one for selecting modules; and
- * the other listing the contents of the selected module.
- * - h1.toc is used for each frame's heading
- * - h2.toc is used for subheadings within each frame.
- */
-h1.toc { text-align: center; font-size: 105%;
- margin: 0; font-weight: bold;
- padding: 0; }
-h2.toc { font-size: 100%; font-weight: bold;
- margin: 0.5em 0 0 -0.3em; }
-
-/* Syntax Highlighting for Source Code
- * - doctest examples are displayed in a 'pre.py-doctest' block.
- * If the example is in a details table entry, then it will use
- * the colors specified by the 'table pre.py-doctest' line.
- * - Source code listings are displayed in a 'pre.py-src' block.
- * Each line is marked with 'span.py-line' (used to draw a line
- * down the left margin, separating the code from the line
- * numbers). Line numbers are displayed with 'span.py-lineno'.
- * The expand/collapse block toggle button is displayed with
- * 'a.py-toggle' (Note: the CSS style for 'a.py-toggle' should not
- * modify the font size of the text.)
- * - If a source code page is opened with an anchor, then the
- * corresponding code block will be highlighted. The code
- * block's header is highlighted with 'py-highlight-hdr'; and
- * the code block's body is highlighted with 'py-highlight'.
- * - The remaining py-* classes are used to perform syntax
- * highlighting (py-string for string literals, py-name for names,
- * etc.)
- */
-pre.py-doctest { padding: .5em; margin: 1em;
- background: #e8f0f8; color: #000000;
- border: 1px solid #708890; }
-table pre.py-doctest { background: #dce4ec;
- color: #000000; }
-pre.py-src { border: 2px solid #000000;
- background: #f0f0f0; color: #000000; }
-.py-line { border-left: 2px solid #000000;
- margin-left: .2em; padding-left: .4em; }
-.py-lineno { font-style: italic; font-size: 90%;
- padding-left: .5em; }
-a.py-toggle { text-decoration: none; }
-div.py-highlight-hdr { border-top: 2px solid #000000;
- border-bottom: 2px solid #000000;
- background: #d8e8e8; }
-div.py-highlight { border-bottom: 2px solid #000000;
- background: #d0e0e0; }
-.py-prompt { color: #005050; font-weight: bold;}
-.py-more { color: #005050; font-weight: bold;}
-.py-string { color: #006030; }
-.py-comment { color: #003060; }
-.py-keyword { color: #600000; }
-.py-output { color: #404040; }
-.py-name { color: #000050; }
-.py-name:link { color: #000050 !important; }
-.py-name:visited { color: #000050 !important; }
-.py-number { color: #005000; }
-.py-defname { color: #000060; font-weight: bold; }
-.py-def-name { color: #000060; font-weight: bold; }
-.py-base-class { color: #000060; }
-.py-param { color: #000060; }
-.py-docstring { color: #006030; }
-.py-decorator { color: #804020; }
-/* Use this if you don't want links to names underlined: */
-/*a.py-name { text-decoration: none; }*/
-
-/* Graphs & Diagrams
- * - These CSS styles are used for graphs & diagrams generated using
- * Graphviz dot. 'img.graph-without-title' is used for bare
- * diagrams (to remove the border created by making the image
- * clickable).
- */
-img.graph-without-title { border: none; }
-img.graph-with-title { border: 1px solid #000000; }
-span.graph-title { font-weight: bold; }
-span.graph-caption { }
-
-/* General-purpose classes
- * - 'p.indent-wrapped-lines' defines a paragraph whose first line
- * is not indented, but whose subsequent lines are.
- * - The 'nomargin-top' class is used to remove the top margin (e.g.
- * from lists). The 'nomargin' class is used to remove both the
- * top and bottom margin (but not the left or right margin --
- * for lists, that would cause the bullets to disappear.)
- */
-p.indent-wrapped-lines { padding: 0 0 0 7em; text-indent: -7em;
- margin: 0; }
-.nomargin-top { margin-top: 0; }
-.nomargin { margin-top: 0; margin-bottom: 0; }
-
-/* HTML Log */
-div.log-block { padding: 0; margin: .5em 0 .5em 0;
- background: #e8f0f8; color: #000000;
- border: 1px solid #000000; }
-div.log-error { padding: .1em .3em .1em .3em; margin: 4px;
- background: #ffb0b0; color: #000000;
- border: 1px solid #000000; }
-div.log-warning { padding: .1em .3em .1em .3em; margin: 4px;
- background: #ffffb0; color: #000000;
- border: 1px solid #000000; }
-div.log-info { padding: .1em .3em .1em .3em; margin: 4px;
- background: #b0ffb0; color: #000000;
- border: 1px solid #000000; }
-h2.log-hdr { background: #70b0ff; color: #000000;
- margin: 0; padding: 0em 0.5em 0em 0.5em;
- border-bottom: 1px solid #000000; font-size: 110%; }
-p.log { font-weight: bold; margin: .5em 0 .5em 0; }
-tr.opt-changed { color: #000000; font-weight: bold; }
-tr.opt-default { color: #606060; }
-pre.log { margin: 0; padding: 0; padding-left: 1em; }
diff --git a/docs/api/epydoc.js b/docs/api/epydoc.js
deleted file mode 100755
index e787dbc..0000000
--- a/docs/api/epydoc.js
+++ /dev/null
@@ -1,293 +0,0 @@
-function toggle_private() {
- // Search for any private/public links on this page. Store
- // their old text in "cmd," so we will know what action to
- // take; and change their text to the opposite action.
- var cmd = "?";
- var elts = document.getElementsByTagName("a");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "privatelink") {
- cmd = elts[i].innerHTML;
- elts[i].innerHTML = ((cmd && cmd.substr(0,4)=="show")?
- "hide&nbsp;private":"show&nbsp;private");
- }
- }
- // Update all DIVs containing private objects.
- var elts = document.getElementsByTagName("div");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "private") {
- elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
- }
- else if (elts[i].className == "public") {
- elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"block":"none");
- }
- }
- // Update all table rows containing private objects. Note, we
- // use "" instead of "block" becaue IE & firefox disagree on what
- // this should be (block vs table-row), and "" just gives the
- // default for both browsers.
- var elts = document.getElementsByTagName("tr");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "private") {
- elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"");
- }
- }
- // Update all list items containing private objects.
- var elts = document.getElementsByTagName("li");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "private") {
- elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?
- "none":"");
- }
- }
- // Update all list items containing private objects.
- var elts = document.getElementsByTagName("ul");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "private") {
- elts[i].style.display = ((cmd && cmd.substr(0,4)=="hide")?"none":"block");
- }
- }
- // Set a cookie to remember the current option.
- document.cookie = "EpydocPrivate="+cmd;
- }
-function show_private() {
- var elts = document.getElementsByTagName("a");
- for(var i=0; i<elts.length; i++) {
- if (elts[i].className == "privatelink") {
- cmd = elts[i].innerHTML;
- if (cmd && cmd.substr(0,4)=="show")
- toggle_private();
- }
- }
- }
-function getCookie(name) {
- var dc = document.cookie;
- var prefix = name + "=";
- var begin = dc.indexOf("; " + prefix);
- if (begin == -1) {
- begin = dc.indexOf(prefix);
- if (begin != 0) return null;
- } else
- { begin += 2; }
- var end = document.cookie.indexOf(";", begin);
- if (end == -1)
- { end = dc.length; }
- return unescape(dc.substring(begin + prefix.length, end));
- }
-function setFrame(url1, url2) {
- parent.frames[1].location.href = url1;
- parent.frames[2].location.href = url2;
- }
-function checkCookie() {
- var cmd=getCookie("EpydocPrivate");
- if (cmd && cmd.substr(0,4)!="show" && location.href.indexOf("#_") < 0)
- toggle_private();
- }
-function toggleCallGraph(id) {
- var elt = document.getElementById(id);
- if (elt.style.display == "none")
- elt.style.display = "block";
- else
- elt.style.display = "none";
- }
-function expand(id) {
- var elt = document.getElementById(id+"-expanded");
- if (elt) elt.style.display = "block";
- var elt = document.getElementById(id+"-expanded-linenums");
- if (elt) elt.style.display = "block";
- var elt = document.getElementById(id+"-collapsed");
- if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
- var elt = document.getElementById(id+"-collapsed-linenums");
- if (elt) { elt.innerHTML = ""; elt.style.display = "none"; }
- var elt = document.getElementById(id+"-toggle");
- if (elt) { elt.innerHTML = "-"; }
-}
-
-function collapse(id) {
- var elt = document.getElementById(id+"-expanded");
- if (elt) elt.style.display = "none";
- var elt = document.getElementById(id+"-expanded-linenums");
- if (elt) elt.style.display = "none";
- var elt = document.getElementById(id+"-collapsed-linenums");
- if (elt) { elt.innerHTML = "<br />"; elt.style.display="block"; }
- var elt = document.getElementById(id+"-toggle");
- if (elt) { elt.innerHTML = "+"; }
- var elt = document.getElementById(id+"-collapsed");
- if (elt) {
- elt.style.display = "block";
-
- var indent = elt.getAttribute("indent");
- var pad = elt.getAttribute("pad");
- var s = "<tt class='py-lineno'>";
- for (var i=0; i<pad.length; i++) { s += "&nbsp;" }
- s += "</tt>";
- s += "&nbsp;&nbsp;<tt class='py-line'>";
- for (var i=0; i<indent.length; i++) { s += "&nbsp;" }
- s += "<a href='#' onclick='expand(\"" + id;
- s += "\");return false'>...</a></tt><br />";
- elt.innerHTML = s;
- }
-}
-
-function toggle(id) {
- elt = document.getElementById(id+"-toggle");
- if (elt.innerHTML == "-")
- collapse(id);
- else
- expand(id);
- return false;
-}
-
-function highlight(id) {
- var elt = document.getElementById(id+"-def");
- if (elt) elt.className = "py-highlight-hdr";
- var elt = document.getElementById(id+"-expanded");
- if (elt) elt.className = "py-highlight";
- var elt = document.getElementById(id+"-collapsed");
- if (elt) elt.className = "py-highlight";
-}
-
-function num_lines(s) {
- var n = 1;
- var pos = s.indexOf("\n");
- while ( pos > 0) {
- n += 1;
- pos = s.indexOf("\n", pos+1);
- }
- return n;
-}
-
-// Collapse all blocks that mave more than `min_lines` lines.
-function collapse_all(min_lines) {
- var elts = document.getElementsByTagName("div");
- for (var i=0; i<elts.length; i++) {
- var elt = elts[i];
- var split = elt.id.indexOf("-");
- if (split > 0)
- if (elt.id.substring(split, elt.id.length) == "-expanded")
- if (num_lines(elt.innerHTML) > min_lines)
- collapse(elt.id.substring(0, split));
- }
-}
-
-function expandto(href) {
- var start = href.indexOf("#")+1;
- if (start != 0 && start != href.length) {
- if (href.substring(start, href.length) != "-") {
- collapse_all(4);
- pos = href.indexOf(".", start);
- while (pos != -1) {
- var id = href.substring(start, pos);
- expand(id);
- pos = href.indexOf(".", pos+1);
- }
- var id = href.substring(start, href.length);
- expand(id);
- highlight(id);
- }
- }
-}
-
-function kill_doclink(id) {
- var parent = document.getElementById(id);
- parent.removeChild(parent.childNodes.item(0));
-}
-function auto_kill_doclink(ev) {
- if (!ev) var ev = window.event;
- if (!this.contains(ev.toElement)) {
- var parent = document.getElementById(this.parentID);
- parent.removeChild(parent.childNodes.item(0));
- }
-}
-
-function doclink(id, name, targets_id) {
- var elt = document.getElementById(id);
-
- // If we already opened the box, then destroy it.
- // (This case should never occur, but leave it in just in case.)
- if (elt.childNodes.length > 1) {
- elt.removeChild(elt.childNodes.item(0));
- }
- else {
- // The outer box: relative + inline positioning.
- var box1 = document.createElement("div");
- box1.style.position = "relative";
- box1.style.display = "inline";
- box1.style.top = 0;
- box1.style.left = 0;
-
- // A shadow for fun
- var shadow = document.createElement("div");
- shadow.style.position = "absolute";
- shadow.style.left = "-1.3em";
- shadow.style.top = "-1.3em";
- shadow.style.background = "#404040";
-
- // The inner box: absolute positioning.
- var box2 = document.createElement("div");
- box2.style.position = "relative";
- box2.style.border = "1px solid #a0a0a0";
- box2.style.left = "-.2em";
- box2.style.top = "-.2em";
- box2.style.background = "white";
- box2.style.padding = ".3em .4em .3em .4em";
- box2.style.fontStyle = "normal";
- box2.onmouseout=auto_kill_doclink;
- box2.parentID = id;
-
- // Get the targets
- var targets_elt = document.getElementById(targets_id);
- var targets = targets_elt.getAttribute("targets");
- var links = "";
- target_list = targets.split(",");
- for (var i=0; i<target_list.length; i++) {
- var target = target_list[i].split("=");
- links += "<li><a href='" + target[1] +
- "' style='text-decoration:none'>" +
- target[0] + "</a></li>";
- }
-
- // Put it all together.
- elt.insertBefore(box1, elt.childNodes.item(0));
- //box1.appendChild(box2);
- box1.appendChild(shadow);
- shadow.appendChild(box2);
- box2.innerHTML =
- "Which <b>"+name+"</b> do you want to see documentation for?" +
- "<ul style='margin-bottom: 0;'>" +
- links +
- "<li><a href='#' style='text-decoration:none' " +
- "onclick='kill_doclink(\""+id+"\");return false;'>"+
- "<i>None of the above</i></a></li></ul>";
- }
- return false;
-}
-
-function get_anchor() {
- var href = location.href;
- var start = href.indexOf("#")+1;
- if ((start != 0) && (start != href.length))
- return href.substring(start, href.length);
- }
-function redirect_url(dottedName) {
- // Scan through each element of the "pages" list, and check
- // if "name" matches with any of them.
- for (var i=0; i<pages.length; i++) {
-
- // Each page has the form "<pagename>-m" or "<pagename>-c";
- // extract the <pagename> portion & compare it to dottedName.
- var pagename = pages[i].substring(0, pages[i].length-2);
- if (pagename == dottedName.substring(0,pagename.length)) {
-
- // We've found a page that matches `dottedName`;
- // construct its URL, using leftover `dottedName`
- // content to form an anchor.
- var pagetype = pages[i].charAt(pages[i].length-1);
- var url = pagename + ((pagetype=="m")?"-module.html":
- "-class.html");
- if (dottedName.length > pagename.length)
- url += "#" + dottedName.substring(pagename.length+1,
- dottedName.length);
- return url;
- }
- }
- }
diff --git a/docs/api/frames.html b/docs/api/frames.html
deleted file mode 100755
index b12d692..0000000
--- a/docs/api/frames.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
- "DTD/xhtml1-frameset.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title> netaddr </title>
-</head>
-<frameset cols="20%,80%">
- <frameset rows="30%,70%">
- <frame src="toc.html" name="moduleListFrame"
- id="moduleListFrame" />
- <frame src="toc-everything.html" name="moduleFrame"
- id="moduleFrame" />
- </frameset>
- <frame src="netaddr-module.html" name="mainFrame" id="mainFrame" />
-</frameset>
-</html>
diff --git a/docs/api/help.html b/docs/api/help.html
deleted file mode 100755
index d93d2ea..0000000
--- a/docs/api/help.html
+++ /dev/null
@@ -1,276 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Help</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">&nbsp;</td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="help.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-
-<h1 class="epydoc"> API Documentation </h1>
-
-<p> This document contains the API (Application Programming Interface)
-documentation for netaddr. Documentation for the Python
-objects defined by the project is divided into separate pages for each
-package, module, and class. The API documentation also includes two
-pages containing information about the project as a whole: a trees
-page, and an index page. </p>
-
-<h2> Object Documentation </h2>
-
- <p>Each <strong>Package Documentation</strong> page contains: </p>
- <ul>
- <li> A description of the package. </li>
- <li> A list of the modules and sub-packages contained by the
- package. </li>
- <li> A summary of the classes defined by the package. </li>
- <li> A summary of the functions defined by the package. </li>
- <li> A summary of the variables defined by the package. </li>
- <li> A detailed description of each function defined by the
- package. </li>
- <li> A detailed description of each variable defined by the
- package. </li>
- </ul>
-
- <p>Each <strong>Module Documentation</strong> page contains:</p>
- <ul>
- <li> A description of the module. </li>
- <li> A summary of the classes defined by the module. </li>
- <li> A summary of the functions defined by the module. </li>
- <li> A summary of the variables defined by the module. </li>
- <li> A detailed description of each function defined by the
- module. </li>
- <li> A detailed description of each variable defined by the
- module. </li>
- </ul>
-
- <p>Each <strong>Class Documentation</strong> page contains: </p>
- <ul>
- <li> A class inheritance diagram. </li>
- <li> A list of known subclasses. </li>
- <li> A description of the class. </li>
- <li> A summary of the methods defined by the class. </li>
- <li> A summary of the instance variables defined by the class. </li>
- <li> A summary of the class (static) variables defined by the
- class. </li>
- <li> A detailed description of each method defined by the
- class. </li>
- <li> A detailed description of each instance variable defined by the
- class. </li>
- <li> A detailed description of each class (static) variable defined
- by the class. </li>
- </ul>
-
-<h2> Project Documentation </h2>
-
- <p> The <strong>Trees</strong> page contains the module and class hierarchies: </p>
- <ul>
- <li> The <em>module hierarchy</em> lists every package and module, with
- modules grouped into packages. At the top level, and within each
- package, modules and sub-packages are listed alphabetically. </li>
- <li> The <em>class hierarchy</em> lists every class, grouped by base
- class. If a class has more than one base class, then it will be
- listed under each base class. At the top level, and under each base
- class, classes are listed alphabetically. </li>
- </ul>
-
- <p> The <strong>Index</strong> page contains indices of terms and
- identifiers: </p>
- <ul>
- <li> The <em>term index</em> lists every term indexed by any object's
- documentation. For each term, the index provides links to each
- place where the term is indexed. </li>
- <li> The <em>identifier index</em> lists the (short) name of every package,
- module, class, method, function, variable, and parameter. For each
- identifier, the index provides a short description, and a link to
- its documentation. </li>
- </ul>
-
-<h2> The Table of Contents </h2>
-
-<p> The table of contents occupies the two frames on the left side of
-the window. The upper-left frame displays the <em>project
-contents</em>, and the lower-left frame displays the <em>module
-contents</em>: </p>
-
-<table class="help summary" border="1" cellspacing="0" cellpadding="3">
- <tr style="height: 30%">
- <td align="center" style="font-size: small">
- Project<br />Contents<hr />...</td>
- <td align="center" style="font-size: small" rowspan="2" width="70%">
- API<br />Documentation<br />Frame<br /><br /><br />
- </td>
- </tr>
- <tr>
- <td align="center" style="font-size: small">
- Module<br />Contents<hr />&nbsp;<br />...<br />&nbsp;
- </td>
- </tr>
-</table><br />
-
-<p> The <strong>project contents frame</strong> contains a list of all packages
-and modules that are defined by the project. Clicking on an entry
-will display its contents in the module contents frame. Clicking on a
-special entry, labeled "Everything," will display the contents of
-the entire project. </p>
-
-<p> The <strong>module contents frame</strong> contains a list of every
-submodule, class, type, exception, function, and variable defined by a
-module or package. Clicking on an entry will display its
-documentation in the API documentation frame. Clicking on the name of
-the module, at the top of the frame, will display the documentation
-for the module itself. </p>
-
-<p> The "<strong>frames</strong>" and "<strong>no frames</strong>" buttons below the top
-navigation bar can be used to control whether the table of contents is
-displayed or not. </p>
-
-<h2> The Navigation Bar </h2>
-
-<p> A navigation bar is located at the top and bottom of every page.
-It indicates what type of page you are currently viewing, and allows
-you to go to related pages. The following table describes the labels
-on the navigation bar. Note that not some labels (such as
-[Parent]) are not displayed on all pages. </p>
-
-<table class="summary" border="1" cellspacing="0" cellpadding="3" width="100%">
-<tr class="summary">
- <th>Label</th>
- <th>Highlighted when...</th>
- <th>Links to...</th>
-</tr>
- <tr><td valign="top"><strong>[Parent]</strong></td>
- <td valign="top"><em>(never highlighted)</em></td>
- <td valign="top"> the parent of the current package </td></tr>
- <tr><td valign="top"><strong>[Package]</strong></td>
- <td valign="top">viewing a package</td>
- <td valign="top">the package containing the current object
- </td></tr>
- <tr><td valign="top"><strong>[Module]</strong></td>
- <td valign="top">viewing a module</td>
- <td valign="top">the module containing the current object
- </td></tr>
- <tr><td valign="top"><strong>[Class]</strong></td>
- <td valign="top">viewing a class </td>
- <td valign="top">the class containing the current object</td></tr>
- <tr><td valign="top"><strong>[Trees]</strong></td>
- <td valign="top">viewing the trees page</td>
- <td valign="top"> the trees page </td></tr>
- <tr><td valign="top"><strong>[Index]</strong></td>
- <td valign="top">viewing the index page</td>
- <td valign="top"> the index page </td></tr>
- <tr><td valign="top"><strong>[Help]</strong></td>
- <td valign="top">viewing the help page</td>
- <td valign="top"> the help page </td></tr>
-</table>
-
-<p> The "<strong>show private</strong>" and "<strong>hide private</strong>" buttons below
-the top navigation bar can be used to control whether documentation
-for private objects is displayed. Private objects are usually defined
-as objects whose (short) names begin with a single underscore, but do
-not end with an underscore. For example, "<code>_x</code>",
-"<code>__pprint</code>", and "<code>epydoc.epytext._tokenize</code>"
-are private objects; but "<code>re.sub</code>",
-"<code>__init__</code>", and "<code>type_</code>" are not. However,
-if a module defines the "<code>__all__</code>" variable, then its
-contents are used to decide which objects are private. </p>
-
-<p> A timestamp below the bottom navigation bar indicates when each
-page was last updated. </p>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Help&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/identifier-index.html b/docs/api/identifier-index.html
deleted file mode 100755
index 9ab3a11..0000000
--- a/docs/api/identifier-index.html
+++ /dev/null
@@ -1,1105 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Identifier Index</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">&nbsp;</td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="identifier-index.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<table border="0" width="100%">
-<tr valign="bottom"><td>
-<h1 class="epydoc">Identifier Index</h1>
-</td><td>
-[
- <a href="#A">A</a>
- <a href="#B">B</a>
- <a href="#C">C</a>
- <a href="#D">D</a>
- <a href="#E">E</a>
- <a href="#F">F</a>
- G
- <a href="#H">H</a>
- <a href="#I">I</a>
- J
- K
- <a href="#L">L</a>
- <a href="#M">M</a>
- <a href="#N">N</a>
- <a href="#O">O</a>
- <a href="#P">P</a>
- <a href="#Q">Q</a>
- <a href="#R">R</a>
- <a href="#S">S</a>
- <a href="#T">T</a>
- <a href="#U">U</a>
- <a href="#V">V</a>
- <a href="#W">W</a>
- X
- Y
- Z
- <a href="#_">_</a>
-]
-</td></table>
-<table border="0" width="100%">
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="A">A</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#abbrev_to_verbose">abbrev_to_verbose()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#adjacent">adjacent()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html">Addr</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#all_matches">all_matches()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#any_match">any_match()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.AddrConversionError-class.html">AddrConversionError</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_EUI64">AT_EUI64</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address-module.html">address</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_INET">AT_INET</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#address">address()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_INET6">AT_INET6</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#address">address()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_LINK">AT_LINK</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#addr_type">addr_type</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.AddrFormatError-class.html">AddrFormatError</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_NAMES">AT_NAMES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address-module.html#AT_STRATEGIES">AT_STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrTypeDescriptor-class.html">AddrTypeDescriptor</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr-module.html#AT_UNSPEC">AT_UNSPEC</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#ADDR_TYPES">ADDR_TYPES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrValueDescriptor-class.html">AddrValueDescriptor</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.Publisher-class.html#attach">attach()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.Publisher-class.html">Publisher</a>)</span></td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="B">B</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html#BIG_ENDIAN_PLATFORM">BIG_ENDIAN_PLATFORM</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#bits">bits()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#broadcast">broadcast</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#bin">bin()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html">CIDR</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#cidrs">cidrs()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core-module.html">core</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#cidr">cidr()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#cidrs">cidrs()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#create_ieee_indices">create_ieee_indices()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.core.Publisher-class.html#detach">detach()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.Publisher-class.html">Publisher</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.DictUpdater-class.html">DictUpdater</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="E">E</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#ei">ei()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html">eui</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#eui64">eui64()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html">EUI</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="F">F</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.FileIndexer-class.html">FileIndexer</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#fmt">fmt</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.FormatDescriptor-class.html">FormatDescriptor</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#first">first</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#fmt">fmt</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#fmt">fmt</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#format">format()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="H">H</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#hostmask">hostmask</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#hostname">hostname()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html">IAB</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#int_to_str">int_to_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#ipv6_link_local">ipv6_link_local()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#iab">iab()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str">int_to_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv6Parser-class.html">IPv6Parser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IABIndexParser-class.html">IABIndexParser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html#int_to_str">int_to_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.ip-module.html#IANA_INFO">IANA_INFO</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_words">int_to_words()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_hostmask">is_hostmask()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_IAB_INDEX">IEEE_IAB_INDEX</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words">int_to_words()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_ipv4_compat">is_ipv4_compat()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_IAB_METADATA">IEEE_IAB_METADATA</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html">IP</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_ipv4_mapped">is_ipv4_mapped()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_IAB_REGISTRY">IEEE_IAB_REGISTRY</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip-module.html">ip</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_link_local">is_link_local()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_OUI_INDEX">IEEE_OUI_INDEX</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html">IPRange</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_loopback">is_loopback()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_OUI_METADATA">IEEE_OUI_METADATA</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#iprange">iprange()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_multicast">is_multicast()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#IEEE_OUI_REGISTRY">IEEE_OUI_REGISTRY</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#iprange">iprange()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_netmask">is_netmask()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#info">info()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_private">is_private()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#info">info()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#ipv4">ipv4()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_reserved">is_reserved()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa">int_to_arpa()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.misc-module.html#ipv4_cidr_prefixes">ipv4_cidr_prefixes()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.misc-module.html">netaddr.misc</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#is_unicast">is_unicast()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html#int_to_arpa">int_to_arpa()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv4Parser-class.html">IPv4Parser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#is_valid">is_valid()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#isiab">isiab()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#issubnet">issubnet()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#ipv6">ipv6()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#issupernet">issupernet()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_str">int_to_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.misc-module.html#ipv6_cidr_prefixes">ipv6_cidr_prefixes()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.misc-module.html">netaddr.misc</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#iter_host_addrs">iter_host_addrs()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="L">L</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#last">last</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip-module.html#load_iana_info">load_iana_info()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui-module.html#load_ieee_indices">load_ieee_indices()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="M">M</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#max_match">max_match()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.misc-module.html">misc</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#min_match">min_match()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.MulticastParser-class.html">MulticastParser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html">netaddr</a></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#network">network</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.NotRegisteredError-class.html">NotRegisteredError</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#netmask">netmask</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.MulticastParser-class.html#normalise_addr">normalise_addr()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.MulticastParser-class.html">MulticastParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address-module.html#nrange">nrange()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#netmask_bits">netmask_bits()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.Publisher-class.html#notify">notify()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.Publisher-class.html">Publisher</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#org">org()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html">OUI</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#overlaps">overlaps()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#org">org()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#oui">oui()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#org_count">org_count()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUIIndexParser-class.html">OUIIndexParser</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="P">P</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#packed">packed()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv6Parser-class.html#parse_line">parse_line()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.IPv6Parser-class.html">IPv6Parser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.PrettyPrinter-class.html">PrettyPrinter</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core-module.html" onclick="show_private();">netaddr.core</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.LineRecordParser-class.html#parse_line">parse_line()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.misc-module.html#print_ipv4_cidr_prefixes">print_ipv4_cidr_prefixes()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.misc-module.html">netaddr.misc</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IABIndexParser-class.html#parse">parse()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IABIndexParser-class.html">IABIndexParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.MulticastParser-class.html#parse_line">parse_line()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.MulticastParser-class.html">MulticastParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.misc-module.html#print_ipv6_cidr_prefixes">print_ipv6_cidr_prefixes()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.misc-module.html">netaddr.misc</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUIIndexParser-class.html#parse">parse()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUIIndexParser-class.html">OUIIndexParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#prefixlen">prefixlen</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.Publisher-class.html">Publisher</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core-module.html" onclick="show_private();">netaddr.core</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.ip.LineRecordParser-class.html#parse">parse()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#prefixlen">prefixlen</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv4Parser-class.html#parse_line">parse_line()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.IPv4Parser-class.html">IPv4Parser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.PrefixLenDescriptor-class.html">PrefixLenDescriptor</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="Q">Q</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.ip-module.html#query">query()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip-module.html">netaddr.ip</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="R">R</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#RE_MAC_FORMATS">RE_MAC_FORMATS</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#registration">registration()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#reverse_dns">reverse_dns()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#registration">registration()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#reset">reset()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="S">S</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#size">size()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#str_to_int">str_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#span">span()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#str_to_int">str_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#split_iab_mac">split_iab_mac()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int">str_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html#ST_EUI48">ST_EUI48</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html#str_to_int">str_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#ST_EUI48">ST_EUI48</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html#ST_EUI64">ST_EUI64</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#ST_EUI64">ST_EUI64</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.StrategyDescriptor-class.html">StrategyDescriptor</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html#ST_IPV4">ST_IPV4</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS">STRUCT_FORMATS</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#ST_IPV4">ST_IPV4</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#subnet">subnet()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr-module.html#ST_IPV6">ST_IPV6</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr-module.html">netaddr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#STRATEGIES">STRATEGIES</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.Subscriber-class.html">Subscriber</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core-module.html" onclick="show_private();">netaddr.core</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#ST_IPV6">ST_IPV6</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#strategy">strategy</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="T">T</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#TRANSLATE_STR">TRANSLATE_STR</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-<tr><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td><td class="link-index">&nbsp;</td></tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.core.PrettyPrinter-class.html#update">update()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.PrettyPrinter-class.html">PrettyPrinter</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.FileIndexer-class.html#update">update()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.FileIndexer-class.html">FileIndexer</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#USE_IPV4_OPT">USE_IPV4_OPT</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.core.Subscriber-class.html#update">update()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.Subscriber-class.html">Subscriber</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.DictUpdater-class.html#update">update()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.DictUpdater-class.html">DictUpdater</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="V">V</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#valid_str">valid_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#valid_str">valid_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#value">value</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#valid_str">valid_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html#valid_str">valid_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="W">W</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html">Wildcard</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#wildcard">wildcard()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int">words_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#wildcard">wildcard()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#words_to_int">words_to_int()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index">&nbsp;</td>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="_">_</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#_">_</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.StrategyDescriptor-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.StrategyDescriptor-class.html">StrategyDescriptor</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__lshift__">__lshift__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#_">_</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__lt__">__lt__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__add__">__add__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.PrettyPrinter-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.PrettyPrinter-class.html">PrettyPrinter</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__lt__">__lt__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#__add__">__add__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.core.Publisher-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.core.Publisher-class.html">Publisher</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__ne__">__ne__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__and__">__and__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.FileIndexer-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.FileIndexer-class.html">FileIndexer</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__ne__">__ne__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__contains__">__contains__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__or__">__or__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#__contains__">__contains__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IABIndexParser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IABIndexParser-class.html">IABIndexParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__eq__">__eq__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__eq__">__eq__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUIIndexParser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUIIndexParser-class.html">OUIIndexParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__ge__">__ge__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.DictUpdater-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.DictUpdater-class.html">DictUpdater</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__ge__">__ge__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv4Parser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.IPv4Parser-class.html">IPv4Parser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__getitem__">__getitem__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.IPv6Parser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.IPv6Parser-class.html">IPv6Parser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__getitem__">__getitem__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.LineRecordParser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__gt__">__gt__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.ip.MulticastParser-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.ip.MulticastParser-class.html">MulticastParser</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__gt__">__gt__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.AddrStrategy-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__rshift__">__rshift__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__hash__">__hash__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.EUI48Strategy-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrTypeDescriptor-class.html#__set__">__set__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.AddrTypeDescriptor-class.html">AddrTypeDescriptor</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__hash__">__hash__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrValueDescriptor-class.html#__set__">__set__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.AddrValueDescriptor-class.html">AddrValueDescriptor</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__hex__">__hex__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv4StrategyStd-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.FormatDescriptor-class.html#__set__">__set__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.FormatDescriptor-class.html">FormatDescriptor</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#__hex__">__hex__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy.IPv6Strategy-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.PrefixLenDescriptor-class.html#__set__">__set__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.PrefixLenDescriptor-class.html">PrefixLenDescriptor</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#__hex__">__hex__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__int__">__int__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.StrategyDescriptor-class.html#__set__">__set__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.StrategyDescriptor-class.html">StrategyDescriptor</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__iadd__">__iadd__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#__int__">__int__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__setitem__">__setitem__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__iadd__">__iadd__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#__int__">__int__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__invert__">__invert__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrTypeDescriptor-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.AddrTypeDescriptor-class.html">AddrTypeDescriptor</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__isub__">__isub__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.AddrValueDescriptor-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.AddrValueDescriptor-class.html">AddrValueDescriptor</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__isub__">__isub__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__iter__">__iter__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Wildcard-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Wildcard-class.html">Wildcard</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.EUI-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.EUI-class.html">EUI</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__iter__">__iter__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.IAB-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.IAB-class.html">IAB</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.FormatDescriptor-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.FormatDescriptor-class.html">FormatDescriptor</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__le__">__le__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.eui.OUI-class.html#__str__">__str__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.eui.OUI-class.html">OUI</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IP-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IP-class.html">IP</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__le__">__le__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__sub__">__sub__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__len__">__len__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.CIDR-class.html#__sub__">__sub__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.CIDR-class.html">CIDR</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRangeSet-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.IPRange-class.html#__len__">__len__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.IPRange-class.html">IPRange</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__xor__">__xor__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="netaddr.address.PrefixLenDescriptor-class.html#__init__">__init__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.PrefixLenDescriptor-class.html">PrefixLenDescriptor</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.address.Addr-class.html#__long__">__long__()</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.address.Addr-class.html">Addr</a>)</span></td>
-<td width="33%" class="link-index"><a href="netaddr.strategy-module.html#_BYTES_TO_BITS">_BYTES_TO_BITS</a><br />
-<span class="index-where">(in&nbsp;<a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a>)</span></td>
-</tr>
-</table>
-</td></tr>
-</table>
-<br /><br /><!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Indices&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/index.html b/docs/api/index.html
deleted file mode 100755
index b12d692..0000000
--- a/docs/api/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
- "DTD/xhtml1-frameset.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title> netaddr </title>
-</head>
-<frameset cols="20%,80%">
- <frameset rows="30%,70%">
- <frame src="toc.html" name="moduleListFrame"
- id="moduleListFrame" />
- <frame src="toc-everything.html" name="moduleFrame"
- id="moduleFrame" />
- </frameset>
- <frame src="netaddr-module.html" name="mainFrame" id="mainFrame" />
-</frameset>
-</html>
diff --git a/docs/api/module-tree.html b/docs/api/module-tree.html
deleted file mode 100755
index 0855724..0000000
--- a/docs/api/module-tree.html
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Module Hierarchy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">&nbsp;</td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="module-tree.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<center><b>
- [ <a href="module-tree.html">Module Hierarchy</a>
- | <a href="class-tree.html">Class Hierarchy</a> ]
-</b></center><br />
-<h1 class="epydoc">Module Hierarchy</h1>
-<ul class="nomargin-top">
- <li> <strong class="uidlink"><a href="netaddr-module.html">netaddr</a></strong>: <em class="summary">network address manipulation, done Pythonically</em>
- <ul>
- <li class="private"> <strong class="uidlink"><a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a></strong>: <em class="summary">network address classes (IP, EUI) and associated aggregate classes
- (CIDR, Wildcard and IPRange).</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.core-module.html" onclick="show_private();">netaddr.core</a></strong>: <em class="summary">Classes and routines that are common to various netaddr sub
- modules.</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a></strong>: <em class="summary">Provides access to public network address information published by
- the IEEE.</em> </li>
- <li> <strong class="uidlink"><a href="netaddr.ip-module.html">netaddr.ip</a></strong>: <em class="summary">Provides access to public network address information published by
- IANA.</em> </li>
- <li> <strong class="uidlink"><a href="netaddr.misc-module.html">netaddr.misc</a></strong>: <em class="summary">Miscellanous functions and classes.</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a></strong>: <em class="summary">network address conversion logic, constants and shared strategy
- objects.</em> </li>
- </ul>
- </li>
-</ul>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Trees&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr-module.html b/docs/api/netaddr-module.html
deleted file mode 100755
index 4730748..0000000
--- a/docs/api/netaddr-module.html
+++ /dev/null
@@ -1,410 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- Package&nbsp;netaddr
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== PACKAGE DESCRIPTION ==================== -->
-<h1 class="epydoc">Package netaddr</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr-pysrc.html">source&nbsp;code</a></span></p>
-<p>network address manipulation, done Pythonically</p>
-
-<hr />
-<div class="fields"> <p><strong>Version:</strong>
- 0.6
- </p>
-</div><!-- ==================== SUBMODULES ==================== -->
-<a name="section-Submodules"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Submodules</span></td>
-</tr>
- <tr><td class="summary">
- <ul class="nomargin">
- <li class="private"> <strong class="uidlink"><a href="netaddr.address-module.html" onclick="show_private();">netaddr.address</a></strong>: <em class="summary">network address classes (IP, EUI) and associated aggregate classes
- (CIDR, Wildcard and IPRange).</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.core-module.html" onclick="show_private();">netaddr.core</a></strong>: <em class="summary">Classes and routines that are common to various netaddr sub
- modules.</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.eui-module.html" onclick="show_private();">netaddr.eui</a></strong>: <em class="summary">Provides access to public network address information published by
- the IEEE.</em> </li>
- <li> <strong class="uidlink"><a href="netaddr.ip-module.html">netaddr.ip</a></strong>: <em class="summary">Provides access to public network address information published by
- IANA.</em> </li>
- <li> <strong class="uidlink"><a href="netaddr.misc-module.html">netaddr.misc</a></strong>: <em class="summary">Miscellanous functions and classes.</em> </li>
- <li class="private"> <strong class="uidlink"><a href="netaddr.strategy-module.html" onclick="show_private();">netaddr.strategy</a></strong>: <em class="summary">network address conversion logic, constants and shared strategy
- objects.</em> </li>
- </ul></td></tr>
-</table>
-
-<br />
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.AddrFormatError-class.html" class="summary-name">AddrFormatError</a><br />
- An Exception indicating that a network address format is not
- recognised.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.AddrConversionError-class.html" class="summary-name">AddrConversionError</a><br />
- An Exception indicating a failure to convert between address types
- or notations.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IP-class.html" class="summary-name">IP</a><br />
- Represents <b>individual</b> IPv4 and IPv6 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IPRange-class.html" class="summary-name">IPRange</a><br />
- Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses
- using only a lower and upper bound IP address.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IPRangeSet-class.html" class="summary-name">IPRangeSet</a><br />
- <b>*EXPERIMENTAL*</b> A customised Python set class that deals with
- collections of IPRange class and subclass instances.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html" class="summary-name">CIDR</a><br />
- Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless
- Inter-Domain Routing) notation.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.Wildcard-class.html" class="summary-name">Wildcard</a><br />
- Represents blocks of IPv4 addresses using a wildcard or glob style
- syntax.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.EUI-class.html" class="summary-name">EUI</a><br />
- Represents an IEEE EUI (Extended Unique Identifier) indentifier.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.OUI-class.html" class="summary-name">OUI</a><br />
- Represents an individual IEEE OUI (Organisationally Unique
- Identifier) identifier.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.IAB-class.html" class="summary-name">IAB</a><br />
- Represents an individual IEEE IAB (Individual Address Block)
- identifier.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.NotRegisteredError-class.html" class="summary-name">NotRegisteredError</a><br />
- An Exception indicating that an OUI or IAB was not found in the
- IEEE Registry.
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Functions</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr-module.html#nrange" class="summary-sig-name">nrange</a>(<span class="summary-sig-arg">start</span>,
- <span class="summary-sig-arg">stop</span>,
- <span class="summary-sig-arg">step</span>=<span class="summary-sig-default">1</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- An xrange work alike generator that produces sequences of IP
- addresses based on start and stop addresses, in intervals of step
- size.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#nrange">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES ==================== -->
-<a name="section-Variables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="AT_INET"></a><span class="summary-name">AT_INET</span> = <code title="4">4</code><br />
- IPv4 address type constant.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="AT_INET6"></a><span class="summary-name">AT_INET6</span> = <code title="6">6</code><br />
- IPv6 address type constant.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="AT_LINK"></a><span class="summary-name">AT_LINK</span> = <code title="48">48</code><br />
- MAC/EUI-48 address type constant.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="AT_EUI64"></a><span class="summary-name">AT_EUI64</span> = <code title="64">64</code><br />
- EUI-64 address type constant.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_IPV4"></a><span class="summary-name">ST_IPV4</span> = <code title="IPv4StrategyOpt(32, 8, '.', 4, 10, False)">IPv4StrategyOpt(32, 8, '.', 4, 10, False)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_IPV6"></a><span class="summary-name">ST_IPV6</span> = <code title="IPv6Strategy(128, 16, ':', 6, 16, False)">IPv6Strategy(128, 16, ':', 6, 16, False)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_EUI48"></a><span class="summary-name">ST_EUI48</span> = <code title="EUI48Strategy(48, 8, '-', 48, 16, True)">EUI48Strategy(48, 8, '-', 48, 16, True)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_EUI64"></a><span class="summary-name">ST_EUI64</span> = <code title="AddrStrategy(64, 8, '-', 64, 16, True)">AddrStrategy(64, 8, '-', 64, 16, True)</code>
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="nrange"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">nrange</span>(<span class="sig-arg">start</span>,
- <span class="sig-arg">stop</span>,
- <span class="sig-arg">step</span>=<span class="sig-default">1</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#nrange">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>An xrange work alike generator that produces sequences of IP addresses
- based on start and stop addresses, in intervals of step size.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>start</code></strong> - first IP address string or <a
- href="netaddr.address.IP-class.html" class="link">IP</a> object
- in range.</li>
- <li><strong class="pname"><code>stop</code></strong> - last IP address string or <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object in range</li>
- <li><strong class="pname"><code>step</code></strong> - (optional) size of step between address in range. (Default: 1)</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used on addresses returned. (Default: None -
- <a href="netaddr.address.IP-class.html" class="link">IP</a>
- objects). Supported options :-
- <ul>
- <li>
- <code>str</code> - IP address strings
- </li>
- <li>
- <code>int</code>, <code>long</code> - IP address integer
- (network byte order)
- </li>
- <li>
- <code>hex</code> - IP address as a hexadecimal number
- </li>
- <li>
- <a href="netaddr.address.IP-class.html" class="link">IP</a>
- class/subclass or callable that accepts
- <code>addr_value</code> and <code>addr_type</code> arguments.
- </li>
- </ul></li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr-pysrc.html b/docs/api/netaddr-pysrc.html
deleted file mode 100755
index 0db9fdc..0000000
--- a/docs/api/netaddr-pysrc.html
+++ /dev/null
@@ -1,214 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- Package&nbsp;netaddr
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr-module.html">Package netaddr</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved.</tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details.</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">"""</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">network address manipulation, done Pythonically</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-name">__version__</tt> <tt class="py-op">=</tt> <tt class="py-string">'0.6'</tt> </tt>
-<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"> </tt>
-<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">struct</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_struct</tt> </tt>
-<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"> </tt>
-<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Constants.</tt> </tt>
-<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-comment">#: True if platform is natively big endian, False otherwise.</tt> </tt>
-<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-0" class="py-name" targets="Variable netaddr.BIG_ENDIAN_PLATFORM=netaddr-module.html#BIG_ENDIAN_PLATFORM"><a title="netaddr.BIG_ENDIAN_PLATFORM" class="py-name" href="#" onclick="return doclink('link-0', 'BIG_ENDIAN_PLATFORM', 'link-0');">BIG_ENDIAN_PLATFORM</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">'=h'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;h'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"> </tt>
-<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt id="link-1" class="py-name" targets="Variable netaddr.AT_UNSPEC=netaddr-module.html#AT_UNSPEC"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-1', 'AT_UNSPEC', 'link-1');">AT_UNSPEC</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x0</tt> <tt class="py-comment">#: unspecified address type constant.</tt> </tt>
-<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt id="link-2" class="py-name" targets="Variable netaddr.AT_INET=netaddr-module.html#AT_INET"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-2', 'AT_INET', 'link-2');">AT_INET</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x4</tt> <tt class="py-comment">#: IPv4 address type constant.</tt> </tt>
-<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt id="link-3" class="py-name" targets="Variable netaddr.AT_INET6=netaddr-module.html#AT_INET6"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-3', 'AT_INET6', 'link-3');">AT_INET6</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x6</tt> <tt class="py-comment">#: IPv6 address type constant.</tt> </tt>
-<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"><tt id="link-4" class="py-name" targets="Variable netaddr.AT_LINK=netaddr-module.html#AT_LINK"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-4', 'AT_LINK', 'link-4');">AT_LINK</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x30</tt> <tt class="py-comment">#: MAC/EUI-48 address type constant.</tt> </tt>
-<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"><tt id="link-5" class="py-name" targets="Variable netaddr.AT_EUI64=netaddr-module.html#AT_EUI64"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-5', 'AT_EUI64', 'link-5');">AT_EUI64</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0x40</tt> <tt class="py-comment">#: EUI-64 address type constant.</tt> </tt>
-<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"> </tt>
-<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"><tt class="py-comment">#: Address type to address description lookup dictionary.</tt> </tt>
-<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-6" class="py-name" targets="Variable netaddr.AT_NAMES=netaddr-module.html#AT_NAMES"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-6', 'AT_NAMES', 'link-6');">AT_NAMES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"> <tt class="py-comment"># Address Type : Descriptive Name.</tt> </tt>
-<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"> <tt id="link-7" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-7', 'AT_UNSPEC', 'link-1');">AT_UNSPEC</a></tt> <tt class="py-op">:</tt> <tt class="py-string">'unspecified'</tt><tt class="py-op">,</tt> </tt>
-<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"> <tt id="link-8" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-8', 'AT_INET', 'link-2');">AT_INET</a></tt> <tt class="py-op">:</tt> <tt class="py-string">'IPv4'</tt><tt class="py-op">,</tt> </tt>
-<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> <tt id="link-9" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-9', 'AT_INET6', 'link-3');">AT_INET6</a></tt> <tt class="py-op">:</tt> <tt class="py-string">'IPv6'</tt><tt class="py-op">,</tt> </tt>
-<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"> <tt id="link-10" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-10', 'AT_LINK', 'link-4');">AT_LINK</a></tt> <tt class="py-op">:</tt> <tt class="py-string">'MAC'</tt><tt class="py-op">,</tt> </tt>
-<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> <tt id="link-11" class="py-name"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-11', 'AT_EUI64', 'link-5');">AT_EUI64</a></tt> <tt class="py-op">:</tt> <tt class="py-string">'EUI-64'</tt><tt class="py-op">,</tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-op">}</tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Custom exceptions.</tt> </tt>
-<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrFormatError"></a><div id="AddrFormatError-def"><a name="L41"></a><tt class="py-lineno">41</tt> <a class="py-toggle" href="#" id="AddrFormatError-toggle" onclick="return toggle('AddrFormatError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.AddrFormatError-class.html">AddrFormatError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrFormatError-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="AddrFormatError-expanded"><a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"><tt class="py-docstring"> An Exception indicating that a network address format is not recognised.</tt> </tt>
-<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"> </tt>
-<a name="AddrConversionError"></a><div id="AddrConversionError-def"><a name="L47"></a><tt class="py-lineno">47</tt> <a class="py-toggle" href="#" id="AddrConversionError-toggle" onclick="return toggle('AddrConversionError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.AddrConversionError-class.html">AddrConversionError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrConversionError-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="AddrConversionError-expanded"><a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"><tt class="py-docstring"> An Exception indicating a failure to convert between address types or</tt> </tt>
-<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"><tt class="py-docstring"> notations.</tt> </tt>
-<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> </tt>
-<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Submodule imports.</tt> </tt>
-<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L57"></a><tt class="py-lineno">57</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-12" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-12', 'netaddr', 'link-12');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-13" class="py-name" targets="Module netaddr.address=netaddr.address-module.html,Method netaddr.eui.IAB.address()=netaddr.eui.IAB-class.html#address,Method netaddr.eui.OUI.address()=netaddr.eui.OUI-class.html#address"><a title="netaddr.address
-netaddr.eui.IAB.address
-netaddr.eui.OUI.address" class="py-name" href="#" onclick="return doclink('link-13', 'address', 'link-13');">address</a></tt> <tt class="py-keyword">import</tt> <tt id="link-14" class="py-name" targets="Function netaddr.address.nrange()=netaddr.address-module.html#nrange"><a title="netaddr.address.nrange" class="py-name" href="#" onclick="return doclink('link-14', 'nrange', 'link-14');">nrange</a></tt><tt class="py-op">,</tt> <tt id="link-15" class="py-name" targets="Class netaddr.address.IP=netaddr.address.IP-class.html"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-15', 'IP', 'link-15');">IP</a></tt><tt class="py-op">,</tt> <tt id="link-16" class="py-name" targets="Class netaddr.address.IPRange=netaddr.address.IPRange-class.html"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-16', 'IPRange', 'link-16');">IPRange</a></tt><tt class="py-op">,</tt> <tt id="link-17" class="py-name" targets="Class netaddr.address.IPRangeSet=netaddr.address.IPRangeSet-class.html"><a title="netaddr.address.IPRangeSet" class="py-name" href="#" onclick="return doclink('link-17', 'IPRangeSet', 'link-17');">IPRangeSet</a></tt><tt class="py-op">,</tt> <tt id="link-18" class="py-name" targets="Class netaddr.address.CIDR=netaddr.address.CIDR-class.html"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-18', 'CIDR', 'link-18');">CIDR</a></tt><tt class="py-op">,</tt> \ </tt>
-<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"> <tt id="link-19" class="py-name" targets="Class netaddr.address.Wildcard=netaddr.address.Wildcard-class.html"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-19', 'Wildcard', 'link-19');">Wildcard</a></tt><tt class="py-op">,</tt> <tt id="link-20" class="py-name" targets="Class netaddr.address.EUI=netaddr.address.EUI-class.html"><a title="netaddr.address.EUI" class="py-name" href="#" onclick="return doclink('link-20', 'EUI', 'link-20');">EUI</a></tt> </tt>
-<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"> </tt>
-<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-21" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-21', 'netaddr', 'link-12');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-22" class="py-name" targets="Package netaddr.eui=netaddr.eui-module.html"><a title="netaddr.eui" class="py-name" href="#" onclick="return doclink('link-22', 'eui', 'link-22');">eui</a></tt> <tt class="py-keyword">import</tt> <tt id="link-23" class="py-name" targets="Class netaddr.eui.OUI=netaddr.eui.OUI-class.html"><a title="netaddr.eui.OUI" class="py-name" href="#" onclick="return doclink('link-23', 'OUI', 'link-23');">OUI</a></tt><tt class="py-op">,</tt> <tt id="link-24" class="py-name" targets="Class netaddr.eui.IAB=netaddr.eui.IAB-class.html"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-24', 'IAB', 'link-24');">IAB</a></tt><tt class="py-op">,</tt> <tt id="link-25" class="py-name" targets="Class netaddr.eui.NotRegisteredError=netaddr.eui.NotRegisteredError-class.html"><a title="netaddr.eui.NotRegisteredError" class="py-name" href="#" onclick="return doclink('link-25', 'NotRegisteredError', 'link-25');">NotRegisteredError</a></tt> </tt>
-<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> </tt>
-<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-26" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-26', 'netaddr', 'link-12');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-27" class="py-name" targets="Variable netaddr.address.Addr.strategy=netaddr.address.Addr-class.html#strategy,Variable netaddr.address.CIDR.strategy=netaddr.address.CIDR-class.html#strategy,Variable netaddr.address.EUI.strategy=netaddr.address.EUI-class.html#strategy,Variable netaddr.address.IP.strategy=netaddr.address.IP-class.html#strategy,Variable netaddr.address.IPRange.strategy=netaddr.address.IPRange-class.html#strategy,Variable netaddr.address.Wildcard.strategy=netaddr.address.Wildcard-class.html#strategy,Module netaddr.strategy=netaddr.strategy-module.html"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-27', 'strategy', 'link-27');">strategy</a></tt> <tt class="py-keyword">import</tt> <tt id="link-28" class="py-name" targets="Variable netaddr.ST_IPV4=netaddr-module.html#ST_IPV4,Variable netaddr.strategy.ST_IPV4=netaddr.strategy-module.html#ST_IPV4"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-28', 'ST_IPV4', 'link-28');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-29" class="py-name" targets="Variable netaddr.ST_IPV6=netaddr-module.html#ST_IPV6,Variable netaddr.strategy.ST_IPV6=netaddr.strategy-module.html#ST_IPV6"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-29', 'ST_IPV6', 'link-29');">ST_IPV6</a></tt><tt class="py-op">,</tt> <tt id="link-30" class="py-name" targets="Variable netaddr.ST_EUI48=netaddr-module.html#ST_EUI48,Variable netaddr.strategy.ST_EUI48=netaddr.strategy-module.html#ST_EUI48"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-30', 'ST_EUI48', 'link-30');">ST_EUI48</a></tt><tt class="py-op">,</tt> <tt id="link-31" class="py-name" targets="Variable netaddr.ST_EUI64=netaddr-module.html#ST_EUI64,Variable netaddr.strategy.ST_EUI64=netaddr.strategy-module.html#ST_EUI64"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-31', 'ST_EUI64', 'link-31');">ST_EUI64</a></tt> </tt>
-<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> </tt>
-<a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Public interface.</tt> </tt>
-<a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-name">__all__</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> </tt>
-<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"> <tt class="py-comment"># type constants</tt> </tt>
-<a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"> <tt class="py-string">'AT_INET'</tt><tt class="py-op">,</tt> <tt class="py-string">'AT_INET6'</tt><tt class="py-op">,</tt> <tt class="py-string">'AT_LINK'</tt><tt class="py-op">,</tt> <tt class="py-string">'AT_EUI64'</tt><tt class="py-op">,</tt> </tt>
-<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"> </tt>
-<a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt class="py-comment"># module specific exceptions</tt> </tt>
-<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-string">'AddrFormatError'</tt><tt class="py-op">,</tt> <tt class="py-string">'AddrConversionError'</tt><tt class="py-op">,</tt> <tt class="py-string">'NotRegisteredError'</tt><tt class="py-op">,</tt> </tt>
-<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> </tt>
-<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-comment"># shared strategy objects</tt> </tt>
-<a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> <tt class="py-string">'ST_IPV4'</tt><tt class="py-op">,</tt> <tt class="py-string">'ST_IPV6'</tt><tt class="py-op">,</tt> <tt class="py-string">'ST_EUI48'</tt><tt class="py-op">,</tt> <tt class="py-string">'ST_EUI64'</tt><tt class="py-op">,</tt> </tt>
-<a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> </tt>
-<a name="L78"></a><tt class="py-lineno">78</tt> <tt class="py-line"> <tt class="py-comment"># main interface classes</tt> </tt>
-<a name="L79"></a><tt class="py-lineno">79</tt> <tt class="py-line"> <tt class="py-string">'CIDR'</tt><tt class="py-op">,</tt> <tt class="py-string">'IP'</tt><tt class="py-op">,</tt> <tt class="py-string">'IPRange'</tt><tt class="py-op">,</tt> <tt class="py-string">'IPRangeSet'</tt><tt class="py-op">,</tt> <tt class="py-string">'Wildcard'</tt><tt class="py-op">,</tt> </tt>
-<a name="L80"></a><tt class="py-lineno">80</tt> <tt class="py-line"> <tt class="py-string">'EUI'</tt><tt class="py-op">,</tt> <tt class="py-string">'OUI'</tt><tt class="py-op">,</tt> <tt class="py-string">'IAB'</tt><tt class="py-op">,</tt> </tt>
-<a name="L81"></a><tt class="py-lineno">81</tt> <tt class="py-line"> </tt>
-<a name="L82"></a><tt class="py-lineno">82</tt> <tt class="py-line"> <tt class="py-comment"># functions</tt> </tt>
-<a name="L83"></a><tt class="py-lineno">83</tt> <tt class="py-line"> <tt class="py-string">'nrange'</tt><tt class="py-op">,</tt> </tt>
-<a name="L84"></a><tt class="py-lineno">84</tt> <tt class="py-line"><tt class="py-op">]</tt> </tt>
-<a name="L85"></a><tt class="py-lineno">85</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th bgcolor="#70b0f0" class="navbar-select"
- >&nbsp;&nbsp;&nbsp;Home&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.AddrConversionError-class.html b/docs/api/netaddr.AddrConversionError-class.html
deleted file mode 100644
index 7a428e3..0000000
--- a/docs/api/netaddr.AddrConversionError-class.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.AddrConversionError</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Class&nbsp;AddrConversionError
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.AddrConversionError-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AddrConversionError</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr-pysrc.html#AddrConversionError">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-exceptions.BaseException --+
- |
- exceptions.Exception --+
- |
- <strong class="uidshort">AddrConversionError</strong>
-</pre>
-
-<hr />
-<p>An Exception indicating a failure to convert between address types or
- notations.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
- <code>__init__</code>,
- <code>__new__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__getitem__</code>,
- <code>__getslice__</code>,
- <code>__reduce__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__setstate__</code>,
- <code>__str__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__hash__</code>,
- <code>__reduce_ex__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>args</code>,
- <code>message</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.AddrFormatError-class.html b/docs/api/netaddr.AddrFormatError-class.html
deleted file mode 100644
index 87594a9..0000000
--- a/docs/api/netaddr.AddrFormatError-class.html
+++ /dev/null
@@ -1,178 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.AddrFormatError</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Class&nbsp;AddrFormatError
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.AddrFormatError-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AddrFormatError</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr-pysrc.html#AddrFormatError">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-exceptions.BaseException --+
- |
- exceptions.Exception --+
- |
- <strong class="uidshort">AddrFormatError</strong>
-</pre>
-
-<hr />
-<p>An Exception indicating that a network address format is not
- recognised.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
- <code>__init__</code>,
- <code>__new__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__getitem__</code>,
- <code>__getslice__</code>,
- <code>__reduce__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__setstate__</code>,
- <code>__str__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__hash__</code>,
- <code>__reduce_ex__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>args</code>,
- <code>message</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address-module.html b/docs/api/netaddr.address-module.html
deleted file mode 100755
index a7a5318..0000000
--- a/docs/api/netaddr.address-module.html
+++ /dev/null
@@ -1,378 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;address
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module address</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html">source&nbsp;code</a></span></p>
-<p>network address classes (IP, EUI) and associated aggregate classes
- (CIDR, Wildcard and IPRange).</p>
-
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.AddrTypeDescriptor-class.html" class="summary-name">AddrTypeDescriptor</a><br />
- A descriptor that checks addr_type property assignments for
- validity and also keeps the strategy property in sync with any
- changes made.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.AddrValueDescriptor-class.html" class="summary-name">AddrValueDescriptor</a><br />
- A descriptor that checks assignments to the named parameter passed
- to the constructor.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.StrategyDescriptor-class.html" class="summary-name">StrategyDescriptor</a><br />
- A descriptor that checks strategy property assignments for validity
- and also keeps the addr_type property in sync with any changes
- made.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.PrefixLenDescriptor-class.html" class="summary-name">PrefixLenDescriptor</a><br />
- A descriptor that checks prefixlen property assignments for
- validity based on address type.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.FormatDescriptor-class.html" class="summary-name">FormatDescriptor</a><br />
- A descriptor that checks formatter property assignments for
- validity.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.Addr-class.html" class="summary-name">Addr</a><br />
- The base class containing common functionality for all subclasses
- representing various network address types.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.EUI-class.html" class="summary-name">EUI</a><br />
- Represents an IEEE EUI (Extended Unique Identifier) indentifier.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IP-class.html" class="summary-name">IP</a><br />
- Represents <b>individual</b> IPv4 and IPv6 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IPRange-class.html" class="summary-name">IPRange</a><br />
- Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses
- using only a lower and upper bound IP address.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html" class="summary-name">CIDR</a><br />
- Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless
- Inter-Domain Routing) notation.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.Wildcard-class.html" class="summary-name">Wildcard</a><br />
- Represents blocks of IPv4 addresses using a wildcard or glob style
- syntax.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IPRangeSet-class.html" class="summary-name">IPRangeSet</a><br />
- <b>*EXPERIMENTAL*</b> A customised Python set class that deals with
- collections of IPRange class and subclass instances.
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Functions</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address-module.html#nrange" class="summary-sig-name">nrange</a>(<span class="summary-sig-arg">start</span>,
- <span class="summary-sig-arg">stop</span>,
- <span class="summary-sig-arg">step</span>=<span class="summary-sig-default">1</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- An xrange work alike generator that produces sequences of IP
- addresses based on start and stop addresses, in intervals of step
- size.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#nrange">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES ==================== -->
-<a name="section-Variables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address-module.html#AT_STRATEGIES" class="summary-name">AT_STRATEGIES</a> = <code title="{0: None,
- 4: IPv4StrategyOpt(32, 8, '.', 4, 10, False),
- 6: IPv6Strategy(128, 16, ':', 6, 16, False),
- 48: EUI48Strategy(48, 8, '-', 48, 16, True),
- 64: AddrStrategy(64, 8, '-', 64, 16, True)}"><code class="variable-group">{</code>0<code class="variable-op">: </code>None<code class="variable-op">, </code>4<code class="variable-op">: </code>IPv4StrategyOpt(32, 8, '.', 4, 10<code class="variable-ellipsis">...</code></code><br />
- Address type to strategy object lookup dict.
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTION DETAILS ==================== -->
-<a name="section-FunctionDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Function Details</span></td>
-</tr>
-</table>
-<a name="nrange"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">nrange</span>(<span class="sig-arg">start</span>,
- <span class="sig-arg">stop</span>,
- <span class="sig-arg">step</span>=<span class="sig-default">1</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#nrange">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>An xrange work alike generator that produces sequences of IP addresses
- based on start and stop addresses, in intervals of step size.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>start</code></strong> - first IP address string or <a
- href="netaddr.address.IP-class.html" class="link">IP</a> object
- in range.</li>
- <li><strong class="pname"><code>stop</code></strong> - last IP address string or <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object in range</li>
- <li><strong class="pname"><code>step</code></strong> - (optional) size of step between address in range. (Default: 1)</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used on addresses returned. (Default: None -
- <a href="netaddr.address.IP-class.html" class="link">IP</a>
- objects). Supported options :-
- <ul>
- <li>
- <code>str</code> - IP address strings
- </li>
- <li>
- <code>int</code>, <code>long</code> - IP address integer
- (network byte order)
- </li>
- <li>
- <code>hex</code> - IP address as a hexadecimal number
- </li>
- <li>
- <a href="netaddr.address.IP-class.html" class="link">IP</a>
- class/subclass or callable that accepts
- <code>addr_value</code> and <code>addr_type</code> arguments.
- </li>
- </ul></li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== VARIABLES DETAILS ==================== -->
-<a name="section-VariablesDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables Details</span></td>
-</tr>
-</table>
-<a name="AT_STRATEGIES"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">AT_STRATEGIES</h3>
- <p>Address type to strategy object lookup dict.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code>0<code class="variable-op">: </code>None<code class="variable-op">,</code>
- 4<code class="variable-op">: </code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">,</code>
- 6<code class="variable-op">: </code>IPv6Strategy(128, 16, ':', 6, 16, False)<code class="variable-op">,</code>
- 48<code class="variable-op">: </code>EUI48Strategy(48, 8, '-', 48, 16, True)<code class="variable-op">,</code>
- 64<code class="variable-op">: </code>AddrStrategy(64, 8, '-', 64, 16, True)<code class="variable-group">}</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address-pysrc.html b/docs/api/netaddr.address-pysrc.html
deleted file mode 100755
index 54f59c8..0000000
--- a/docs/api/netaddr.address-pysrc.html
+++ /dev/null
@@ -1,4161 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;address
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.address-module.html" onclick="show_private();">Module netaddr.address</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved.</tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details.</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">"""</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">network address classes (IP, EUI) and associated aggregate classes (CIDR,</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">Wildcard and IPRange).</tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">math</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_math</tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_socket</tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-0', 'netaddr', 'link-0');">netaddr</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class netaddr.AddrFormatError=netaddr.AddrFormatError-class.html"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-1', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Class netaddr.AddrConversionError=netaddr.AddrConversionError-class.html"><a title="netaddr.AddrConversionError" class="py-name" href="#" onclick="return doclink('link-2', 'AddrConversionError', 'link-2');">AddrConversionError</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Variable netaddr.AT_UNSPEC=netaddr-module.html#AT_UNSPEC"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-3', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> \ </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"> <tt id="link-4" class="py-name" targets="Variable netaddr.AT_INET=netaddr-module.html#AT_INET"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-4', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Variable netaddr.AT_INET6=netaddr-module.html#AT_INET6"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-5', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Variable netaddr.AT_LINK=netaddr-module.html#AT_LINK"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-6', 'AT_LINK', 'link-6');">AT_LINK</a></tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Variable netaddr.AT_EUI64=netaddr-module.html#AT_EUI64"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-7', 'AT_EUI64', 'link-7');">AT_EUI64</a></tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Variable netaddr.AT_NAMES=netaddr-module.html#AT_NAMES"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-8', 'AT_NAMES', 'link-8');">AT_NAMES</a></tt> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-9" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-9', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-10" class="py-name" targets="Variable netaddr.address.Addr.strategy=netaddr.address.Addr-class.html#strategy,Variable netaddr.address.CIDR.strategy=netaddr.address.CIDR-class.html#strategy,Variable netaddr.address.EUI.strategy=netaddr.address.EUI-class.html#strategy,Variable netaddr.address.IP.strategy=netaddr.address.IP-class.html#strategy,Variable netaddr.address.IPRange.strategy=netaddr.address.IPRange-class.html#strategy,Variable netaddr.address.Wildcard.strategy=netaddr.address.Wildcard-class.html#strategy,Module netaddr.strategy=netaddr.strategy-module.html"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-10', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-keyword">import</tt> <tt id="link-11" class="py-name" targets="Variable netaddr.ST_IPV4=netaddr-module.html#ST_IPV4,Variable netaddr.strategy.ST_IPV4=netaddr.strategy-module.html#ST_IPV4"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-11', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-12" class="py-name" targets="Variable netaddr.ST_IPV6=netaddr-module.html#ST_IPV6,Variable netaddr.strategy.ST_IPV6=netaddr.strategy-module.html#ST_IPV6"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-12', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">,</tt> <tt id="link-13" class="py-name" targets="Variable netaddr.ST_EUI48=netaddr-module.html#ST_EUI48,Variable netaddr.strategy.ST_EUI48=netaddr.strategy-module.html#ST_EUI48"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-13', 'ST_EUI48', 'link-13');">ST_EUI48</a></tt><tt class="py-op">,</tt> <tt id="link-14" class="py-name" targets="Variable netaddr.ST_EUI64=netaddr-module.html#ST_EUI64,Variable netaddr.strategy.ST_EUI64=netaddr.strategy-module.html#ST_EUI64"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-14', 'ST_EUI64', 'link-14');">ST_EUI64</a></tt><tt class="py-op">,</tt> \ </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"> <tt id="link-15" class="py-name" targets="Class netaddr.strategy.AddrStrategy=netaddr.strategy.AddrStrategy-class.html"><a title="netaddr.strategy.AddrStrategy" class="py-name" href="#" onclick="return doclink('link-15', 'AddrStrategy', 'link-15');">AddrStrategy</a></tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-16" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-16', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Package netaddr.eui=netaddr.eui-module.html"><a title="netaddr.eui" class="py-name" href="#" onclick="return doclink('link-17', 'eui', 'link-17');">eui</a></tt> <tt class="py-keyword">import</tt> <tt id="link-18" class="py-name" targets="Class netaddr.eui.OUI=netaddr.eui.OUI-class.html"><a title="netaddr.eui.OUI" class="py-name" href="#" onclick="return doclink('link-18', 'OUI', 'link-18');">OUI</a></tt><tt class="py-op">,</tt> <tt id="link-19" class="py-name" targets="Class netaddr.eui.IAB=netaddr.eui.IAB-class.html"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-19', 'IAB', 'link-19');">IAB</a></tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-comment">#: Address type to strategy object lookup dict.</tt> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-20" class="py-name" targets="Variable netaddr.address.AT_STRATEGIES=netaddr.address-module.html#AT_STRATEGIES"><a title="netaddr.address.AT_STRATEGIES" class="py-name" href="#" onclick="return doclink('link-20', 'AT_STRATEGIES', 'link-20');">AT_STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> <tt id="link-21" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-21', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt> <tt class="py-op">:</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> <tt id="link-22" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-22', 'AT_INET', 'link-4');">AT_INET</a></tt> <tt class="py-op">:</tt> <tt id="link-23" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-23', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> <tt id="link-24" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-24', 'AT_INET6', 'link-5');">AT_INET6</a></tt> <tt class="py-op">:</tt> <tt id="link-25" class="py-name"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-25', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-26', 'AT_LINK', 'link-6');">AT_LINK</a></tt> <tt class="py-op">:</tt> <tt id="link-27" class="py-name"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-27', 'ST_EUI48', 'link-13');">ST_EUI48</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"> <tt id="link-28" class="py-name"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-28', 'AT_EUI64', 'link-7');">AT_EUI64</a></tt> <tt class="py-op">:</tt> <tt id="link-29" class="py-name"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-29', 'ST_EUI64', 'link-14');">ST_EUI64</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-op">}</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="AddrTypeDescriptor"></a><div id="AddrTypeDescriptor-def"><a name="L32"></a><tt class="py-lineno"> 32</tt> <a class="py-toggle" href="#" id="AddrTypeDescriptor-toggle" onclick="return toggle('AddrTypeDescriptor');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.AddrTypeDescriptor-class.html">AddrTypeDescriptor</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrTypeDescriptor-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AddrTypeDescriptor-expanded"><a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-docstring"> A descriptor that checks addr_type property assignments for validity and</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-docstring"> also keeps the strategy property in sync with any changes made.</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="AddrTypeDescriptor.__init__"></a><div id="AddrTypeDescriptor.__init__-def"><a name="L37"></a><tt class="py-lineno"> 37</tt> <a class="py-toggle" href="#" id="AddrTypeDescriptor.__init__-toggle" onclick="return toggle('AddrTypeDescriptor.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.AddrTypeDescriptor-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr_types</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrTypeDescriptor.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="AddrTypeDescriptor.__init__-expanded"><a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt class="py-docstring"> @param addr_types: a list of address types constants that are</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> acceptable for assignment to the addr_type property.</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">addr_types</tt> <tt class="py-op">=</tt> <tt class="py-name">addr_types</tt> </tt>
-</div><a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> </tt>
-<a name="AddrTypeDescriptor.__set__"></a><div id="AddrTypeDescriptor.__set__-def"><a name="L46"></a><tt class="py-lineno"> 46</tt> <a class="py-toggle" href="#" id="AddrTypeDescriptor.__set__-toggle" onclick="return toggle('AddrTypeDescriptor.__set__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.AddrTypeDescriptor-class.html#__set__">__set__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">instance</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrTypeDescriptor.__set__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="AddrTypeDescriptor.__set__-expanded"><a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-30" class="py-name" targets="Variable netaddr.address.Addr.value=netaddr.address.Addr-class.html#value"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-30', 'value', 'link-30');">value</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">addr_types</tt><tt class="py-op">:</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'addr_type %r is invalid for objects of '</tt> \ </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-string">'the %s() class!'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-31" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-31', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'addr_type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-32" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-32', 'value', 'link-30');">value</a></tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'strategy'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name"><a title="netaddr.address.AT_STRATEGIES" class="py-name" href="#" onclick="return doclink('link-33', 'AT_STRATEGIES', 'link-20');">AT_STRATEGIES</a></tt><tt class="py-op">[</tt><tt id="link-34" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-34', 'value', 'link-30');">value</a></tt><tt class="py-op">]</tt> </tt>
-</div></div><a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="AddrValueDescriptor"></a><div id="AddrValueDescriptor-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="AddrValueDescriptor-toggle" onclick="return toggle('AddrValueDescriptor');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.AddrValueDescriptor-class.html">AddrValueDescriptor</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrValueDescriptor-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="AddrValueDescriptor-expanded"><a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-docstring"> A descriptor that checks assignments to the named parameter passed to the</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> constructor. It accepts network addresses in either string format or as</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"> network byte order integers. String based addresses are converted to their</tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> integer equivalents before assignment to the named parameter. Also ensures</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> that addr_type and strategy are set correctly when parsing string based</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"> addresses.</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="AddrValueDescriptor.__init__"></a><div id="AddrValueDescriptor.__init__-def"><a name="L63"></a><tt class="py-lineno"> 63</tt> <a class="py-toggle" href="#" id="AddrValueDescriptor.__init__-toggle" onclick="return toggle('AddrValueDescriptor.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.AddrValueDescriptor-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">name</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrValueDescriptor.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="AddrValueDescriptor.__init__-expanded"><a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> Descriptor constructor.</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"> @param name: the name of attribute which will be assigned the value.</tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt class="py-name">name</tt> </tt>
-</div><a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"> </tt>
-<a name="AddrValueDescriptor.__set__"></a><div id="AddrValueDescriptor.__set__-def"><a name="L71"></a><tt class="py-lineno"> 71</tt> <a class="py-toggle" href="#" id="AddrValueDescriptor.__set__-toggle" onclick="return toggle('AddrValueDescriptor.__set__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.AddrValueDescriptor-class.html#__set__">__set__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">instance</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrValueDescriptor.__set__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="AddrValueDescriptor.__set__-expanded"><a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt id="link-35" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-35', 'value', 'link-30');">value</a></tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt id="link-36" class="py-name" targets="Class netaddr.address.Addr=netaddr.address.Addr-class.html"><a title="netaddr.address.Addr" class="py-name" href="#" onclick="return doclink('link-36', 'Addr', 'link-36');">Addr</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-37', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-38" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-38', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-39" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-39', 'value', 'link-30');">value</a></tt><tt class="py-op">.</tt><tt id="link-40" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-40', 'strategy', 'link-10');">strategy</a></tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-41', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-42" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-42', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-43" class="py-name" targets="Variable netaddr.address.Addr.addr_type=netaddr.address.Addr-class.html#addr_type,Variable netaddr.address.CIDR.addr_type=netaddr.address.CIDR-class.html#addr_type,Variable netaddr.address.EUI.addr_type=netaddr.address.EUI-class.html#addr_type,Variable netaddr.address.IP.addr_type=netaddr.address.IP-class.html#addr_type,Variable netaddr.address.IPRange.addr_type=netaddr.address.IPRange-class.html#addr_type,Variable netaddr.address.Wildcard.addr_type=netaddr.address.Wildcard-class.html#addr_type"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-43', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-44" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-44', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"> <tt class="py-comment"># Select a strategy object for this address.</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt id="link-45" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-45', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name" targets="Variable netaddr.address.Addr.STRATEGIES=netaddr.address.Addr-class.html#STRATEGIES,Variable netaddr.address.CIDR.STRATEGIES=netaddr.address.CIDR-class.html#STRATEGIES,Variable netaddr.address.EUI.STRATEGIES=netaddr.address.EUI-class.html#STRATEGIES,Variable netaddr.address.IP.STRATEGIES=netaddr.address.IP-class.html#STRATEGIES,Variable netaddr.address.IPRange.STRATEGIES=netaddr.address.IPRange-class.html#STRATEGIES,Variable netaddr.address.Wildcard.STRATEGIES=netaddr.address.Wildcard-class.html#STRATEGIES"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-46', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-47" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-47', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-48" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_str()=netaddr.strategy.AddrStrategy-class.html#valid_str,Method netaddr.strategy.EUI48Strategy.valid_str()=netaddr.strategy.EUI48Strategy-class.html#valid_str,Method netaddr.strategy.IPv4StrategyOpt.valid_str()=netaddr.strategy.IPv4StrategyOpt-class.html#valid_str,Method netaddr.strategy.IPv6Strategy.valid_str()=netaddr.strategy.IPv6Strategy-class.html#valid_str"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-48', 'valid_str', 'link-48');">valid_str</a></tt><tt class="py-op">(</tt><tt id="link-49" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-49', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-50" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-50', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-51" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-51', 'strategy', 'link-10');">strategy</a></tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-comment"># Make sure we picked up a strategy object.</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-52', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-53" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-53', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a supported address '</tt> \ </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-string">'format!'</tt> <tt class="py-op">%</tt> <tt id="link-54" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-54', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-55" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-55', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-comment"># Calculate the integer value for this address.</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-56" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-56', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-57', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-58" class="py-name" targets="Method netaddr.strategy.AddrStrategy.str_to_int()=netaddr.strategy.AddrStrategy-class.html#str_to_int,Method netaddr.strategy.EUI48Strategy.str_to_int()=netaddr.strategy.EUI48Strategy-class.html#str_to_int,Method netaddr.strategy.IPv4StrategyOpt.str_to_int()=netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int,Method netaddr.strategy.IPv6Strategy.str_to_int()=netaddr.strategy.IPv6Strategy-class.html#str_to_int"><a title="netaddr.strategy.AddrStrategy.str_to_int
-netaddr.strategy.EUI48Strategy.str_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int
-netaddr.strategy.IPv6Strategy.str_to_int" class="py-name" href="#" onclick="return doclink('link-58', 'str_to_int', 'link-58');">str_to_int</a></tt><tt class="py-op">(</tt><tt id="link-59" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-59', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-60" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-60', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-61', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-62" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_int()=netaddr.strategy.AddrStrategy-class.html#valid_int"><a title="netaddr.strategy.AddrStrategy.valid_int" class="py-name" href="#" onclick="return doclink('link-62', 'valid_int', 'link-62');">valid_int</a></tt><tt class="py-op">(</tt><tt id="link-63" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-63', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">OverflowError</tt><tt class="py-op">(</tt><tt class="py-string">'value %r cannot be represented '</tt> \ </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-string">'in %d bit(s)!'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-64" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-64', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-65', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported type!'</tt> <tt class="py-op">%</tt> <tt id="link-66" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-66', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-67', 'value', 'link-30');">value</a></tt> </tt>
-</div></div><a name="L100"></a><tt class="py-lineno"> 100</tt> <tt class="py-line"> </tt>
-<a name="L101"></a><tt class="py-lineno"> 101</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="StrategyDescriptor"></a><div id="StrategyDescriptor-def"><a name="L102"></a><tt class="py-lineno"> 102</tt> <a class="py-toggle" href="#" id="StrategyDescriptor-toggle" onclick="return toggle('StrategyDescriptor');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.StrategyDescriptor-class.html">StrategyDescriptor</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="StrategyDescriptor-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="StrategyDescriptor-expanded"><a name="L103"></a><tt class="py-lineno"> 103</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L104"></a><tt class="py-lineno"> 104</tt> <tt class="py-line"><tt class="py-docstring"> A descriptor that checks strategy property assignments for validity and</tt> </tt>
-<a name="L105"></a><tt class="py-lineno"> 105</tt> <tt class="py-line"><tt class="py-docstring"> also keeps the addr_type property in sync with any changes made.</tt> </tt>
-<a name="L106"></a><tt class="py-lineno"> 106</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="StrategyDescriptor.__init__"></a><div id="StrategyDescriptor.__init__-def"><a name="L107"></a><tt class="py-lineno"> 107</tt> <a class="py-toggle" href="#" id="StrategyDescriptor.__init__-toggle" onclick="return toggle('StrategyDescriptor.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.StrategyDescriptor-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">strategies</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="StrategyDescriptor.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="StrategyDescriptor.__init__-expanded"><a name="L108"></a><tt class="py-lineno"> 108</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L109"></a><tt class="py-lineno"> 109</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L110"></a><tt class="py-lineno"> 110</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L111"></a><tt class="py-lineno"> 111</tt> <tt class="py-line"><tt class="py-docstring"> @param strategies: a list of strategy objects that are acceptable for</tt> </tt>
-<a name="L112"></a><tt class="py-lineno"> 112</tt> <tt class="py-line"><tt class="py-docstring"> assignment to the strategy property.</tt> </tt>
-<a name="L113"></a><tt class="py-lineno"> 113</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L114"></a><tt class="py-lineno"> 114</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">strategies</tt> <tt class="py-op">=</tt> <tt class="py-name">strategies</tt> </tt>
-</div><a name="L115"></a><tt class="py-lineno"> 115</tt> <tt class="py-line"> </tt>
-<a name="StrategyDescriptor.__set__"></a><div id="StrategyDescriptor.__set__-def"><a name="L116"></a><tt class="py-lineno"> 116</tt> <a class="py-toggle" href="#" id="StrategyDescriptor.__set__-toggle" onclick="return toggle('StrategyDescriptor.__set__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.StrategyDescriptor-class.html#__set__">__set__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">instance</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="StrategyDescriptor.__set__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="StrategyDescriptor.__set__-expanded"><a name="L117"></a><tt class="py-lineno"> 117</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-68" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-68', 'value', 'link-30');">value</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">strategies</tt><tt class="py-op">:</tt> </tt>
-<a name="L118"></a><tt class="py-lineno"> 118</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">Exception</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a supported strategy!'</tt> <tt class="py-op">%</tt> <tt id="link-69" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-69', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L119"></a><tt class="py-lineno"> 119</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'strategy'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-70" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-70', 'value', 'link-30');">value</a></tt> </tt>
-<a name="L120"></a><tt class="py-lineno"> 120</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'addr_type'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-71', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-72', 'addr_type', 'link-43');">addr_type</a></tt> </tt>
-</div></div><a name="L121"></a><tt class="py-lineno"> 121</tt> <tt class="py-line"> </tt>
-<a name="L122"></a><tt class="py-lineno"> 122</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="PrefixLenDescriptor"></a><div id="PrefixLenDescriptor-def"><a name="L123"></a><tt class="py-lineno"> 123</tt> <a class="py-toggle" href="#" id="PrefixLenDescriptor-toggle" onclick="return toggle('PrefixLenDescriptor');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.PrefixLenDescriptor-class.html">PrefixLenDescriptor</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrefixLenDescriptor-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="PrefixLenDescriptor-expanded"><a name="L124"></a><tt class="py-lineno"> 124</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L125"></a><tt class="py-lineno"> 125</tt> <tt class="py-line"><tt class="py-docstring"> A descriptor that checks prefixlen property assignments for validity based</tt> </tt>
-<a name="L126"></a><tt class="py-lineno"> 126</tt> <tt class="py-line"><tt class="py-docstring"> on address type. Also accepts netmasks and hostmasks which can easily be</tt> </tt>
-<a name="L127"></a><tt class="py-lineno"> 127</tt> <tt class="py-line"><tt class="py-docstring"> converted to the equivalent prefixlen integer.</tt> </tt>
-<a name="L128"></a><tt class="py-lineno"> 128</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="PrefixLenDescriptor.__init__"></a><div id="PrefixLenDescriptor.__init__-def"><a name="L129"></a><tt class="py-lineno"> 129</tt> <a class="py-toggle" href="#" id="PrefixLenDescriptor.__init__-toggle" onclick="return toggle('PrefixLenDescriptor.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.PrefixLenDescriptor-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">class_id</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrefixLenDescriptor.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="PrefixLenDescriptor.__init__-expanded"><a name="L130"></a><tt class="py-lineno"> 130</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L131"></a><tt class="py-lineno"> 131</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L132"></a><tt class="py-lineno"> 132</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L133"></a><tt class="py-lineno"> 133</tt> <tt class="py-line"><tt class="py-docstring"> @param class_id: (optional) the name of the class that uses this</tt> </tt>
-<a name="L134"></a><tt class="py-lineno"> 134</tt> <tt class="py-line"><tt class="py-docstring"> descriptor.</tt> </tt>
-<a name="L135"></a><tt class="py-lineno"> 135</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L136"></a><tt class="py-lineno"> 136</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">class_id</tt> <tt class="py-op">=</tt> <tt class="py-name">class_id</tt> </tt>
-</div><a name="L137"></a><tt class="py-lineno"> 137</tt> <tt class="py-line"> </tt>
-<a name="PrefixLenDescriptor.__set__"></a><div id="PrefixLenDescriptor.__set__-def"><a name="L138"></a><tt class="py-lineno"> 138</tt> <a class="py-toggle" href="#" id="PrefixLenDescriptor.__set__-toggle" onclick="return toggle('PrefixLenDescriptor.__set__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.PrefixLenDescriptor-class.html#__set__">__set__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">instance</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrefixLenDescriptor.__set__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="PrefixLenDescriptor.__set__-expanded"><a name="L139"></a><tt class="py-lineno"> 139</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L140"></a><tt class="py-lineno"> 140</tt> <tt class="py-line"> <tt class="py-comment"># Basic integer subnet prefix.</tt> </tt>
-<a name="L141"></a><tt class="py-lineno"> 141</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-73" class="py-name" targets="Variable netaddr.address.CIDR.prefixlen=netaddr.address.CIDR-class.html#prefixlen,Variable netaddr.address.IP.prefixlen=netaddr.address.IP-class.html#prefixlen"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-73', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-74" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-74', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L142"></a><tt class="py-lineno"> 142</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L143"></a><tt class="py-lineno"> 143</tt> <tt class="py-line"> <tt class="py-comment"># Convert possible subnet mask to integer subnet prefix.</tt> </tt>
-<a name="L144"></a><tt class="py-lineno"> 144</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-75" class="py-name" targets="Package netaddr.ip=netaddr.ip-module.html"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-75', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name" targets="Class netaddr.address.IP=netaddr.address.IP-class.html"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-76', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt id="link-77" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-77', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L145"></a><tt class="py-lineno"> 145</tt> <tt class="py-line"> </tt>
-<a name="L146"></a><tt class="py-lineno"> 146</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-78', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt id="link-79" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-79', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-80" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-80', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L147"></a><tt class="py-lineno"> 147</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'address and netmask type mismatch!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L148"></a><tt class="py-lineno"> 148</tt> <tt class="py-line"> </tt>
-<a name="L149"></a><tt class="py-lineno"> 149</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-81" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-81', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name" targets="Method netaddr.address.IP.is_netmask()=netaddr.address.IP-class.html#is_netmask"><a title="netaddr.address.IP.is_netmask" class="py-name" href="#" onclick="return doclink('link-82', 'is_netmask', 'link-82');">is_netmask</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L150"></a><tt class="py-lineno"> 150</tt> <tt class="py-line"> <tt class="py-comment"># prefixlen is a netmask address.</tt> </tt>
-<a name="L151"></a><tt class="py-lineno"> 151</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-83" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-83', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-84', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-85" class="py-name" targets="Method netaddr.address.IP.netmask_bits()=netaddr.address.IP-class.html#netmask_bits"><a title="netaddr.address.IP.netmask_bits" class="py-name" href="#" onclick="return doclink('link-85', 'netmask_bits', 'link-85');">netmask_bits</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L152"></a><tt class="py-lineno"> 152</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt id="link-86" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-86', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-87" class="py-name" targets="Method netaddr.address.IP.is_hostmask()=netaddr.address.IP-class.html#is_hostmask"><a title="netaddr.address.IP.is_hostmask" class="py-name" href="#" onclick="return doclink('link-87', 'is_hostmask', 'link-87');">is_hostmask</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L153"></a><tt class="py-lineno"> 153</tt> <tt class="py-line"> <tt class="py-comment"># prefixlen is an ACL (hostmask) address.</tt> </tt>
-<a name="L154"></a><tt class="py-lineno"> 154</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-88" class="py-name" targets="Variable netaddr.address.CIDR.netmask=netaddr.address.CIDR-class.html#netmask"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-88', 'netmask', 'link-88');">netmask</a></tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-89', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt id="link-90" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-90', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-91" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-91', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">^</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-92" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-92', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-93" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-93', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-94" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-94', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L155"></a><tt class="py-lineno"> 155</tt> <tt class="py-line"> <tt id="link-95" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-95', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-96', 'netmask', 'link-88');">netmask</a></tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="netaddr.address.IP.netmask_bits" class="py-name" href="#" onclick="return doclink('link-97', 'netmask_bits', 'link-85');">netmask_bits</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L156"></a><tt class="py-lineno"> 156</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L157"></a><tt class="py-lineno"> 157</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%s is not a valid netmask/hostmask!'</tt> <tt class="py-op">%</tt> <tt id="link-98" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-98', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L158"></a><tt class="py-lineno"> 158</tt> <tt class="py-line"> </tt>
-<a name="L159"></a><tt class="py-lineno"> 159</tt> <tt class="py-line"> <tt class="py-comment"># Validate subnet prefix.</tt> </tt>
-<a name="L160"></a><tt class="py-lineno"> 160</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt id="link-99" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-99', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-100', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L161"></a><tt class="py-lineno"> 161</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%d is an invalid prefix for an %s CIDR!'</tt> \ </tt>
-<a name="L162"></a><tt class="py-lineno"> 162</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-101" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-101', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-102', 'AT_NAMES', 'link-8');">AT_NAMES</a></tt><tt class="py-op">[</tt><tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-103', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L163"></a><tt class="py-lineno"> 163</tt> <tt class="py-line"> </tt>
-<a name="L164"></a><tt class="py-lineno"> 164</tt> <tt class="py-line"> <tt class="py-comment"># Make sure instance is not a subnet mask trying to set a prefix!</tt> </tt>
-<a name="L165"></a><tt class="py-lineno"> 165</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">instance</tt><tt class="py-op">,</tt> <tt id="link-104" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-104', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L166"></a><tt class="py-lineno"> 166</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="netaddr.address.IP.is_netmask" class="py-name" href="#" onclick="return doclink('link-105', 'is_netmask', 'link-82');">is_netmask</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt id="link-106" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-106', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-107" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-107', 'AT_INET', 'link-4');">AT_INET</a></tt> \ </tt>
-<a name="L167"></a><tt class="py-lineno"> 167</tt> <tt class="py-line"> <tt class="py-keyword">and</tt> <tt id="link-108" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-108', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">!=</tt> <tt class="py-number">32</tt><tt class="py-op">:</tt> </tt>
-<a name="L168"></a><tt class="py-lineno"> 168</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'IPv4 netmasks must have a prefix of /32!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L169"></a><tt class="py-lineno"> 169</tt> <tt class="py-line"> </tt>
-<a name="L170"></a><tt class="py-lineno"> 170</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'prefixlen'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-109" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-109', 'prefixlen', 'link-73');">prefixlen</a></tt> </tt>
-<a name="L171"></a><tt class="py-lineno"> 171</tt> <tt class="py-line"> </tt>
-<a name="L172"></a><tt class="py-lineno"> 172</tt> <tt class="py-line"> <tt class="py-comment"># Don't run this on a CIDR that is initialising itself.</tt> </tt>
-<a name="L173"></a><tt class="py-lineno"> 173</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">class_id</tt> <tt class="py-op">==</tt> <tt class="py-string">'CIDR'</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'first'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
-<a name="L174"></a><tt class="py-lineno"> 174</tt> <tt class="py-line"> <tt id="link-110" class="py-name" targets="Variable netaddr.address.IPRange.first=netaddr.address.IPRange-class.html#first"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-110', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'first'</tt><tt class="py-op">]</tt> </tt>
-<a name="L175"></a><tt class="py-lineno"> 175</tt> <tt class="py-line"> <tt id="link-111" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-111', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'strategy'</tt><tt class="py-op">]</tt> </tt>
-<a name="L176"></a><tt class="py-lineno"> 176</tt> <tt class="py-line"> <tt id="link-112" class="py-name" targets="Variable netaddr.address.CIDR.hostmask=netaddr.address.CIDR-class.html#hostmask"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-112', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt id="link-113" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-113', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt id="link-114" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-114', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L177"></a><tt class="py-lineno"> 177</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'first'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-115" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-115', 'first', 'link-110');">first</a></tt> <tt class="py-op">|</tt> <tt id="link-116" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-116', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-117" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-117', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L178"></a><tt class="py-lineno"> 178</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'last'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-118" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-118', 'first', 'link-110');">first</a></tt> <tt class="py-op">|</tt> <tt id="link-119" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-119', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-</div></div><a name="L179"></a><tt class="py-lineno"> 179</tt> <tt class="py-line"> </tt>
-<a name="L180"></a><tt class="py-lineno"> 180</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="FormatDescriptor"></a><div id="FormatDescriptor-def"><a name="L181"></a><tt class="py-lineno"> 181</tt> <a class="py-toggle" href="#" id="FormatDescriptor-toggle" onclick="return toggle('FormatDescriptor');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.FormatDescriptor-class.html">FormatDescriptor</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FormatDescriptor-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="FormatDescriptor-expanded"><a name="L182"></a><tt class="py-lineno"> 182</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L183"></a><tt class="py-lineno"> 183</tt> <tt class="py-line"><tt class="py-docstring"> A descriptor that checks formatter property assignments for validity.</tt> </tt>
-<a name="L184"></a><tt class="py-lineno"> 184</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="FormatDescriptor.__init__"></a><div id="FormatDescriptor.__init__-def"><a name="L185"></a><tt class="py-lineno"> 185</tt> <a class="py-toggle" href="#" id="FormatDescriptor.__init__-toggle" onclick="return toggle('FormatDescriptor.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.FormatDescriptor-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">default</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FormatDescriptor.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="FormatDescriptor.__init__-expanded"><a name="L186"></a><tt class="py-lineno"> 186</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L187"></a><tt class="py-lineno"> 187</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L188"></a><tt class="py-lineno"> 188</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L189"></a><tt class="py-lineno"> 189</tt> <tt class="py-line"><tt class="py-docstring"> @param default: the default callable to use if the formatter</tt> </tt>
-<a name="L190"></a><tt class="py-lineno"> 190</tt> <tt class="py-line"><tt class="py-docstring"> property is None.</tt> </tt>
-<a name="L191"></a><tt class="py-lineno"> 191</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L192"></a><tt class="py-lineno"> 192</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default</tt> <tt class="py-op">=</tt> <tt class="py-name">default</tt> </tt>
-</div><a name="L193"></a><tt class="py-lineno"> 193</tt> <tt class="py-line"> </tt>
-<a name="FormatDescriptor.__set__"></a><div id="FormatDescriptor.__set__-def"><a name="L194"></a><tt class="py-lineno"> 194</tt> <a class="py-toggle" href="#" id="FormatDescriptor.__set__-toggle" onclick="return toggle('FormatDescriptor.__set__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.FormatDescriptor-class.html#__set__">__set__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">instance</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FormatDescriptor.__set__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="FormatDescriptor.__set__-expanded"><a name="L195"></a><tt class="py-lineno"> 195</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt id="link-120" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-120', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
-<a name="L196"></a><tt class="py-lineno"> 196</tt> <tt class="py-line"> <tt id="link-121" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-121', 'value', 'link-30');">value</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">,</tt> <tt id="link-122" class="py-name"><a title="netaddr.address.Addr" class="py-name" href="#" onclick="return doclink('link-122', 'Addr', 'link-36');">Addr</a></tt><tt class="py-op">,</tt> <tt id="link-123" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-123', 'IP', 'link-76');">IP</a></tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">,</tt> <tt class="py-name">hex</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L197"></a><tt class="py-lineno"> 197</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L198"></a><tt class="py-lineno"> 198</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt id="link-124" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-124', 'value', 'link-30');">value</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L199"></a><tt class="py-lineno"> 199</tt> <tt class="py-line"> <tt class="py-comment"># Use default.</tt> </tt>
-<a name="L200"></a><tt class="py-lineno"> 200</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-125" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-125', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">default</tt> </tt>
-<a name="L201"></a><tt class="py-lineno"> 201</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L202"></a><tt class="py-lineno"> 202</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">"unsupported formatter callable: %r!"</tt> <tt class="py-op">%</tt> <tt id="link-126" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-126', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L203"></a><tt class="py-lineno"> 203</tt> <tt class="py-line"> </tt>
-<a name="L204"></a><tt class="py-lineno"> 204</tt> <tt class="py-line"> <tt class="py-name">instance</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'fmt'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-127" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-127', 'value', 'link-30');">value</a></tt> </tt>
-</div></div><a name="L205"></a><tt class="py-lineno"> 205</tt> <tt class="py-line"> </tt>
-<a name="L206"></a><tt class="py-lineno"> 206</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="Addr"></a><div id="Addr-def"><a name="L207"></a><tt class="py-lineno"> 207</tt> <a class="py-toggle" href="#" id="Addr-toggle" onclick="return toggle('Addr');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html">Addr</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Addr-expanded"><a name="L208"></a><tt class="py-lineno"> 208</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L209"></a><tt class="py-lineno"> 209</tt> <tt class="py-line"><tt class="py-docstring"> The base class containing common functionality for all subclasses</tt> </tt>
-<a name="L210"></a><tt class="py-lineno"> 210</tt> <tt class="py-line"><tt class="py-docstring"> representing various network address types.</tt> </tt>
-<a name="L211"></a><tt class="py-lineno"> 211</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L212"></a><tt class="py-lineno"> 212</tt> <tt class="py-line"><tt class="py-docstring"> It is a fully functioning class (as opposed to a virtual class) with a</tt> </tt>
-<a name="L213"></a><tt class="py-lineno"> 213</tt> <tt class="py-line"><tt class="py-docstring"> heuristic constructor that detects the type of address via the first</tt> </tt>
-<a name="L214"></a><tt class="py-lineno"> 214</tt> <tt class="py-line"><tt class="py-docstring"> argument if it is a string and sets itself up accordingly. If the first</tt> </tt>
-<a name="L215"></a><tt class="py-lineno"> 215</tt> <tt class="py-line"><tt class="py-docstring"> argument is an integer, then a constant must be provided via the second</tt> </tt>
-<a name="L216"></a><tt class="py-lineno"> 216</tt> <tt class="py-line"><tt class="py-docstring"> argument indicating the address type explicitly.</tt> </tt>
-<a name="L217"></a><tt class="py-lineno"> 217</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L218"></a><tt class="py-lineno"> 218</tt> <tt class="py-line"><tt class="py-docstring"> Objects of this class behave differently dependent upon the type of address</tt> </tt>
-<a name="L219"></a><tt class="py-lineno"> 219</tt> <tt class="py-line"><tt class="py-docstring"> they represent.</tt> </tt>
-<a name="L220"></a><tt class="py-lineno"> 220</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L221"></a><tt class="py-lineno"> 221</tt> <tt class="py-line"> <tt id="link-128" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-128', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-129" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-129', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-130" class="py-name"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-130', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">,</tt> <tt id="link-131" class="py-name"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-131', 'ST_EUI48', 'link-13');">ST_EUI48</a></tt><tt class="py-op">,</tt> <tt id="link-132" class="py-name"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-132', 'ST_EUI64', 'link-14');">ST_EUI64</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L222"></a><tt class="py-lineno"> 222</tt> <tt class="py-line"> <tt id="link-133" class="py-name" targets="Variable netaddr.address.Addr.ADDR_TYPES=netaddr.address.Addr-class.html#ADDR_TYPES,Variable netaddr.address.CIDR.ADDR_TYPES=netaddr.address.CIDR-class.html#ADDR_TYPES,Variable netaddr.address.EUI.ADDR_TYPES=netaddr.address.EUI-class.html#ADDR_TYPES,Variable netaddr.address.IP.ADDR_TYPES=netaddr.address.IP-class.html#ADDR_TYPES,Variable netaddr.address.IPRange.ADDR_TYPES=netaddr.address.IPRange-class.html#ADDR_TYPES,Variable netaddr.address.Wildcard.ADDR_TYPES=netaddr.address.Wildcard-class.html#ADDR_TYPES"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-133', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-134" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-134', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-135" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-135', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-136" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-136', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">,</tt> <tt id="link-137" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-137', 'AT_LINK', 'link-6');">AT_LINK</a></tt><tt class="py-op">,</tt> <tt id="link-138" class="py-name"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-138', 'AT_EUI64', 'link-7');">AT_EUI64</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L223"></a><tt class="py-lineno"> 223</tt> <tt class="py-line"> </tt>
-<a name="L224"></a><tt class="py-lineno"> 224</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L225"></a><tt class="py-lineno"> 225</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-139" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-139', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt id="link-140" class="py-name" targets="Class netaddr.address.AddrValueDescriptor=netaddr.address.AddrValueDescriptor-class.html"><a title="netaddr.address.AddrValueDescriptor" class="py-name" href="#" onclick="return doclink('link-140', 'AddrValueDescriptor', 'link-140');">AddrValueDescriptor</a></tt><tt class="py-op">(</tt><tt class="py-string">'value'</tt><tt class="py-op">)</tt> </tt>
-<a name="L226"></a><tt class="py-lineno"> 226</tt> <tt class="py-line"> <tt id="link-141" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-141', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-142" class="py-name" targets="Class netaddr.address.StrategyDescriptor=netaddr.address.StrategyDescriptor-class.html"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-142', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-143" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-143', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L227"></a><tt class="py-lineno"> 227</tt> <tt class="py-line"> <tt id="link-144" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-144', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-145" class="py-name" targets="Class netaddr.address.AddrTypeDescriptor=netaddr.address.AddrTypeDescriptor-class.html"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-145', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-146" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-146', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L228"></a><tt class="py-lineno"> 228</tt> <tt class="py-line"> </tt>
-<a name="Addr.__init__"></a><div id="Addr.__init__-def"><a name="L229"></a><tt class="py-lineno"> 229</tt> <a class="py-toggle" href="#" id="Addr.__init__-toggle" onclick="return toggle('Addr.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">,</tt> <tt class="py-param">addr_type</tt><tt class="py-op">=</tt><tt id="link-147" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-147', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__init__-expanded"><a name="L230"></a><tt class="py-lineno"> 230</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L231"></a><tt class="py-lineno"> 231</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L232"></a><tt class="py-lineno"> 232</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L233"></a><tt class="py-lineno"> 233</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: the string form of a network address, or a network byte</tt> </tt>
-<a name="L234"></a><tt class="py-lineno"> 234</tt> <tt class="py-line"><tt class="py-docstring"> order integer within the supported range for the address type.</tt> </tt>
-<a name="L235"></a><tt class="py-lineno"> 235</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L236"></a><tt class="py-lineno"> 236</tt> <tt class="py-line"><tt class="py-docstring"> @param addr_type: (optional) the network address type. If addr is an</tt> </tt>
-<a name="L237"></a><tt class="py-lineno"> 237</tt> <tt class="py-line"><tt class="py-docstring"> integer, this argument becomes mandatory.</tt> </tt>
-<a name="L238"></a><tt class="py-lineno"> 238</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L239"></a><tt class="py-lineno"> 239</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-148" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-148', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-149" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-149', 'addr_type', 'link-43');">addr_type</a></tt> </tt>
-<a name="L240"></a><tt class="py-lineno"> 240</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-150', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt> </tt>
-</div><a name="L241"></a><tt class="py-lineno"> 241</tt> <tt class="py-line"> </tt>
-<a name="Addr.__hash__"></a><div id="Addr.__hash__-def"><a name="L242"></a><tt class="py-lineno"> 242</tt> <a class="py-toggle" href="#" id="Addr.__hash__-toggle" onclick="return toggle('Addr.__hash__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__hash__">__hash__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__hash__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__hash__-expanded"><a name="L243"></a><tt class="py-lineno"> 243</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: hash of this address suitable for dict keys, sets etc"""</tt> </tt>
-<a name="L244"></a><tt class="py-lineno"> 244</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hash</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-151', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-152', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L245"></a><tt class="py-lineno"> 245</tt> <tt class="py-line"> </tt>
-<a name="Addr.__int__"></a><div id="Addr.__int__-def"><a name="L246"></a><tt class="py-lineno"> 246</tt> <a class="py-toggle" href="#" id="Addr.__int__-toggle" onclick="return toggle('Addr.__int__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__int__">__int__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__int__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__int__-expanded"><a name="L247"></a><tt class="py-lineno"> 247</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: value of this address as a network byte order integer"""</tt> </tt>
-<a name="L248"></a><tt class="py-lineno"> 248</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-153', 'value', 'link-30');">value</a></tt> </tt>
-</div><a name="L249"></a><tt class="py-lineno"> 249</tt> <tt class="py-line"> </tt>
-<a name="Addr.__long__"></a><div id="Addr.__long__-def"><a name="L250"></a><tt class="py-lineno"> 250</tt> <a class="py-toggle" href="#" id="Addr.__long__-toggle" onclick="return toggle('Addr.__long__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__long__">__long__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__long__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__long__-expanded"><a name="L251"></a><tt class="py-lineno"> 251</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: value of this address as a network byte order integer"""</tt> </tt>
-<a name="L252"></a><tt class="py-lineno"> 252</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-154', 'value', 'link-30');">value</a></tt> </tt>
-</div><a name="L253"></a><tt class="py-lineno"> 253</tt> <tt class="py-line"> </tt>
-<a name="Addr.__str__"></a><div id="Addr.__str__-def"><a name="L254"></a><tt class="py-lineno"> 254</tt> <a class="py-toggle" href="#" id="Addr.__str__-toggle" onclick="return toggle('Addr.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__str__-expanded"><a name="L255"></a><tt class="py-lineno"> 255</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: common string representation of this address"""</tt> </tt>
-<a name="L256"></a><tt class="py-lineno"> 256</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-155" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-155', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_str()=netaddr.strategy.AddrStrategy-class.html#int_to_str,Method netaddr.strategy.EUI48Strategy.int_to_str()=netaddr.strategy.EUI48Strategy-class.html#int_to_str,Method netaddr.strategy.IPv4StrategyOpt.int_to_str()=netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str,Method netaddr.strategy.IPv6Strategy.int_to_str()=netaddr.strategy.IPv6Strategy-class.html#int_to_str"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-156', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-157', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L257"></a><tt class="py-lineno"> 257</tt> <tt class="py-line"> </tt>
-<a name="Addr.__repr__"></a><div id="Addr.__repr__-def"><a name="L258"></a><tt class="py-lineno"> 258</tt> <a class="py-toggle" href="#" id="Addr.__repr__-toggle" onclick="return toggle('Addr.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__repr__-expanded"><a name="L259"></a><tt class="py-lineno"> 259</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object"""</tt> </tt>
-<a name="L260"></a><tt class="py-lineno"> 260</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s(%r)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L261"></a><tt class="py-lineno"> 261</tt> <tt class="py-line"> </tt>
-<a name="Addr.bits"></a><div id="Addr.bits-def"><a name="L262"></a><tt class="py-lineno"> 262</tt> <a class="py-toggle" href="#" id="Addr.bits-toggle" onclick="return toggle('Addr.bits');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#bits">bits</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.bits-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.bits-expanded"><a name="L263"></a><tt class="py-lineno"> 263</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: human-readable binary digit string of this address"""</tt> </tt>
-<a name="L264"></a><tt class="py-lineno"> 264</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-158" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-158', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-159" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_bits()=netaddr.strategy.AddrStrategy-class.html#int_to_bits"><a title="netaddr.strategy.AddrStrategy.int_to_bits" class="py-name" href="#" onclick="return doclink('link-159', 'int_to_bits', 'link-159');">int_to_bits</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-160', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L265"></a><tt class="py-lineno"> 265</tt> <tt class="py-line"> </tt>
-<a name="Addr.packed"></a><div id="Addr.packed-def"><a name="L266"></a><tt class="py-lineno"> 266</tt> <a class="py-toggle" href="#" id="Addr.packed-toggle" onclick="return toggle('Addr.packed');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#packed">packed</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.packed-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.packed-expanded"><a name="L267"></a><tt class="py-lineno"> 267</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: binary packed string of this address"""</tt> </tt>
-<a name="L268"></a><tt class="py-lineno"> 268</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-161', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-162" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_packed()=netaddr.strategy.AddrStrategy-class.html#int_to_packed"><a title="netaddr.strategy.AddrStrategy.int_to_packed" class="py-name" href="#" onclick="return doclink('link-162', 'int_to_packed', 'link-162');">int_to_packed</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-163" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-163', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L269"></a><tt class="py-lineno"> 269</tt> <tt class="py-line"> </tt>
-<a name="Addr.bin"></a><div id="Addr.bin-def"><a name="L270"></a><tt class="py-lineno"> 270</tt> <a class="py-toggle" href="#" id="Addr.bin-toggle" onclick="return toggle('Addr.bin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#bin">bin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.bin-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.bin-expanded"><a name="L271"></a><tt class="py-lineno"> 271</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L272"></a><tt class="py-lineno"> 272</tt> <tt class="py-line"><tt class="py-docstring"> @return: standard Python binary representation of this address. A back</tt> </tt>
-<a name="L273"></a><tt class="py-lineno"> 273</tt> <tt class="py-line"><tt class="py-docstring"> port of the format provided by the builtin bin() type available in</tt> </tt>
-<a name="L274"></a><tt class="py-lineno"> 274</tt> <tt class="py-line"><tt class="py-docstring"> Python 2.6.x and higher."""</tt> </tt>
-<a name="L275"></a><tt class="py-lineno"> 275</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-164" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-164', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-165" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_bin()=netaddr.strategy.AddrStrategy-class.html#int_to_bin"><a title="netaddr.strategy.AddrStrategy.int_to_bin" class="py-name" href="#" onclick="return doclink('link-165', 'int_to_bin', 'link-165');">int_to_bin</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-166" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-166', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L276"></a><tt class="py-lineno"> 276</tt> <tt class="py-line"> </tt>
-<a name="Addr.__len__"></a><div id="Addr.__len__-def"><a name="L277"></a><tt class="py-lineno"> 277</tt> <a class="py-toggle" href="#" id="Addr.__len__-toggle" onclick="return toggle('Addr.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__len__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__len__-expanded"><a name="L278"></a><tt class="py-lineno"> 278</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The size (width) of this address in bits"""</tt> </tt>
-<a name="L279"></a><tt class="py-lineno"> 279</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-167" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-167', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> </tt>
-</div><a name="L280"></a><tt class="py-lineno"> 280</tt> <tt class="py-line"> </tt>
-<a name="Addr.__iter__"></a><div id="Addr.__iter__-def"><a name="L281"></a><tt class="py-lineno"> 281</tt> <a class="py-toggle" href="#" id="Addr.__iter__-toggle" onclick="return toggle('Addr.__iter__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__iter__">__iter__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__iter__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__iter__-expanded"><a name="L282"></a><tt class="py-lineno"> 282</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: An iterator over individual words in this address"""</tt> </tt>
-<a name="L283"></a><tt class="py-lineno"> 283</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iter</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-168" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-168', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-169" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_words()=netaddr.strategy.AddrStrategy-class.html#int_to_words,Method netaddr.strategy.IPv4StrategyOpt.int_to_words()=netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-169', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-170" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-170', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L284"></a><tt class="py-lineno"> 284</tt> <tt class="py-line"> </tt>
-<a name="Addr.__getitem__"></a><div id="Addr.__getitem__-def"><a name="L285"></a><tt class="py-lineno"> 285</tt> <a class="py-toggle" href="#" id="Addr.__getitem__-toggle" onclick="return toggle('Addr.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__getitem__-expanded"><a name="L286"></a><tt class="py-lineno"> 286</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L287"></a><tt class="py-lineno"> 287</tt> <tt class="py-line"><tt class="py-docstring"> @return: The integer value of the word referenced by index (both</tt> </tt>
-<a name="L288"></a><tt class="py-lineno"> 288</tt> <tt class="py-line"><tt class="py-docstring"> positive and negative). Raises C{IndexError} if index is out</tt> </tt>
-<a name="L289"></a><tt class="py-lineno"> 289</tt> <tt class="py-line"><tt class="py-docstring"> of bounds. Also supports Python list slices for accessing</tt> </tt>
-<a name="L290"></a><tt class="py-lineno"> 290</tt> <tt class="py-line"><tt class="py-docstring"> word groups.</tt> </tt>
-<a name="L291"></a><tt class="py-lineno"> 291</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L292"></a><tt class="py-lineno"> 292</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L293"></a><tt class="py-lineno"> 293</tt> <tt class="py-line"> <tt class="py-comment"># Indexing, including negative indexing goodness.</tt> </tt>
-<a name="L294"></a><tt class="py-lineno"> 294</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">num_words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-171" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-171', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> </tt>
-<a name="L295"></a><tt class="py-lineno"> 295</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-op">(</tt><tt class="py-op">-</tt><tt class="py-name">num_words</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">num_words</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L296"></a><tt class="py-lineno"> 296</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'index out range for address type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L297"></a><tt class="py-lineno"> 297</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-172" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-172', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-173" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-173', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-174" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-174', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">]</tt> </tt>
-<a name="L298"></a><tt class="py-lineno"> 298</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">slice</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L299"></a><tt class="py-lineno"> 299</tt> <tt class="py-line"> <tt class="py-comment"># Slicing baby!</tt> </tt>
-<a name="L300"></a><tt class="py-lineno"> 300</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-175" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-175', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-176" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-176', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-177" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-177', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L301"></a><tt class="py-lineno"> 301</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-op">*</tt><tt class="py-name">index</tt><tt class="py-op">.</tt><tt class="py-name">indices</tt><tt class="py-op">(</tt><tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L302"></a><tt class="py-lineno"> 302</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L303"></a><tt class="py-lineno"> 303</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported type %r!'</tt> <tt class="py-op">%</tt> <tt class="py-name">index</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L304"></a><tt class="py-lineno"> 304</tt> <tt class="py-line"> </tt>
-<a name="Addr.__setitem__"></a><div id="Addr.__setitem__-def"><a name="L305"></a><tt class="py-lineno"> 305</tt> <a class="py-toggle" href="#" id="Addr.__setitem__-toggle" onclick="return toggle('Addr.__setitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__setitem__">__setitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">,</tt> <tt class="py-param">value</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__setitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__setitem__-expanded"><a name="L306"></a><tt class="py-lineno"> 306</tt> <tt class="py-line"> <tt class="py-docstring">"""Sets the value of the word referenced by index in this address"""</tt> </tt>
-<a name="L307"></a><tt class="py-lineno"> 307</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">slice</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L308"></a><tt class="py-lineno"> 308</tt> <tt class="py-line"> <tt class="py-comment"># TODO - settable slices.</tt> </tt>
-<a name="L309"></a><tt class="py-lineno"> 309</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'settable slices not yet supported!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L310"></a><tt class="py-lineno"> 310</tt> <tt class="py-line"> </tt>
-<a name="L311"></a><tt class="py-lineno"> 311</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L312"></a><tt class="py-lineno"> 312</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'index not an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L313"></a><tt class="py-lineno"> 313</tt> <tt class="py-line"> </tt>
-<a name="L314"></a><tt class="py-lineno"> 314</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-178" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-178', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L315"></a><tt class="py-lineno"> 315</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'index %d outside address type boundary!'</tt> <tt class="py-op">%</tt> <tt class="py-name">index</tt><tt class="py-op">)</tt> </tt>
-<a name="L316"></a><tt class="py-lineno"> 316</tt> <tt class="py-line"> </tt>
-<a name="L317"></a><tt class="py-lineno"> 317</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-179" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-179', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L318"></a><tt class="py-lineno"> 318</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'value not an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L319"></a><tt class="py-lineno"> 319</tt> <tt class="py-line"> </tt>
-<a name="L320"></a><tt class="py-lineno"> 320</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt id="link-180" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-180', 'value', 'link-30');">value</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-181" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-181', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt><tt class="py-op">:</tt> </tt>
-<a name="L321"></a><tt class="py-lineno"> 321</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'value %d outside word size maximum of %d bits!'</tt> </tt>
-<a name="L322"></a><tt class="py-lineno"> 322</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-182" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-182', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-183" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-183', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L323"></a><tt class="py-lineno"> 323</tt> <tt class="py-line"> </tt>
-<a name="L324"></a><tt class="py-lineno"> 324</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-184" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-184', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-185" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-185', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-186" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-186', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L325"></a><tt class="py-lineno"> 325</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-187" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-187', 'value', 'link-30');">value</a></tt> </tt>
-<a name="L326"></a><tt class="py-lineno"> 326</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-188" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-188', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-189" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-189', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-190" class="py-name" targets="Method netaddr.strategy.AddrStrategy.words_to_int()=netaddr.strategy.AddrStrategy-class.html#words_to_int,Method netaddr.strategy.IPv4StrategyOpt.words_to_int()=netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int"><a title="netaddr.strategy.AddrStrategy.words_to_int
-netaddr.strategy.IPv4StrategyOpt.words_to_int" class="py-name" href="#" onclick="return doclink('link-190', 'words_to_int', 'link-190');">words_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L327"></a><tt class="py-lineno"> 327</tt> <tt class="py-line"> </tt>
-<a name="Addr.__hex__"></a><div id="Addr.__hex__-def"><a name="L328"></a><tt class="py-lineno"> 328</tt> <a class="py-toggle" href="#" id="Addr.__hex__-toggle" onclick="return toggle('Addr.__hex__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__hex__">__hex__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__hex__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__hex__-expanded"><a name="L329"></a><tt class="py-lineno"> 329</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: network byte order hexadecimal string of this address"""</tt> </tt>
-<a name="L330"></a><tt class="py-lineno"> 330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-191" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-191', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'L'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L331"></a><tt class="py-lineno"> 331</tt> <tt class="py-line"> </tt>
-<a name="Addr.__iadd__"></a><div id="Addr.__iadd__-def"><a name="L332"></a><tt class="py-lineno"> 332</tt> <a class="py-toggle" href="#" id="Addr.__iadd__-toggle" onclick="return toggle('Addr.__iadd__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__iadd__">__iadd__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__iadd__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__iadd__-expanded"><a name="L333"></a><tt class="py-lineno"> 333</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L334"></a><tt class="py-lineno"> 334</tt> <tt class="py-line"><tt class="py-docstring"> Increment value of network address by specified amount. Behaves like</tt> </tt>
-<a name="L335"></a><tt class="py-lineno"> 335</tt> <tt class="py-line"><tt class="py-docstring"> an unsigned integer, rolling over to zero when it reaches the maximum</tt> </tt>
-<a name="L336"></a><tt class="py-lineno"> 336</tt> <tt class="py-line"><tt class="py-docstring"> value threshold.</tt> </tt>
-<a name="L337"></a><tt class="py-lineno"> 337</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L338"></a><tt class="py-lineno"> 338</tt> <tt class="py-line"><tt class="py-docstring"> @param num: size of increment</tt> </tt>
-<a name="L339"></a><tt class="py-lineno"> 339</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L340"></a><tt class="py-lineno"> 340</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L341"></a><tt class="py-lineno"> 341</tt> <tt class="py-line"> <tt class="py-name">new_value</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-192" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-192', 'value', 'link-30');">value</a></tt> <tt class="py-op">+</tt> <tt class="py-name">num</tt> </tt>
-<a name="L342"></a><tt class="py-lineno"> 342</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_value</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-193" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-193', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt><tt class="py-op">:</tt> </tt>
-<a name="L343"></a><tt class="py-lineno"> 343</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-194" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-194', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_value</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-195" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-195', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L344"></a><tt class="py-lineno"> 344</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L345"></a><tt class="py-lineno"> 345</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-196" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-196', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_value</tt> </tt>
-<a name="L346"></a><tt class="py-lineno"> 346</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L347"></a><tt class="py-lineno"> 347</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Increment value must be an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L348"></a><tt class="py-lineno"> 348</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
-</div><a name="L349"></a><tt class="py-lineno"> 349</tt> <tt class="py-line"> </tt>
-<a name="Addr.__isub__"></a><div id="Addr.__isub__-def"><a name="L350"></a><tt class="py-lineno"> 350</tt> <a class="py-toggle" href="#" id="Addr.__isub__-toggle" onclick="return toggle('Addr.__isub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__isub__">__isub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">num</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__isub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__isub__-expanded"><a name="L351"></a><tt class="py-lineno"> 351</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L352"></a><tt class="py-lineno"> 352</tt> <tt class="py-line"><tt class="py-docstring"> Decrement value of network address by specified amount. Behaves like</tt> </tt>
-<a name="L353"></a><tt class="py-lineno"> 353</tt> <tt class="py-line"><tt class="py-docstring"> an unsigned integer, rolling over to maximum value when it goes below</tt> </tt>
-<a name="L354"></a><tt class="py-lineno"> 354</tt> <tt class="py-line"><tt class="py-docstring"> zero.</tt> </tt>
-<a name="L355"></a><tt class="py-lineno"> 355</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L356"></a><tt class="py-lineno"> 356</tt> <tt class="py-line"><tt class="py-docstring"> @param num: size of decrement</tt> </tt>
-<a name="L357"></a><tt class="py-lineno"> 357</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L358"></a><tt class="py-lineno"> 358</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L359"></a><tt class="py-lineno"> 359</tt> <tt class="py-line"> <tt class="py-name">new_value</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-197" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-197', 'value', 'link-30');">value</a></tt> <tt class="py-op">-</tt> <tt class="py-name">num</tt> </tt>
-<a name="L360"></a><tt class="py-lineno"> 360</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_value</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L361"></a><tt class="py-lineno"> 361</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-198" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-198', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_value</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-199" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-199', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L362"></a><tt class="py-lineno"> 362</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L363"></a><tt class="py-lineno"> 363</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-200" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-200', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_value</tt> </tt>
-<a name="L364"></a><tt class="py-lineno"> 364</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L365"></a><tt class="py-lineno"> 365</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Decrement value must be an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L366"></a><tt class="py-lineno"> 366</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
-</div><a name="L367"></a><tt class="py-lineno"> 367</tt> <tt class="py-line"> </tt>
-<a name="Addr.__add__"></a><div id="Addr.__add__-def"><a name="L368"></a><tt class="py-lineno"> 368</tt> <a class="py-toggle" href="#" id="Addr.__add__-toggle" onclick="return toggle('Addr.__add__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__add__">__add__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__add__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__add__-expanded"><a name="L369"></a><tt class="py-lineno"> 369</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L370"></a><tt class="py-lineno"> 370</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L371"></a><tt class="py-lineno"> 371</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L372"></a><tt class="py-lineno"> 372</tt> <tt class="py-line"><tt class="py-docstring"> @return: A new (potentially larger) Addr class/subclass instance.</tt> </tt>
-<a name="L373"></a><tt class="py-lineno"> 373</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L374"></a><tt class="py-lineno"> 374</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-201" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-201', 'value', 'link-30');">value</a></tt> <tt class="py-op">+</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-202" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-202', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L375"></a><tt class="py-lineno"> 375</tt> <tt class="py-line"> </tt>
-<a name="Addr.__sub__"></a><div id="Addr.__sub__-def"><a name="L376"></a><tt class="py-lineno"> 376</tt> <a class="py-toggle" href="#" id="Addr.__sub__-toggle" onclick="return toggle('Addr.__sub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__sub__">__sub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__sub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__sub__-expanded"><a name="L377"></a><tt class="py-lineno"> 377</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L378"></a><tt class="py-lineno"> 378</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L379"></a><tt class="py-lineno"> 379</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L380"></a><tt class="py-lineno"> 380</tt> <tt class="py-line"><tt class="py-docstring"> @return: A new (potentially smaller) Addr class/subclass instance.</tt> </tt>
-<a name="L381"></a><tt class="py-lineno"> 381</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L382"></a><tt class="py-lineno"> 382</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-203" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-203', 'value', 'link-30');">value</a></tt> <tt class="py-op">-</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-204" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-204', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L383"></a><tt class="py-lineno"> 383</tt> <tt class="py-line"> </tt>
-<a name="Addr.__eq__"></a><div id="Addr.__eq__-def"><a name="L384"></a><tt class="py-lineno"> 384</tt> <a class="py-toggle" href="#" id="Addr.__eq__-toggle" onclick="return toggle('Addr.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__eq__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__eq__-expanded"><a name="L385"></a><tt class="py-lineno"> 385</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L386"></a><tt class="py-lineno"> 386</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is numerically the same as other,</tt> </tt>
-<a name="L387"></a><tt class="py-lineno"> 387</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L388"></a><tt class="py-lineno"> 388</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L389"></a><tt class="py-lineno"> 389</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L390"></a><tt class="py-lineno"> 390</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-205" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-205', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-206" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-206', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-207" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-207', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-208" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-208', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L391"></a><tt class="py-lineno"> 391</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L392"></a><tt class="py-lineno"> 392</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L393"></a><tt class="py-lineno"> 393</tt> <tt class="py-line"> </tt>
-<a name="Addr.__ne__"></a><div id="Addr.__ne__-def"><a name="L394"></a><tt class="py-lineno"> 394</tt> <a class="py-toggle" href="#" id="Addr.__ne__-toggle" onclick="return toggle('Addr.__ne__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__ne__">__ne__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__ne__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__ne__-expanded"><a name="L395"></a><tt class="py-lineno"> 395</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L396"></a><tt class="py-lineno"> 396</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is not numerically the same other,</tt> </tt>
-<a name="L397"></a><tt class="py-lineno"> 397</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L398"></a><tt class="py-lineno"> 398</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L399"></a><tt class="py-lineno"> 399</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L400"></a><tt class="py-lineno"> 400</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-209" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-209', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-210" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-210', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-211" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-211', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-212" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-212', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L401"></a><tt class="py-lineno"> 401</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L402"></a><tt class="py-lineno"> 402</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L403"></a><tt class="py-lineno"> 403</tt> <tt class="py-line"> </tt>
-<a name="Addr.__lt__"></a><div id="Addr.__lt__-def"><a name="L404"></a><tt class="py-lineno"> 404</tt> <a class="py-toggle" href="#" id="Addr.__lt__-toggle" onclick="return toggle('Addr.__lt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__lt__">__lt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__lt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__lt__-expanded"><a name="L405"></a><tt class="py-lineno"> 405</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L406"></a><tt class="py-lineno"> 406</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is numerically lower in value than</tt> </tt>
-<a name="L407"></a><tt class="py-lineno"> 407</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L408"></a><tt class="py-lineno"> 408</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L409"></a><tt class="py-lineno"> 409</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L410"></a><tt class="py-lineno"> 410</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-213" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-213', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-214" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-214', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-215" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-215', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-216" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-216', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L411"></a><tt class="py-lineno"> 411</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L412"></a><tt class="py-lineno"> 412</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L413"></a><tt class="py-lineno"> 413</tt> <tt class="py-line"> </tt>
-<a name="Addr.__le__"></a><div id="Addr.__le__-def"><a name="L414"></a><tt class="py-lineno"> 414</tt> <a class="py-toggle" href="#" id="Addr.__le__-toggle" onclick="return toggle('Addr.__le__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__le__">__le__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__le__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__le__-expanded"><a name="L415"></a><tt class="py-lineno"> 415</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L416"></a><tt class="py-lineno"> 416</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is numerically lower or equal in</tt> </tt>
-<a name="L417"></a><tt class="py-lineno"> 417</tt> <tt class="py-line"><tt class="py-docstring"> value to other, C{False} otherwise.</tt> </tt>
-<a name="L418"></a><tt class="py-lineno"> 418</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L419"></a><tt class="py-lineno"> 419</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L420"></a><tt class="py-lineno"> 420</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-217" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-217', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-218" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-218', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-219" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-219', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-220" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-220', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L421"></a><tt class="py-lineno"> 421</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L422"></a><tt class="py-lineno"> 422</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L423"></a><tt class="py-lineno"> 423</tt> <tt class="py-line"> </tt>
-<a name="Addr.__gt__"></a><div id="Addr.__gt__-def"><a name="L424"></a><tt class="py-lineno"> 424</tt> <a class="py-toggle" href="#" id="Addr.__gt__-toggle" onclick="return toggle('Addr.__gt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__gt__">__gt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__gt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__gt__-expanded"><a name="L425"></a><tt class="py-lineno"> 425</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L426"></a><tt class="py-lineno"> 426</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is numerically greater in value than</tt> </tt>
-<a name="L427"></a><tt class="py-lineno"> 427</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L428"></a><tt class="py-lineno"> 428</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L429"></a><tt class="py-lineno"> 429</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L430"></a><tt class="py-lineno"> 430</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-221" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-221', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-222" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-222', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-223" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-223', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-224" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-224', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L431"></a><tt class="py-lineno"> 431</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L432"></a><tt class="py-lineno"> 432</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L433"></a><tt class="py-lineno"> 433</tt> <tt class="py-line"> </tt>
-<a name="Addr.__ge__"></a><div id="Addr.__ge__-def"><a name="L434"></a><tt class="py-lineno"> 434</tt> <a class="py-toggle" href="#" id="Addr.__ge__-toggle" onclick="return toggle('Addr.__ge__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__ge__">__ge__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__ge__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__ge__-expanded"><a name="L435"></a><tt class="py-lineno"> 435</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L436"></a><tt class="py-lineno"> 436</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is numerically greater or equal in</tt> </tt>
-<a name="L437"></a><tt class="py-lineno"> 437</tt> <tt class="py-line"><tt class="py-docstring"> value to other, C{False} otherwise.</tt> </tt>
-<a name="L438"></a><tt class="py-lineno"> 438</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L439"></a><tt class="py-lineno"> 439</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L440"></a><tt class="py-lineno"> 440</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-225" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-225', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-226" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-226', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-227" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-227', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-228" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-228', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L441"></a><tt class="py-lineno"> 441</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L442"></a><tt class="py-lineno"> 442</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="Addr.__or__"></a><div id="Addr.__or__-def"><a name="L443"></a><tt class="py-lineno"> 443</tt> <a class="py-toggle" href="#" id="Addr.__or__-toggle" onclick="return toggle('Addr.__or__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__or__">__or__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__or__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__or__-expanded"><a name="L444"></a><tt class="py-lineno"> 444</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L445"></a><tt class="py-lineno"> 445</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L446"></a><tt class="py-lineno"> 446</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L447"></a><tt class="py-lineno"> 447</tt> <tt class="py-line"><tt class="py-docstring"> @return: bitwise OR (x | y) of self.value with other.value.</tt> </tt>
-<a name="L448"></a><tt class="py-lineno"> 448</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L449"></a><tt class="py-lineno"> 449</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-229', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-230" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-230', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-231" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-231', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L450"></a><tt class="py-lineno"> 450</tt> <tt class="py-line"> </tt>
-<a name="Addr.__and__"></a><div id="Addr.__and__-def"><a name="L451"></a><tt class="py-lineno"> 451</tt> <a class="py-toggle" href="#" id="Addr.__and__-toggle" onclick="return toggle('Addr.__and__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__and__">__and__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__and__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__and__-expanded"><a name="L452"></a><tt class="py-lineno"> 452</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L453"></a><tt class="py-lineno"> 453</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L454"></a><tt class="py-lineno"> 454</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L455"></a><tt class="py-lineno"> 455</tt> <tt class="py-line"><tt class="py-docstring"> @return: bitwise AND (x &amp; y) of self.value with other.value.</tt> </tt>
-<a name="L456"></a><tt class="py-lineno"> 456</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L457"></a><tt class="py-lineno"> 457</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-232" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-232', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-233" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-233', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-234', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L458"></a><tt class="py-lineno"> 458</tt> <tt class="py-line"> </tt>
-<a name="Addr.__xor__"></a><div id="Addr.__xor__-def"><a name="L459"></a><tt class="py-lineno"> 459</tt> <a class="py-toggle" href="#" id="Addr.__xor__-toggle" onclick="return toggle('Addr.__xor__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__xor__">__xor__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__xor__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__xor__-expanded"><a name="L460"></a><tt class="py-lineno"> 460</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L461"></a><tt class="py-lineno"> 461</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L462"></a><tt class="py-lineno"> 462</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L463"></a><tt class="py-lineno"> 463</tt> <tt class="py-line"><tt class="py-docstring"> @return: bitwise exclusive OR (x ^ y) of self.value with other.value.</tt> </tt>
-<a name="L464"></a><tt class="py-lineno"> 464</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L465"></a><tt class="py-lineno"> 465</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-235', 'value', 'link-30');">value</a></tt> <tt class="py-op">^</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-236" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-236', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-237', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L466"></a><tt class="py-lineno"> 466</tt> <tt class="py-line"> </tt>
-<a name="Addr.__lshift__"></a><div id="Addr.__lshift__-def"><a name="L467"></a><tt class="py-lineno"> 467</tt> <a class="py-toggle" href="#" id="Addr.__lshift__-toggle" onclick="return toggle('Addr.__lshift__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__lshift__">__lshift__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">numbits</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__lshift__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__lshift__-expanded"><a name="L468"></a><tt class="py-lineno"> 468</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L469"></a><tt class="py-lineno"> 469</tt> <tt class="py-line"><tt class="py-docstring"> @param numbits: size of shift (in bits).</tt> </tt>
-<a name="L470"></a><tt class="py-lineno"> 470</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L471"></a><tt class="py-lineno"> 471</tt> <tt class="py-line"><tt class="py-docstring"> @return: integer value of this IP address shifted left by x bits.</tt> </tt>
-<a name="L472"></a><tt class="py-lineno"> 472</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L473"></a><tt class="py-lineno"> 473</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-238" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-238', 'value', 'link-30');">value</a></tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">numbits</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-239', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L474"></a><tt class="py-lineno"> 474</tt> <tt class="py-line"> </tt>
-<a name="Addr.__rshift__"></a><div id="Addr.__rshift__-def"><a name="L475"></a><tt class="py-lineno"> 475</tt> <a class="py-toggle" href="#" id="Addr.__rshift__-toggle" onclick="return toggle('Addr.__rshift__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__rshift__">__rshift__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">numbits</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__rshift__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__rshift__-expanded"><a name="L476"></a><tt class="py-lineno"> 476</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L477"></a><tt class="py-lineno"> 477</tt> <tt class="py-line"><tt class="py-docstring"> @param numbits: size of shift (in bits).</tt> </tt>
-<a name="L478"></a><tt class="py-lineno"> 478</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L479"></a><tt class="py-lineno"> 479</tt> <tt class="py-line"><tt class="py-docstring"> @return: integer value of this IP address right shifted by x bits.</tt> </tt>
-<a name="L480"></a><tt class="py-lineno"> 480</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L481"></a><tt class="py-lineno"> 481</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-240', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-name">numbits</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-241', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L482"></a><tt class="py-lineno"> 482</tt> <tt class="py-line"> </tt>
-<a name="Addr.__invert__"></a><div id="Addr.__invert__-def"><a name="L483"></a><tt class="py-lineno"> 483</tt> <a class="py-toggle" href="#" id="Addr.__invert__-toggle" onclick="return toggle('Addr.__invert__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Addr-class.html#__invert__">__invert__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Addr.__invert__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Addr.__invert__-expanded"><a name="L484"></a><tt class="py-lineno"> 484</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L485"></a><tt class="py-lineno"> 485</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an integer or int-like object.</tt> </tt>
-<a name="L486"></a><tt class="py-lineno"> 486</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L487"></a><tt class="py-lineno"> 487</tt> <tt class="py-line"><tt class="py-docstring"> @return: inversion (~x) of self.value.</tt> </tt>
-<a name="L488"></a><tt class="py-lineno"> 488</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L489"></a><tt class="py-lineno"> 489</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-op">~</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-242', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L490"></a><tt class="py-lineno"> 490</tt> <tt class="py-line"> </tt>
-<a name="L491"></a><tt class="py-lineno"> 491</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="EUI"></a><div id="EUI-def"><a name="L492"></a><tt class="py-lineno"> 492</tt> <a class="py-toggle" href="#" id="EUI-toggle" onclick="return toggle('EUI');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html">EUI</a><tt class="py-op">(</tt><tt class="py-base-class">Addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="EUI-expanded"><a name="L493"></a><tt class="py-lineno"> 493</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L494"></a><tt class="py-lineno"> 494</tt> <tt class="py-line"><tt class="py-docstring"> Represents an IEEE EUI (Extended Unique Identifier) indentifier.</tt> </tt>
-<a name="L495"></a><tt class="py-lineno"> 495</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L496"></a><tt class="py-lineno"> 496</tt> <tt class="py-line"><tt class="py-docstring"> Input parser is flexible, supporting EUI-48 (including the many Media</tt> </tt>
-<a name="L497"></a><tt class="py-lineno"> 497</tt> <tt class="py-line"><tt class="py-docstring"> Access Control variants) and EUI-64.</tt> </tt>
-<a name="L498"></a><tt class="py-lineno"> 498</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L499"></a><tt class="py-lineno"> 499</tt> <tt class="py-line"> <tt id="link-243" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-243', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-244" class="py-name"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-244', 'ST_EUI48', 'link-13');">ST_EUI48</a></tt><tt class="py-op">,</tt> <tt id="link-245" class="py-name"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-245', 'ST_EUI64', 'link-14');">ST_EUI64</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L500"></a><tt class="py-lineno"> 500</tt> <tt class="py-line"> <tt id="link-246" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-246', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-247" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-247', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-248" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-248', 'AT_LINK', 'link-6');">AT_LINK</a></tt><tt class="py-op">,</tt> <tt id="link-249" class="py-name"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-249', 'AT_EUI64', 'link-7');">AT_EUI64</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L501"></a><tt class="py-lineno"> 501</tt> <tt class="py-line"> </tt>
-<a name="L502"></a><tt class="py-lineno"> 502</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L503"></a><tt class="py-lineno"> 503</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-250" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-250', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-251" class="py-name"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-251', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-252" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-252', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno"> 504</tt> <tt class="py-line"> <tt id="link-253" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-253', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-254" class="py-name"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-254', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-255" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-255', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L505"></a><tt class="py-lineno"> 505</tt> <tt class="py-line"> </tt>
-<a name="EUI.__init__"></a><div id="EUI.__init__-def"><a name="L506"></a><tt class="py-lineno"> 506</tt> <a class="py-toggle" href="#" id="EUI.__init__-toggle" onclick="return toggle('EUI.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">,</tt> <tt class="py-param">addr_type</tt><tt class="py-op">=</tt><tt id="link-256" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-256', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.__init__-expanded"><a name="L507"></a><tt class="py-lineno"> 507</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L508"></a><tt class="py-lineno"> 508</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L509"></a><tt class="py-lineno"> 509</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L510"></a><tt class="py-lineno"> 510</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: an EUI-48 (MAC) or EUI-64 address string or a network</tt> </tt>
-<a name="L511"></a><tt class="py-lineno"> 511</tt> <tt class="py-line"><tt class="py-docstring"> byte order integer.</tt> </tt>
-<a name="L512"></a><tt class="py-lineno"> 512</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L513"></a><tt class="py-lineno"> 513</tt> <tt class="py-line"><tt class="py-docstring"> @param addr_type: (optional) the specific EUI address type (C{AT_LINK}</tt> </tt>
-<a name="L514"></a><tt class="py-lineno"> 514</tt> <tt class="py-line"><tt class="py-docstring"> or C{AT_EUI64}). If addr is an integer, this argument is mandatory.</tt> </tt>
-<a name="L515"></a><tt class="py-lineno"> 515</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L516"></a><tt class="py-lineno"> 516</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-257" class="py-name" targets="Class netaddr.address.EUI=netaddr.address.EUI-class.html"><a title="netaddr.address.EUI" class="py-name" href="#" onclick="return doclink('link-257', 'EUI', 'link-257');">EUI</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-258" class="py-name" targets="Method netaddr.address.Addr.__init__()=netaddr.address.Addr-class.html#__init__,Method netaddr.address.AddrTypeDescriptor.__init__()=netaddr.address.AddrTypeDescriptor-class.html#__init__,Method netaddr.address.AddrValueDescriptor.__init__()=netaddr.address.AddrValueDescriptor-class.html#__init__,Method netaddr.address.CIDR.__init__()=netaddr.address.CIDR-class.html#__init__,Method netaddr.address.EUI.__init__()=netaddr.address.EUI-class.html#__init__,Method netaddr.address.FormatDescriptor.__init__()=netaddr.address.FormatDescriptor-class.html#__init__,Method netaddr.address.IP.__init__()=netaddr.address.IP-class.html#__init__,Method netaddr.address.IPRange.__init__()=netaddr.address.IPRange-class.html#__init__,Method netaddr.address.IPRangeSet.__init__()=netaddr.address.IPRangeSet-class.html#__init__,Method netaddr.address.PrefixLenDescriptor.__init__()=netaddr.address.PrefixLenDescriptor-class.html#__init__,Method netaddr.address.StrategyDescriptor.__init__()=netaddr.address.StrategyDescriptor-class.html#__init__,Method netaddr.address.Wildcard.__init__()=netaddr.address.Wildcard-class.html#__init__,Method netaddr.core.PrettyPrinter.__init__()=netaddr.core.PrettyPrinter-class.html#__init__,Method netaddr.core.Publisher.__init__()=netaddr.core.Publisher-class.html#__init__,Method netaddr.eui.FileIndexer.__init__()=netaddr.eui.FileIndexer-class.html#__init__,Method netaddr.eui.IAB.__init__()=netaddr.eui.IAB-class.html#__init__,Method netaddr.eui.IABIndexParser.__init__()=netaddr.eui.IABIndexParser-class.html#__init__,Method netaddr.eui.OUI.__init__()=netaddr.eui.OUI-class.html#__init__,Method netaddr.eui.OUIIndexParser.__init__()=netaddr.eui.OUIIndexParser-class.html#__init__,Method netaddr.ip.DictUpdater.__init__()=netaddr.ip.DictUpdater-class.html#__init__,Method netaddr.ip.IPv4Parser.__init__()=netaddr.ip.IPv4Parser-class.html#__init__,Method netaddr.ip.IPv6Parser.__init__()=netaddr.ip.IPv6Parser-class.html#__init__,Method netaddr.ip.LineRecordParser.__init__()=netaddr.ip.LineRecordParser-class.html#__init__,Method netaddr.ip.MulticastParser.__init__()=netaddr.ip.MulticastParser-class.html#__init__,Method netaddr.strategy.AddrStrategy.__init__()=netaddr.strategy.AddrStrategy-class.html#__init__,Method netaddr.strategy.EUI48Strategy.__init__()=netaddr.strategy.EUI48Strategy-class.html#__init__,Method netaddr.strategy.IPv4StrategyOpt.__init__()=netaddr.strategy.IPv4StrategyOpt-class.html#__init__,Method netaddr.strategy.IPv4StrategyStd.__init__()=netaddr.strategy.IPv4StrategyStd-class.html#__init__,Method netaddr.strategy.IPv6Strategy.__init__()=netaddr.strategy.IPv6Strategy-class.html#__init__"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-258', '__init__', 'link-258');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt id="link-259" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-259', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L517"></a><tt class="py-lineno"> 517</tt> <tt class="py-line"> </tt>
-<a name="EUI.oui"></a><div id="EUI.oui-def"><a name="L518"></a><tt class="py-lineno"> 518</tt> <a class="py-toggle" href="#" id="EUI.oui-toggle" onclick="return toggle('EUI.oui');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#oui">oui</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt id="link-260" class="py-name"><a title="netaddr.eui.OUI" class="py-name" href="#" onclick="return doclink('link-260', 'OUI', 'link-18');">OUI</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.oui-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.oui-expanded"><a name="L519"></a><tt class="py-lineno"> 519</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L520"></a><tt class="py-lineno"> 520</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: callable used on return values. Default: L{OUI} object.</tt> </tt>
-<a name="L521"></a><tt class="py-lineno"> 521</tt> <tt class="py-line"><tt class="py-docstring"> Also Supports str(), unicode(), int() and long().</tt> </tt>
-<a name="L522"></a><tt class="py-lineno"> 522</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L523"></a><tt class="py-lineno"> 523</tt> <tt class="py-line"><tt class="py-docstring"> @return: The OUI (Organisationally Unique Identifier) for this EUI.</tt> </tt>
-<a name="L524"></a><tt class="py-lineno"> 524</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L525"></a><tt class="py-lineno"> 525</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt id="link-261" class="py-name" targets="Variable netaddr.address.CIDR.fmt=netaddr.address.CIDR-class.html#fmt,Variable netaddr.address.IPRange.fmt=netaddr.address.IPRange-class.html#fmt,Variable netaddr.address.Wildcard.fmt=netaddr.address.Wildcard-class.html#fmt"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-261', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt id="link-262" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-262', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-263" class="py-name"><a title="netaddr.eui.OUI" class="py-name" href="#" onclick="return doclink('link-263', 'OUI', 'link-18');">OUI</a></tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L526"></a><tt class="py-lineno"> 526</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-264" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-264', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-265" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-265', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">24</tt><tt class="py-op">)</tt> </tt>
-<a name="L527"></a><tt class="py-lineno"> 527</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt id="link-266" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-266', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt id="link-267" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-267', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L528"></a><tt class="py-lineno"> 528</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L529"></a><tt class="py-lineno"> 529</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L530"></a><tt class="py-lineno"> 530</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">"unsupported formatter callable: %r!"</tt> <tt class="py-op">%</tt> <tt id="link-268" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-268', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L531"></a><tt class="py-lineno"> 531</tt> <tt class="py-line"> </tt>
-<a name="EUI.ei"></a><div id="EUI.ei-def"><a name="L532"></a><tt class="py-lineno"> 532</tt> <a class="py-toggle" href="#" id="EUI.ei-toggle" onclick="return toggle('EUI.ei');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#ei">ei</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.ei-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.ei-expanded"><a name="L533"></a><tt class="py-lineno"> 533</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The EI (Extension Identifier) for this EUI"""</tt> </tt>
-<a name="L534"></a><tt class="py-lineno"> 534</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-269" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-269', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">==</tt> <tt id="link-270" class="py-name"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-270', 'ST_EUI48', 'link-13');">ST_EUI48</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L535"></a><tt class="py-lineno"> 535</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">:</tt><tt class="py-number">6</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L536"></a><tt class="py-lineno"> 536</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-271" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-271', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">==</tt> <tt id="link-272" class="py-name"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-272', 'ST_EUI64', 'link-14');">ST_EUI64</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L537"></a><tt class="py-lineno"> 537</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">:</tt><tt class="py-number">8</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L538"></a><tt class="py-lineno"> 538</tt> <tt class="py-line"> </tt>
-<a name="EUI.isiab"></a><div id="EUI.isiab-def"><a name="L539"></a><tt class="py-lineno"> 539</tt> <a class="py-toggle" href="#" id="EUI.isiab-toggle" onclick="return toggle('EUI.isiab');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#isiab">isiab</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.isiab-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.isiab-expanded"><a name="L540"></a><tt class="py-lineno"> 540</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: True if this EUI is an IAB address, False otherwise"""</tt> </tt>
-<a name="L541"></a><tt class="py-lineno"> 541</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0x50c2000</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-273" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-273', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">12</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">0x50c2fff</tt> </tt>
-</div><a name="L542"></a><tt class="py-lineno"> 542</tt> <tt class="py-line"> </tt>
-<a name="EUI.iab"></a><div id="EUI.iab-def"><a name="L543"></a><tt class="py-lineno"> 543</tt> <a class="py-toggle" href="#" id="EUI.iab-toggle" onclick="return toggle('EUI.iab');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#iab">iab</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt id="link-274" class="py-name"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-274', 'IAB', 'link-19');">IAB</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.iab-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.iab-expanded"><a name="L544"></a><tt class="py-lineno"> 544</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L545"></a><tt class="py-lineno"> 545</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: callable used on return values. Default: L{IAB} object.</tt> </tt>
-<a name="L546"></a><tt class="py-lineno"> 546</tt> <tt class="py-line"><tt class="py-docstring"> Also Supports str(), unicode(), int() and long().</tt> </tt>
-<a name="L547"></a><tt class="py-lineno"> 547</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L548"></a><tt class="py-lineno"> 548</tt> <tt class="py-line"><tt class="py-docstring"> @return: If isiab() is True, the IAB (Individual Address Block)</tt> </tt>
-<a name="L549"></a><tt class="py-lineno"> 549</tt> <tt class="py-line"><tt class="py-docstring"> is returned, None otherwise.</tt> </tt>
-<a name="L550"></a><tt class="py-lineno"> 550</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L551"></a><tt class="py-lineno"> 551</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-275" class="py-name" targets="Method netaddr.address.EUI.isiab()=netaddr.address.EUI-class.html#isiab"><a title="netaddr.address.EUI.isiab" class="py-name" href="#" onclick="return doclink('link-275', 'isiab', 'link-275');">isiab</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L552"></a><tt class="py-lineno"> 552</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt id="link-276" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-276', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt id="link-277" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-277', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-278" class="py-name"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-278', 'IAB', 'link-19');">IAB</a></tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L553"></a><tt class="py-lineno"> 553</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-279" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-279', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-280" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-280', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">12</tt><tt class="py-op">)</tt> </tt>
-<a name="L554"></a><tt class="py-lineno"> 554</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt id="link-281" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-281', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt id="link-282" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-282', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L555"></a><tt class="py-lineno"> 555</tt> <tt class="py-line"> <tt class="py-name">usermask</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-283" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-283', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-number">36</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L556"></a><tt class="py-lineno"> 556</tt> <tt class="py-line"> <tt class="py-name">last_eui</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-284', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt class="py-name">usermask</tt> </tt>
-<a name="L557"></a><tt class="py-lineno"> 557</tt> <tt class="py-line"> <tt class="py-name">first_eui</tt> <tt class="py-op">=</tt> <tt class="py-name">last_eui</tt> <tt class="py-op">-</tt> <tt class="py-name">usermask</tt> </tt>
-<a name="L558"></a><tt class="py-lineno"> 558</tt> <tt class="py-line"> <tt class="py-name">iab_words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-285" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-285', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-286" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-286', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">first_eui</tt><tt class="py-op">)</tt> </tt>
-<a name="L559"></a><tt class="py-lineno"> 559</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">iab_words</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L560"></a><tt class="py-lineno"> 560</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L561"></a><tt class="py-lineno"> 561</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">"unsupported formatter callable: %r!"</tt> <tt class="py-op">%</tt> <tt id="link-287" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-287', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L562"></a><tt class="py-lineno"> 562</tt> <tt class="py-line"> </tt>
-<a name="EUI.eui64"></a><div id="EUI.eui64-def"><a name="L563"></a><tt class="py-lineno"> 563</tt> <a class="py-toggle" href="#" id="EUI.eui64-toggle" onclick="return toggle('EUI.eui64');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#eui64">eui64</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.eui64-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.eui64-expanded"><a name="L564"></a><tt class="py-lineno"> 564</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L565"></a><tt class="py-lineno"> 565</tt> <tt class="py-line"><tt class="py-docstring"> @return: The value of this EUI object as a new 64-bit EUI object.</tt> </tt>
-<a name="L566"></a><tt class="py-lineno"> 566</tt> <tt class="py-line"><tt class="py-docstring"> - If this object represents an EUI-48 it is converted to EUI-64</tt> </tt>
-<a name="L567"></a><tt class="py-lineno"> 567</tt> <tt class="py-line"><tt class="py-docstring"> as per the standard.</tt> </tt>
-<a name="L568"></a><tt class="py-lineno"> 568</tt> <tt class="py-line"><tt class="py-docstring"> - If this object is already and EUI-64, it just returns a new,</tt> </tt>
-<a name="L569"></a><tt class="py-lineno"> 569</tt> <tt class="py-line"><tt class="py-docstring"> numerically equivalent object is returned instead.</tt> </tt>
-<a name="L570"></a><tt class="py-lineno"> 570</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L571"></a><tt class="py-lineno"> 571</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-288', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-289" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-289', 'AT_LINK', 'link-6');">AT_LINK</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L572"></a><tt class="py-lineno"> 572</tt> <tt class="py-line"> <tt class="py-name">eui64_words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">'ff'</tt><tt class="py-op">,</tt> <tt class="py-string">'fe'</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> \ </tt>
-<a name="L573"></a><tt class="py-lineno"> 573</tt> <tt class="py-line"> <tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">:</tt><tt class="py-number">6</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L574"></a><tt class="py-lineno"> 574</tt> <tt class="py-line"> </tt>
-<a name="L575"></a><tt class="py-lineno"> 575</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">eui64_words</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L576"></a><tt class="py-lineno"> 576</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L577"></a><tt class="py-lineno"> 577</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-290" class="py-name"><a title="netaddr.address.EUI" class="py-name" href="#" onclick="return doclink('link-290', 'EUI', 'link-257');">EUI</a></tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L578"></a><tt class="py-lineno"> 578</tt> <tt class="py-line"> </tt>
-<a name="EUI.ipv6_link_local"></a><div id="EUI.ipv6_link_local-def"><a name="L579"></a><tt class="py-lineno"> 579</tt> <a class="py-toggle" href="#" id="EUI.ipv6_link_local-toggle" onclick="return toggle('EUI.ipv6_link_local');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#ipv6_link_local">ipv6_link_local</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.ipv6_link_local-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.ipv6_link_local-expanded"><a name="L580"></a><tt class="py-lineno"> 580</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L581"></a><tt class="py-lineno"> 581</tt> <tt class="py-line"><tt class="py-docstring"> @return: new link local IPv6 L{IP} object based on this L{EUI} using</tt> </tt>
-<a name="L582"></a><tt class="py-lineno"> 582</tt> <tt class="py-line"><tt class="py-docstring"> technique described in RFC 4291. B{Please Note:} this technique</tt> </tt>
-<a name="L583"></a><tt class="py-lineno"> 583</tt> <tt class="py-line"><tt class="py-docstring"> poses security risks in certain scenarios. Please read RFC 4941 for</tt> </tt>
-<a name="L584"></a><tt class="py-lineno"> 584</tt> <tt class="py-line"><tt class="py-docstring"> details. Reference: RFCs 4291 and 4941.</tt> </tt>
-<a name="L585"></a><tt class="py-lineno"> 585</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L586"></a><tt class="py-lineno"> 586</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-string">'fe80:0000:0000:0000:'</tt> </tt>
-<a name="L587"></a><tt class="py-lineno"> 587</tt> <tt class="py-line"> </tt>
-<a name="L588"></a><tt class="py-lineno"> 588</tt> <tt class="py-line"> <tt class="py-comment"># Add 2 to the first octet of this EUI address (temporarily).</tt> </tt>
-<a name="L589"></a><tt class="py-lineno"> 589</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">+=</tt> <tt class="py-number">2</tt> </tt>
-<a name="L590"></a><tt class="py-lineno"> 590</tt> <tt class="py-line"> </tt>
-<a name="L591"></a><tt class="py-lineno"> 591</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-291" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-291', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-292" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-292', 'AT_LINK', 'link-6');">AT_LINK</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L592"></a><tt class="py-lineno"> 592</tt> <tt class="py-line"> <tt class="py-comment"># Modify MAC to make it an EUI-64.</tt> </tt>
-<a name="L593"></a><tt class="py-lineno"> 593</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">3</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">'ff'</tt><tt class="py-op">,</tt> <tt class="py-string">'fe'</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> \ </tt>
-<a name="L594"></a><tt class="py-lineno"> 594</tt> <tt class="py-line"> <tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">3</tt><tt class="py-op">:</tt><tt class="py-number">6</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L595"></a><tt class="py-lineno"> 595</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L596"></a><tt class="py-lineno"> 596</tt> <tt class="py-line"> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%02x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L597"></a><tt class="py-lineno"> 597</tt> <tt class="py-line"> </tt>
-<a name="L598"></a><tt class="py-lineno"> 598</tt> <tt class="py-line"> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%02x%02x"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">x</tt> <tt class="py-keyword">in</tt> \ </tt>
-<a name="L599"></a><tt class="py-lineno"> 599</tt> <tt class="py-line"> <tt class="py-name">zip</tt><tt class="py-op">(</tt><tt class="py-name">suffix</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">suffix</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">:</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L600"></a><tt class="py-lineno"> 600</tt> <tt class="py-line"> </tt>
-<a name="L601"></a><tt class="py-lineno"> 601</tt> <tt class="py-line"> <tt class="py-comment"># Subtract 2 again to return EUI to its original value.</tt> </tt>
-<a name="L602"></a><tt class="py-lineno"> 602</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">-=</tt> <tt class="py-number">2</tt> </tt>
-<a name="L603"></a><tt class="py-lineno"> 603</tt> <tt class="py-line"> </tt>
-<a name="L604"></a><tt class="py-lineno"> 604</tt> <tt class="py-line"> <tt id="link-293" class="py-name" targets="Method netaddr.address.EUI.eui64()=netaddr.address.EUI-class.html#eui64"><a title="netaddr.address.EUI.eui64" class="py-name" href="#" onclick="return doclink('link-293', 'eui64', 'link-293');">eui64</a></tt> <tt class="py-op">=</tt> <tt class="py-string">':'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">suffix</tt><tt class="py-op">)</tt> </tt>
-<a name="L605"></a><tt class="py-lineno"> 605</tt> <tt class="py-line"> <tt class="py-name">addr</tt> <tt class="py-op">=</tt> <tt class="py-name">prefix</tt> <tt class="py-op">+</tt> <tt id="link-294" class="py-name"><a title="netaddr.address.EUI.eui64" class="py-name" href="#" onclick="return doclink('link-294', 'eui64', 'link-293');">eui64</a></tt> </tt>
-<a name="L606"></a><tt class="py-lineno"> 606</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-295" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-295', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L607"></a><tt class="py-lineno"> 607</tt> <tt class="py-line"> </tt>
-<a name="EUI.info"></a><div id="EUI.info-def"><a name="L608"></a><tt class="py-lineno"> 608</tt> <a class="py-toggle" href="#" id="EUI.info-toggle" onclick="return toggle('EUI.info');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.EUI-class.html#info">info</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI.info-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="EUI.info-expanded"><a name="L609"></a><tt class="py-lineno"> 609</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L610"></a><tt class="py-lineno"> 610</tt> <tt class="py-line"><tt class="py-docstring"> @return: A record dict containing IEEE registration details for this</tt> </tt>
-<a name="L611"></a><tt class="py-lineno"> 611</tt> <tt class="py-line"><tt class="py-docstring"> EUI (MAC-48) if available, None otherwise.</tt> </tt>
-<a name="L612"></a><tt class="py-lineno"> 612</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L613"></a><tt class="py-lineno"> 613</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-string">'OUI'</tt><tt class="py-op">:</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-296" class="py-name" targets="Method netaddr.address.EUI.oui()=netaddr.address.EUI-class.html#oui"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-296', 'oui', 'link-296');">oui</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-297" class="py-name" targets="Method netaddr.eui.IAB.registration()=netaddr.eui.IAB-class.html#registration,Method netaddr.eui.OUI.registration()=netaddr.eui.OUI-class.html#registration"><a title="netaddr.eui.IAB.registration
-netaddr.eui.OUI.registration" class="py-name" href="#" onclick="return doclink('link-297', 'registration', 'link-297');">registration</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">}</tt> </tt>
-<a name="L614"></a><tt class="py-lineno"> 614</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="netaddr.address.EUI.isiab" class="py-name" href="#" onclick="return doclink('link-298', 'isiab', 'link-275');">isiab</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L615"></a><tt class="py-lineno"> 615</tt> <tt class="py-line"> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-string">'IAB'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-299" class="py-name" targets="Method netaddr.address.EUI.iab()=netaddr.address.EUI-class.html#iab"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-299', 'iab', 'link-299');">iab</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-300" class="py-name"><a title="netaddr.eui.IAB.registration
-netaddr.eui.OUI.registration" class="py-name" href="#" onclick="return doclink('link-300', 'registration', 'link-297');">registration</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L616"></a><tt class="py-lineno"> 616</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">data</tt> </tt>
-</div></div><a name="L617"></a><tt class="py-lineno"> 617</tt> <tt class="py-line"> </tt>
-<a name="L618"></a><tt class="py-lineno"> 618</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IP"></a><div id="IP-def"><a name="L619"></a><tt class="py-lineno"> 619</tt> <a class="py-toggle" href="#" id="IP-toggle" onclick="return toggle('IP');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.IP-class.html">IP</a><tt class="py-op">(</tt><tt class="py-base-class">Addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="IP-expanded"><a name="L620"></a><tt class="py-lineno"> 620</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L621"></a><tt class="py-lineno"> 621</tt> <tt class="py-line"><tt class="py-docstring"> Represents B{individual} IPv4 and IPv6 addresses.</tt> </tt>
-<a name="L622"></a><tt class="py-lineno"> 622</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L623"></a><tt class="py-lineno"> 623</tt> <tt class="py-line"><tt class="py-docstring"> B{Please Note:} this class is intended to provide low-level functionality</tt> </tt>
-<a name="L624"></a><tt class="py-lineno"> 624</tt> <tt class="py-line"><tt class="py-docstring"> to individual IP addresses such as octet/hextet access, integer/hex/binary</tt> </tt>
-<a name="L625"></a><tt class="py-lineno"> 625</tt> <tt class="py-line"><tt class="py-docstring"> conversions, etc. If you are coming from other libraries you may expect to</tt> </tt>
-<a name="L626"></a><tt class="py-lineno"> 626</tt> <tt class="py-line"><tt class="py-docstring"> find much higher level networking operations here. While the inclusion of</tt> </tt>
-<a name="L627"></a><tt class="py-lineno"> 627</tt> <tt class="py-line"><tt class="py-docstring"> a bitmask prefix or netmask to indicate subnet membership is permitted by</tt> </tt>
-<a name="L628"></a><tt class="py-lineno"> 628</tt> <tt class="py-line"><tt class="py-docstring"> the class constructor they are provided only as a convenience to the user.</tt> </tt>
-<a name="L629"></a><tt class="py-lineno"> 629</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L630"></a><tt class="py-lineno"> 630</tt> <tt class="py-line"><tt class="py-docstring"> All higher level subnet and network operations can be found in objects of</tt> </tt>
-<a name="L631"></a><tt class="py-lineno"> 631</tt> <tt class="py-line"><tt class="py-docstring"> classes L{CIDR}, L{IPRange} and L{Wildcard}. There are handy helper methods</tt> </tt>
-<a name="L632"></a><tt class="py-lineno"> 632</tt> <tt class="py-line"><tt class="py-docstring"> here, (C{.cidr()}, C{.iprange()} and C{.wildcard()}) that return pre-initialised</tt> </tt>
-<a name="L633"></a><tt class="py-lineno"> 633</tt> <tt class="py-line"><tt class="py-docstring"> objects of those classes without you having to call them explicitly.</tt> </tt>
-<a name="L634"></a><tt class="py-lineno"> 634</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L635"></a><tt class="py-lineno"> 635</tt> <tt class="py-line"><tt class="py-docstring"> Example usage ::</tt> </tt>
-<a name="L636"></a><tt class="py-lineno"> 636</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L637"></a><tt class="py-lineno"> 637</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; ip = IP('10.0.0.1')</tt> </tt>
-<a name="L638"></a><tt class="py-lineno"> 638</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; list(ip) == [10, 0, 0, 1]</tt> </tt>
-<a name="L639"></a><tt class="py-lineno"> 639</tt> <tt class="py-line"><tt class="py-docstring"> True</tt> </tt>
-<a name="L640"></a><tt class="py-lineno"> 640</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; ip += 1</tt> </tt>
-<a name="L641"></a><tt class="py-lineno"> 641</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; str(ip) == '10.0.0.2'</tt> </tt>
-<a name="L642"></a><tt class="py-lineno"> 642</tt> <tt class="py-line"><tt class="py-docstring"> True</tt> </tt>
-<a name="L643"></a><tt class="py-lineno"> 643</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L644"></a><tt class="py-lineno"> 644</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; IP('10.0.0.0/28').iprange()</tt> </tt>
-<a name="L645"></a><tt class="py-lineno"> 645</tt> <tt class="py-line"><tt class="py-docstring"> IPRange('10.0.0.0', '10.0.0.15')</tt> </tt>
-<a name="L646"></a><tt class="py-lineno"> 646</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L647"></a><tt class="py-lineno"> 647</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; IP('10.0.0.64/24').cidr()</tt> </tt>
-<a name="L648"></a><tt class="py-lineno"> 648</tt> <tt class="py-line"><tt class="py-docstring"> CIDR('10.0.0.0/24')</tt> </tt>
-<a name="L649"></a><tt class="py-lineno"> 649</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L650"></a><tt class="py-lineno"> 650</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; IP('192.168.0.1/255.255.253.0').wildcard()</tt> </tt>
-<a name="L651"></a><tt class="py-lineno"> 651</tt> <tt class="py-line"><tt class="py-docstring"> Wildcard('192.168.0-1.*')</tt> </tt>
-<a name="L652"></a><tt class="py-lineno"> 652</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L653"></a><tt class="py-lineno"> 653</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; ipv6 = IP('fe80::20f:1fff:fe12:e733')</tt> </tt>
-<a name="L654"></a><tt class="py-lineno"> 654</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; ipv6[0:4]</tt> </tt>
-<a name="L655"></a><tt class="py-lineno"> 655</tt> <tt class="py-line"><tt class="py-docstring"> [65152, 0, 0, 0]</tt> </tt>
-<a name="L656"></a><tt class="py-lineno"> 656</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L657"></a><tt class="py-lineno"> 657</tt> <tt class="py-line"><tt class="py-docstring"> &gt;&gt;&gt; IP('fe80::20f:1fff:fe12:e733/64').cidr()</tt> </tt>
-<a name="L658"></a><tt class="py-lineno"> 658</tt> <tt class="py-line"><tt class="py-docstring"> CIDR('fe80::/64')</tt> </tt>
-<a name="L659"></a><tt class="py-lineno"> 659</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L660"></a><tt class="py-lineno"> 660</tt> <tt class="py-line"><tt class="py-docstring"> See those classes for details on the functionality they provide.</tt> </tt>
-<a name="L661"></a><tt class="py-lineno"> 661</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L662"></a><tt class="py-lineno"> 662</tt> <tt class="py-line"> <tt id="link-301" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-301', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-302" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-302', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-303" class="py-name"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-303', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L663"></a><tt class="py-lineno"> 663</tt> <tt class="py-line"> <tt id="link-304" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-304', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-305" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-305', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-306" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-306', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-307" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-307', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L664"></a><tt class="py-lineno"> 664</tt> <tt class="py-line"> <tt id="link-308" class="py-name" targets="Variable netaddr.address.IP.TRANSLATE_STR=netaddr.address.IP-class.html#TRANSLATE_STR"><a title="netaddr.address.IP.TRANSLATE_STR" class="py-name" href="#" onclick="return doclink('link-308', 'TRANSLATE_STR', 'link-308');">TRANSLATE_STR</a></tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">chr</tt><tt class="py-op">(</tt><tt id="link-309" class="py-name" targets="Variable netaddr.address.IP._=netaddr.address.IP-class.html#_,Variable netaddr.strategy.EUI48Strategy._=netaddr.strategy.EUI48Strategy-class.html#_"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-309', '_', 'link-309');">_</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-310" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-310', '_', 'link-309');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">256</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> <tt class="py-comment">#FIXME: replace this</tt> </tt>
-<a name="L665"></a><tt class="py-lineno"> 665</tt> <tt class="py-line"> </tt>
-<a name="L666"></a><tt class="py-lineno"> 666</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L667"></a><tt class="py-lineno"> 667</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-311" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-311', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-312" class="py-name"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-312', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-313" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-313', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L668"></a><tt class="py-lineno"> 668</tt> <tt class="py-line"> <tt id="link-314" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-314', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-315" class="py-name"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-315', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-316" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-316', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L669"></a><tt class="py-lineno"> 669</tt> <tt class="py-line"> <tt id="link-317" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-317', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-318" class="py-name" targets="Class netaddr.address.PrefixLenDescriptor=netaddr.address.PrefixLenDescriptor-class.html"><a title="netaddr.address.PrefixLenDescriptor" class="py-name" href="#" onclick="return doclink('link-318', 'PrefixLenDescriptor', 'link-318');">PrefixLenDescriptor</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L670"></a><tt class="py-lineno"> 670</tt> <tt class="py-line"> </tt>
-<a name="IP.__init__"></a><div id="IP.__init__-def"><a name="L671"></a><tt class="py-lineno"> 671</tt> <a class="py-toggle" href="#" id="IP.__init__-toggle" onclick="return toggle('IP.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">,</tt> <tt class="py-param">addr_type</tt><tt class="py-op">=</tt><tt id="link-319" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-319', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.__init__-expanded"><a name="L672"></a><tt class="py-lineno"> 672</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L673"></a><tt class="py-lineno"> 673</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L674"></a><tt class="py-lineno"> 674</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L675"></a><tt class="py-lineno"> 675</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: an IPv4 or IPv6 address string with an optional subnet</tt> </tt>
-<a name="L676"></a><tt class="py-lineno"> 676</tt> <tt class="py-line"><tt class="py-docstring"> prefix or a network byte order integer.</tt> </tt>
-<a name="L677"></a><tt class="py-lineno"> 677</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L678"></a><tt class="py-lineno"> 678</tt> <tt class="py-line"><tt class="py-docstring"> @param addr_type: (optional) the IP address type (C{AT_INET} or</tt> </tt>
-<a name="L679"></a><tt class="py-lineno"> 679</tt> <tt class="py-line"><tt class="py-docstring"> C{AT_INET6}). If L{addr} is an integer, this argument is mandatory.</tt> </tt>
-<a name="L680"></a><tt class="py-lineno"> 680</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L681"></a><tt class="py-lineno"> 681</tt> <tt class="py-line"> <tt id="link-320" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-320', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L682"></a><tt class="py-lineno"> 682</tt> <tt class="py-line"> <tt class="py-comment"># Check for prefix in address and split it out.</tt> </tt>
-<a name="L683"></a><tt class="py-lineno"> 683</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L684"></a><tt class="py-lineno"> 684</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'/'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L685"></a><tt class="py-lineno"> 685</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt id="link-321" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-321', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L686"></a><tt class="py-lineno"> 686</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L687"></a><tt class="py-lineno"> 687</tt> <tt class="py-line"> <tt class="py-comment"># addr is an int - let it pass through.</tt> </tt>
-<a name="L688"></a><tt class="py-lineno"> 688</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">pass</tt> </tt>
-<a name="L689"></a><tt class="py-lineno"> 689</tt> <tt class="py-line"> </tt>
-<a name="L690"></a><tt class="py-lineno"> 690</tt> <tt class="py-line"> <tt class="py-comment"># Call superclass constructor before processing subnet prefix to</tt> </tt>
-<a name="L691"></a><tt class="py-lineno"> 691</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># assign the strategyn object.</tt> </tt>
-<a name="L692"></a><tt class="py-lineno"> 692</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-322" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-322', 'IP', 'link-76');">IP</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-323" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-323', '__init__', 'link-258');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt id="link-324" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-324', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L693"></a><tt class="py-lineno"> 693</tt> <tt class="py-line"> </tt>
-<a name="L694"></a><tt class="py-lineno"> 694</tt> <tt class="py-line"> <tt class="py-comment"># Set the subnet prefix.</tt> </tt>
-<a name="L695"></a><tt class="py-lineno"> 695</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt id="link-325" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-325', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L696"></a><tt class="py-lineno"> 696</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">[</tt><tt class="py-string">'prefixlen'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-326" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-326', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> </tt>
-<a name="L697"></a><tt class="py-lineno"> 697</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L698"></a><tt class="py-lineno"> 698</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-327" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-327', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-328" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-328', 'prefixlen', 'link-73');">prefixlen</a></tt> </tt>
-</div><a name="L699"></a><tt class="py-lineno"> 699</tt> <tt class="py-line"> </tt>
-<a name="IP.is_netmask"></a><div id="IP.is_netmask-def"><a name="L700"></a><tt class="py-lineno"> 700</tt> <a class="py-toggle" href="#" id="IP.is_netmask-toggle" onclick="return toggle('IP.is_netmask');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_netmask">is_netmask</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_netmask-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_netmask-expanded"><a name="L701"></a><tt class="py-lineno"> 701</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L702"></a><tt class="py-lineno"> 702</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this addr is a mask that would return a host id,</tt> </tt>
-<a name="L703"></a><tt class="py-lineno"> 703</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L704"></a><tt class="py-lineno"> 704</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L705"></a><tt class="py-lineno"> 705</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-329" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-329', 'value', 'link-30');">value</a></tt> <tt class="py-op">^</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-330" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-330', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
-<a name="L706"></a><tt class="py-lineno"> 706</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt class="py-name">int_val</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L707"></a><tt class="py-lineno"> 707</tt> <tt class="py-line"> </tt>
-<a name="IP.netmask_bits"></a><div id="IP.netmask_bits-def"><a name="L708"></a><tt class="py-lineno"> 708</tt> <a class="py-toggle" href="#" id="IP.netmask_bits-toggle" onclick="return toggle('IP.netmask_bits');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#netmask_bits">netmask_bits</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-comment">#FIXME: replace this</tt> </tt>
-</div><a name="L709"></a><tt class="py-lineno"> 709</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L710"></a><tt class="py-lineno"> 710</tt> <tt class="py-line"><tt class="py-docstring"> @return: If this address is a valid netmask, the number of non-zero</tt> </tt>
-<a name="L711"></a><tt class="py-lineno"> 711</tt> <tt class="py-line"><tt class="py-docstring"> bits are returned, otherwise it returns the width in bits for</tt> </tt>
-<a name="L712"></a><tt class="py-lineno"> 712</tt> <tt class="py-line"><tt class="py-docstring"> based on the version, 32 for IPv4 and 128 for IPv6.</tt> </tt>
-<a name="L713"></a><tt class="py-lineno"> 713</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L714"></a><tt class="py-lineno"> 714</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-331" class="py-name"><a title="netaddr.address.IP.is_netmask" class="py-name" href="#" onclick="return doclink('link-331', 'is_netmask', 'link-82');">is_netmask</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L715"></a><tt class="py-lineno"> 715</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-332" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-332', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> </tt>
-<a name="L716"></a><tt class="py-lineno"> 716</tt> <tt class="py-line"> </tt>
-<a name="L717"></a><tt class="py-lineno"> 717</tt> <tt class="py-line"> <tt id="link-333" class="py-name" targets="Method netaddr.address.Addr.bits()=netaddr.address.Addr-class.html#bits"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-333', 'bits', 'link-333');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-334" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-334', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-335" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_bits" class="py-name" href="#" onclick="return doclink('link-335', 'int_to_bits', 'link-159');">int_to_bits</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-336" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-336', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L718"></a><tt class="py-lineno"> 718</tt> <tt class="py-line"> <tt class="py-name">mask_bits</tt> <tt class="py-op">=</tt> <tt id="link-337" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-337', 'bits', 'link-333');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">translate</tt><tt class="py-op">(</tt><tt id="link-338" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-338', 'IP', 'link-76');">IP</a></tt><tt class="py-op">.</tt><tt id="link-339" class="py-name"><a title="netaddr.address.IP.TRANSLATE_STR" class="py-name" href="#" onclick="return doclink('link-339', 'TRANSLATE_STR', 'link-308');">TRANSLATE_STR</a></tt><tt class="py-op">,</tt> <tt class="py-string">':.0'</tt><tt class="py-op">)</tt> </tt>
-<a name="L719"></a><tt class="py-lineno"> 719</tt> <tt class="py-line"> <tt class="py-name">mask_length</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">mask_bits</tt><tt class="py-op">)</tt> </tt>
-<a name="L720"></a><tt class="py-lineno"> 720</tt> <tt class="py-line"> </tt>
-<a name="L721"></a><tt class="py-lineno"> 721</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">1</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">mask_length</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-340" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-340', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L722"></a><tt class="py-lineno"> 722</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'Unexpected mask length %d for address type!'</tt> \ </tt>
-<a name="L723"></a><tt class="py-lineno"> 723</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">mask_length</tt><tt class="py-op">)</tt> </tt>
-<a name="L724"></a><tt class="py-lineno"> 724</tt> <tt class="py-line"> </tt>
-<a name="L725"></a><tt class="py-lineno"> 725</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">mask_length</tt> </tt>
-</div><a name="L726"></a><tt class="py-lineno"> 726</tt> <tt class="py-line"> </tt>
-<a name="IP.reverse_dns"></a><div id="IP.reverse_dns-def"><a name="L727"></a><tt class="py-lineno"> 727</tt> <a class="py-toggle" href="#" id="IP.reverse_dns-toggle" onclick="return toggle('IP.reverse_dns');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#reverse_dns">reverse_dns</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.reverse_dns-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.reverse_dns-expanded"><a name="L728"></a><tt class="py-lineno"> 728</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The reverse DNS lookup string for this IP address"""</tt> </tt>
-<a name="L729"></a><tt class="py-lineno"> 729</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-341" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-341', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-342" class="py-name" targets="Method netaddr.strategy.IPv4StrategyStd.int_to_arpa()=netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa,Method netaddr.strategy.IPv6Strategy.int_to_arpa()=netaddr.strategy.IPv6Strategy-class.html#int_to_arpa"><a title="netaddr.strategy.IPv4StrategyStd.int_to_arpa
-netaddr.strategy.IPv6Strategy.int_to_arpa" class="py-name" href="#" onclick="return doclink('link-342', 'int_to_arpa', 'link-342');">int_to_arpa</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-343" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-343', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L730"></a><tt class="py-lineno"> 730</tt> <tt class="py-line"> </tt>
-<a name="IP.is_hostmask"></a><div id="IP.is_hostmask-def"><a name="L731"></a><tt class="py-lineno"> 731</tt> <a class="py-toggle" href="#" id="IP.is_hostmask-toggle" onclick="return toggle('IP.is_hostmask');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_hostmask">is_hostmask</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_hostmask-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_hostmask-expanded"><a name="L732"></a><tt class="py-lineno"> 732</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L733"></a><tt class="py-lineno"> 733</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this address is a mask that would return a host</tt> </tt>
-<a name="L734"></a><tt class="py-lineno"> 734</tt> <tt class="py-line"><tt class="py-docstring"> id, C{False} otherwise.</tt> </tt>
-<a name="L735"></a><tt class="py-lineno"> 735</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L736"></a><tt class="py-lineno"> 736</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-344" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-344', 'value', 'link-30');">value</a></tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
-<a name="L737"></a><tt class="py-lineno"> 737</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L738"></a><tt class="py-lineno"> 738</tt> <tt class="py-line"> </tt>
-<a name="IP.hostname"></a><div id="IP.hostname-def"><a name="L739"></a><tt class="py-lineno"> 739</tt> <a class="py-toggle" href="#" id="IP.hostname-toggle" onclick="return toggle('IP.hostname');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#hostname">hostname</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.hostname-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.hostname-expanded"><a name="L740"></a><tt class="py-lineno"> 740</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L741"></a><tt class="py-lineno"> 741</tt> <tt class="py-line"><tt class="py-docstring"> @return: Returns the FQDN for this IP address via a DNS query</tt> </tt>
-<a name="L742"></a><tt class="py-lineno"> 742</tt> <tt class="py-line"><tt class="py-docstring"> using gethostbyaddr() Python's socket module.</tt> </tt>
-<a name="L743"></a><tt class="py-lineno"> 743</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L744"></a><tt class="py-lineno"> 744</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L745"></a><tt class="py-lineno"> 745</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">gethostbyaddr</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L746"></a><tt class="py-lineno"> 746</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L747"></a><tt class="py-lineno"> 747</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-</div><a name="L748"></a><tt class="py-lineno"> 748</tt> <tt class="py-line"> </tt>
-<a name="IP.cidr"></a><div id="IP.cidr-def"><a name="L749"></a><tt class="py-lineno"> 749</tt> <a class="py-toggle" href="#" id="IP.cidr-toggle" onclick="return toggle('IP.cidr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#cidr">cidr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.cidr-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.cidr-expanded"><a name="L750"></a><tt class="py-lineno"> 750</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: A L{CIDR} object based on this IP address"""</tt> </tt>
-<a name="L751"></a><tt class="py-lineno"> 751</tt> <tt class="py-line"> <tt id="link-345" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-345', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-346" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-346', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-347" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-347', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L752"></a><tt class="py-lineno"> 752</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-348" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-348', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt id="link-349" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-349', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-350" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-350', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L753"></a><tt class="py-lineno"> 753</tt> <tt class="py-line"> <tt id="link-351" class="py-name" targets="Variable netaddr.address.CIDR.network=netaddr.address.CIDR-class.html#network"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-351', 'network', 'link-351');">network</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-352" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-352', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-353" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-353', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
-<a name="L754"></a><tt class="py-lineno"> 754</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-354" class="py-name" targets="Class netaddr.address.CIDR=netaddr.address.CIDR-class.html"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-354', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">"%s/%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-355" class="py-name"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-355', 'network', 'link-351');">network</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-356" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-356', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L755"></a><tt class="py-lineno"> 755</tt> <tt class="py-line"> </tt>
-<a name="IP.wildcard"></a><div id="IP.wildcard-def"><a name="L756"></a><tt class="py-lineno"> 756</tt> <a class="py-toggle" href="#" id="IP.wildcard-toggle" onclick="return toggle('IP.wildcard');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#wildcard">wildcard</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.wildcard-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.wildcard-expanded"><a name="L757"></a><tt class="py-lineno"> 757</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: A L{Wildcard} object based on this IP address"""</tt> </tt>
-<a name="L758"></a><tt class="py-lineno"> 758</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-357" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-357', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-358" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-358', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L759"></a><tt class="py-lineno"> 759</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-359" class="py-name"><a title="netaddr.AddrConversionError" class="py-name" href="#" onclick="return doclink('link-359', 'AddrConversionError', 'link-2');">AddrConversionError</a></tt><tt class="py-op">(</tt><tt class="py-string">'wildcards not support by IPv6!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L760"></a><tt class="py-lineno"> 760</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-360" class="py-name" targets="Method netaddr.address.IP.iprange()=netaddr.address.IP-class.html#iprange,Method netaddr.address.IPRange.iprange()=netaddr.address.IPRange-class.html#iprange"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-360', 'iprange', 'link-360');">iprange</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-361" class="py-name" targets="Method netaddr.address.IP.wildcard()=netaddr.address.IP-class.html#wildcard,Method netaddr.address.IPRange.wildcard()=netaddr.address.IPRange-class.html#wildcard"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-361', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L761"></a><tt class="py-lineno"> 761</tt> <tt class="py-line"> </tt>
-<a name="IP.iprange"></a><div id="IP.iprange-def"><a name="L762"></a><tt class="py-lineno"> 762</tt> <a class="py-toggle" href="#" id="IP.iprange-toggle" onclick="return toggle('IP.iprange');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#iprange">iprange</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.iprange-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.iprange-expanded"><a name="L763"></a><tt class="py-lineno"> 763</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: A L{CIDR} object based on this IP address"""</tt> </tt>
-<a name="L764"></a><tt class="py-lineno"> 764</tt> <tt class="py-line"> <tt id="link-362" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-362', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-363" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-363', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-364" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-364', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L765"></a><tt class="py-lineno"> 765</tt> <tt class="py-line"> <tt id="link-365" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-365', 'netmask', 'link-88');">netmask</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-366" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-366', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">^</tt> <tt id="link-367" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-367', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L766"></a><tt class="py-lineno"> 766</tt> <tt class="py-line"> <tt id="link-368" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-368', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-369" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-369', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt id="link-370" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-370', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-371" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-371', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L767"></a><tt class="py-lineno"> 767</tt> <tt class="py-line"> <tt id="link-372" class="py-name" targets="Variable netaddr.address.IPRange.last=netaddr.address.IPRange-class.html#last"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-372', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt id="link-373" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-373', 'first', 'link-110');">first</a></tt> <tt class="py-op">|</tt> <tt id="link-374" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-374', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L768"></a><tt class="py-lineno"> 768</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-375" class="py-name" targets="Class netaddr.address.IPRange=netaddr.address.IPRange-class.html"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-375', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-376" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-376', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-377" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-377', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt id="link-378" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-378', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L769"></a><tt class="py-lineno"> 769</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-379" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-379', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-380" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-380', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt id="link-381" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-381', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L770"></a><tt class="py-lineno"> 770</tt> <tt class="py-line"> </tt>
-<a name="IP.ipv4"></a><div id="IP.ipv4-def"><a name="L771"></a><tt class="py-lineno"> 771</tt> <a class="py-toggle" href="#" id="IP.ipv4-toggle" onclick="return toggle('IP.ipv4');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#ipv4">ipv4</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.ipv4-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.ipv4-expanded"><a name="L772"></a><tt class="py-lineno"> 772</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L773"></a><tt class="py-lineno"> 773</tt> <tt class="py-line"><tt class="py-docstring"> @return: A new version 4 L{IP} object numerically equivalent this</tt> </tt>
-<a name="L774"></a><tt class="py-lineno"> 774</tt> <tt class="py-line"><tt class="py-docstring"> address. If this object is already IPv4 then a copy is returned. If</tt> </tt>
-<a name="L775"></a><tt class="py-lineno"> 775</tt> <tt class="py-line"><tt class="py-docstring"> this object is IPv6 and its value is compatible with IPv4, a new IPv4</tt> </tt>
-<a name="L776"></a><tt class="py-lineno"> 776</tt> <tt class="py-line"><tt class="py-docstring"> L{IP} object is returned.</tt> </tt>
-<a name="L777"></a><tt class="py-lineno"> 777</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L778"></a><tt class="py-lineno"> 778</tt> <tt class="py-line"><tt class="py-docstring"> Raises an L{AddrConversionError} is IPv6 address cannot be converted.</tt> </tt>
-<a name="L779"></a><tt class="py-lineno"> 779</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L780"></a><tt class="py-lineno"> 780</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L781"></a><tt class="py-lineno"> 781</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-382" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-382', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-383" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-383', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L782"></a><tt class="py-lineno"> 782</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt id="link-384" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-384', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-385" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-385', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt id="link-386" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-386', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L783"></a><tt class="py-lineno"> 783</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-387" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-387', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-388" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-388', 'prefixlen', 'link-73');">prefixlen</a></tt> </tt>
-<a name="L784"></a><tt class="py-lineno"> 784</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-389" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-389', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-390" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-390', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L785"></a><tt class="py-lineno"> 785</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-391" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-391', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-392" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-392', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-393" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-393', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L786"></a><tt class="py-lineno"> 786</tt> <tt class="py-line"> <tt class="py-comment">#TODO: Replace these with bit shifts.</tt> </tt>
-<a name="L787"></a><tt class="py-lineno"> 787</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L788"></a><tt class="py-lineno"> 788</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt id="link-394" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-394', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-395" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-395', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt id="link-396" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-396', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L789"></a><tt class="py-lineno"> 789</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-397" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-397', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-398" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-398', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">-</tt> <tt class="py-number">96</tt> </tt>
-<a name="L790"></a><tt class="py-lineno"> 790</tt> <tt class="py-line"> <tt class="py-comment">#TODO: Replace these with bit shifts.</tt> </tt>
-<a name="L791"></a><tt class="py-lineno"> 791</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">elif</tt> <tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">6</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">0xffff</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L792"></a><tt class="py-lineno"> 792</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt id="link-399" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-399', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-400" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-400', 'value', 'link-30');">value</a></tt> <tt class="py-op">-</tt> <tt class="py-number">0xffff00000000</tt><tt class="py-op">,</tt> <tt id="link-401" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-401', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L793"></a><tt class="py-lineno"> 793</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-402" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-402', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-403" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-403', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">-</tt> <tt class="py-number">96</tt> </tt>
-<a name="L794"></a><tt class="py-lineno"> 794</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L795"></a><tt class="py-lineno"> 795</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-404" class="py-name"><a title="netaddr.AddrConversionError" class="py-name" href="#" onclick="return doclink('link-404', 'AddrConversionError', 'link-2');">AddrConversionError</a></tt><tt class="py-op">(</tt><tt class="py-string">'IPv6 address %s not suitable for'</tt> \ </tt>
-<a name="L796"></a><tt class="py-lineno"> 796</tt> <tt class="py-line"> <tt class="py-string">'IPv4 conversion!'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L797"></a><tt class="py-lineno"> 797</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ip_addr</tt> </tt>
-</div><a name="L798"></a><tt class="py-lineno"> 798</tt> <tt class="py-line"> </tt>
-<a name="IP.ipv6"></a><div id="IP.ipv6-def"><a name="L799"></a><tt class="py-lineno"> 799</tt> <a class="py-toggle" href="#" id="IP.ipv6-toggle" onclick="return toggle('IP.ipv6');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#ipv6">ipv6</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">ipv4_compatible</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.ipv6-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.ipv6-expanded"><a name="L800"></a><tt class="py-lineno"> 800</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L801"></a><tt class="py-lineno"> 801</tt> <tt class="py-line"><tt class="py-docstring"> B{Please Note:} the IPv4-Mapped IPv6 address format is now considered</tt> </tt>
-<a name="L802"></a><tt class="py-lineno"> 802</tt> <tt class="py-line"><tt class="py-docstring"> deprecated. Reference: RFC 4291</tt> </tt>
-<a name="L803"></a><tt class="py-lineno"> 803</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L804"></a><tt class="py-lineno"> 804</tt> <tt class="py-line"><tt class="py-docstring"> @param ipv4_compatible: If C{True} returns an IPv4-Mapped address</tt> </tt>
-<a name="L805"></a><tt class="py-lineno"> 805</tt> <tt class="py-line"><tt class="py-docstring"> (::ffff:x.x.x.x), an IPv4-Compatible (::x.x.x.x) address</tt> </tt>
-<a name="L806"></a><tt class="py-lineno"> 806</tt> <tt class="py-line"><tt class="py-docstring"> otherwise. Default: False (IPv4-Mapped).</tt> </tt>
-<a name="L807"></a><tt class="py-lineno"> 807</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L808"></a><tt class="py-lineno"> 808</tt> <tt class="py-line"><tt class="py-docstring"> @return: A new L{IP} version 6 object that is numerically equivalent</tt> </tt>
-<a name="L809"></a><tt class="py-lineno"> 809</tt> <tt class="py-line"><tt class="py-docstring"> this address. If this object is already IPv6 then a copy of this</tt> </tt>
-<a name="L810"></a><tt class="py-lineno"> 810</tt> <tt class="py-line"><tt class="py-docstring"> object is returned. If this object is IPv4, a new version 6 L{IP}</tt> </tt>
-<a name="L811"></a><tt class="py-lineno"> 811</tt> <tt class="py-line"><tt class="py-docstring"> object is returned.</tt> </tt>
-<a name="L812"></a><tt class="py-lineno"> 812</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L813"></a><tt class="py-lineno"> 813</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L814"></a><tt class="py-lineno"> 814</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-405" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-405', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-406" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-406', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L815"></a><tt class="py-lineno"> 815</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt id="link-407" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-407', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-408" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-408', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt id="link-409" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-409', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L816"></a><tt class="py-lineno"> 816</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-410" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-410', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-411" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-411', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">-</tt> <tt class="py-number">96</tt> </tt>
-<a name="L817"></a><tt class="py-lineno"> 817</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-412" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-412', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-413" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-413', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L818"></a><tt class="py-lineno"> 818</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt> <tt class="py-op">=</tt> <tt id="link-414" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-414', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-415" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-415', 'value', 'link-30');">value</a></tt><tt class="py-op">,</tt> <tt id="link-416" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-416', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L819"></a><tt class="py-lineno"> 819</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ipv4_compatible</tt><tt class="py-op">:</tt> </tt>
-<a name="L820"></a><tt class="py-lineno"> 820</tt> <tt class="py-line"> <tt class="py-comment"># IPv4-Compatible IPv6 address</tt> </tt>
-<a name="L821"></a><tt class="py-lineno"> 821</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">ip_addr</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L822"></a><tt class="py-lineno"> 822</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L823"></a><tt class="py-lineno"> 823</tt> <tt class="py-line"> <tt class="py-comment"># IPv4-Mapped IPv6 address</tt> </tt>
-<a name="L824"></a><tt class="py-lineno"> 824</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">ip_addr</tt><tt class="py-op">[</tt><tt class="py-number">5</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-number">0xffff</tt> </tt>
-<a name="L825"></a><tt class="py-lineno"> 825</tt> <tt class="py-line"> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-417" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-417', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-418" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-418', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">+</tt> <tt class="py-number">96</tt> </tt>
-<a name="L826"></a><tt class="py-lineno"> 826</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ip_addr</tt> </tt>
-</div><a name="L827"></a><tt class="py-lineno"> 827</tt> <tt class="py-line"> </tt>
-<a name="IP.is_unicast"></a><div id="IP.is_unicast-def"><a name="L828"></a><tt class="py-lineno"> 828</tt> <a class="py-toggle" href="#" id="IP.is_unicast-toggle" onclick="return toggle('IP.is_unicast');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_unicast">is_unicast</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_unicast-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_unicast-expanded"><a name="L829"></a><tt class="py-lineno"> 829</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: C{True} if this IP is unicast, C{False} otherwise"""</tt> </tt>
-<a name="L830"></a><tt class="py-lineno"> 830</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-419" class="py-name" targets="Method netaddr.address.IP.is_multicast()=netaddr.address.IP-class.html#is_multicast"><a title="netaddr.address.IP.is_multicast" class="py-name" href="#" onclick="return doclink('link-419', 'is_multicast', 'link-419');">is_multicast</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L831"></a><tt class="py-lineno"> 831</tt> <tt class="py-line"> </tt>
-<a name="IP.is_loopback"></a><div id="IP.is_loopback-def"><a name="L832"></a><tt class="py-lineno"> 832</tt> <a class="py-toggle" href="#" id="IP.is_loopback-toggle" onclick="return toggle('IP.is_loopback');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_loopback">is_loopback</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_loopback-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_loopback-expanded"><a name="L833"></a><tt class="py-lineno"> 833</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L834"></a><tt class="py-lineno"> 834</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is loopback address (not for network</tt> </tt>
-<a name="L835"></a><tt class="py-lineno"> 835</tt> <tt class="py-line"><tt class="py-docstring"> transmission), C{False} otherwise.</tt> </tt>
-<a name="L836"></a><tt class="py-lineno"> 836</tt> <tt class="py-line"><tt class="py-docstring"> References: RFC 3330 and 4291.</tt> </tt>
-<a name="L837"></a><tt class="py-lineno"> 837</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L838"></a><tt class="py-lineno"> 838</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-420" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-420', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-421" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-421', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L839"></a><tt class="py-lineno"> 839</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-422" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-422', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'127/8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L840"></a><tt class="py-lineno"> 840</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-423" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-423', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-424" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-424', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L841"></a><tt class="py-lineno"> 841</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-op">==</tt> <tt id="link-425" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-425', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-string">'::1'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L842"></a><tt class="py-lineno"> 842</tt> <tt class="py-line"> </tt>
-<a name="IP.is_multicast"></a><div id="IP.is_multicast-def"><a name="L843"></a><tt class="py-lineno"> 843</tt> <a class="py-toggle" href="#" id="IP.is_multicast-toggle" onclick="return toggle('IP.is_multicast');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_multicast">is_multicast</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_multicast-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_multicast-expanded"><a name="L844"></a><tt class="py-lineno"> 844</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: C{True} if this IP is multicast, C{False} otherwise"""</tt> </tt>
-<a name="L845"></a><tt class="py-lineno"> 845</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-426" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-426', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-427" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-427', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L846"></a><tt class="py-lineno"> 846</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-428" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-428', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'224/4'</tt><tt class="py-op">)</tt> </tt>
-<a name="L847"></a><tt class="py-lineno"> 847</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-429" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-429', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-430" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-430', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L848"></a><tt class="py-lineno"> 848</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-431" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-431', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'ff00::/8'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L849"></a><tt class="py-lineno"> 849</tt> <tt class="py-line"> </tt>
-<a name="IP.is_private"></a><div id="IP.is_private-def"><a name="L850"></a><tt class="py-lineno"> 850</tt> <a class="py-toggle" href="#" id="IP.is_private-toggle" onclick="return toggle('IP.is_private');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_private">is_private</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_private-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_private-expanded"><a name="L851"></a><tt class="py-lineno"> 851</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L852"></a><tt class="py-lineno"> 852</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is for internal/private use only</tt> </tt>
-<a name="L853"></a><tt class="py-lineno"> 853</tt> <tt class="py-line"><tt class="py-docstring"> (i.e. non-public), C{False} otherwise. Reference: RFCs 1918,</tt> </tt>
-<a name="L854"></a><tt class="py-lineno"> 854</tt> <tt class="py-line"><tt class="py-docstring"> 3330, 4193, 3879 and 2365.</tt> </tt>
-<a name="L855"></a><tt class="py-lineno"> 855</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L856"></a><tt class="py-lineno"> 856</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-432" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-432', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-433" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-433', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L857"></a><tt class="py-lineno"> 857</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-434" class="py-name" targets="Method netaddr.address.IP.cidr()=netaddr.address.IP-class.html#cidr"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-434', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-435" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-435', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'192.168/16'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-436" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-436', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'10/8'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt id="link-437" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-437', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'172.16/12'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L858"></a><tt class="py-lineno"> 858</tt> <tt class="py-line"> <tt id="link-438" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-438', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'192.0.2.0/24'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-439" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-439', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'239.192/14'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L859"></a><tt class="py-lineno"> 859</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-440" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-440', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L860"></a><tt class="py-lineno"> 860</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L861"></a><tt class="py-lineno"> 861</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-441" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-441', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-442" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-442', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L862"></a><tt class="py-lineno"> 862</tt> <tt class="py-line"> <tt class="py-comment"># Please Note: FEC0::/10 has been deprecated! See RFC 3879.</tt> </tt>
-<a name="L863"></a><tt class="py-lineno"> 863</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-443" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-443', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'fc00::/7'</tt><tt class="py-op">)</tt> <tt class="py-comment"># ULAs - Unique Local Addresses</tt> </tt>
-<a name="L864"></a><tt class="py-lineno"> 864</tt> <tt class="py-line"> </tt>
-<a name="L865"></a><tt class="py-lineno"> 865</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-444" class="py-name" targets="Method netaddr.address.IP.is_link_local()=netaddr.address.IP-class.html#is_link_local"><a title="netaddr.address.IP.is_link_local" class="py-name" href="#" onclick="return doclink('link-444', 'is_link_local', 'link-444');">is_link_local</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L866"></a><tt class="py-lineno"> 866</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L867"></a><tt class="py-lineno"> 867</tt> <tt class="py-line"> </tt>
-<a name="L868"></a><tt class="py-lineno"> 868</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L869"></a><tt class="py-lineno"> 869</tt> <tt class="py-line"> </tt>
-<a name="IP.is_link_local"></a><div id="IP.is_link_local-def"><a name="L870"></a><tt class="py-lineno"> 870</tt> <a class="py-toggle" href="#" id="IP.is_link_local-toggle" onclick="return toggle('IP.is_link_local');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_link_local">is_link_local</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_link_local-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_link_local-expanded"><a name="L871"></a><tt class="py-lineno"> 871</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L872"></a><tt class="py-lineno"> 872</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is link-local address C{False} otherwise.</tt> </tt>
-<a name="L873"></a><tt class="py-lineno"> 873</tt> <tt class="py-line"><tt class="py-docstring"> Reference: RFCs 3927 and 4291.</tt> </tt>
-<a name="L874"></a><tt class="py-lineno"> 874</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L875"></a><tt class="py-lineno"> 875</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-445" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-445', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-446" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-446', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L876"></a><tt class="py-lineno"> 876</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-447" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-447', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'169.254/16'</tt><tt class="py-op">)</tt> </tt>
-<a name="L877"></a><tt class="py-lineno"> 877</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-448" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-448', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-449" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-449', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L878"></a><tt class="py-lineno"> 878</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-450" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-450', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'fe80::/10'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L879"></a><tt class="py-lineno"> 879</tt> <tt class="py-line"> </tt>
-<a name="IP.is_reserved"></a><div id="IP.is_reserved-def"><a name="L880"></a><tt class="py-lineno"> 880</tt> <a class="py-toggle" href="#" id="IP.is_reserved-toggle" onclick="return toggle('IP.is_reserved');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_reserved">is_reserved</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_reserved-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_reserved-expanded"><a name="L881"></a><tt class="py-lineno"> 881</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L882"></a><tt class="py-lineno"> 882</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is in IANA reserved range, C{False}</tt> </tt>
-<a name="L883"></a><tt class="py-lineno"> 883</tt> <tt class="py-line"><tt class="py-docstring"> otherwise. Reference: RFCs 3330 and 3171.</tt> </tt>
-<a name="L884"></a><tt class="py-lineno"> 884</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L885"></a><tt class="py-lineno"> 885</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-451" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-451', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-452" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-452', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L886"></a><tt class="py-lineno"> 886</tt> <tt class="py-line"> <tt class="py-comment"># Use of wildcards here much more concise than CIDR...</tt> </tt>
-<a name="L887"></a><tt class="py-lineno"> 887</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt id="link-453" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-453', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-454" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-454', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'240/4'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-455" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-455', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'234/7'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-456" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-456', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'236/7'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L888"></a><tt class="py-lineno"> 888</tt> <tt class="py-line"> <tt id="link-457" class="py-name" targets="Class netaddr.address.Wildcard=netaddr.address.Wildcard-class.html"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-457', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">(</tt><tt class="py-string">'225-231.*.*.*'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-458" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-458', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">(</tt><tt class="py-string">'234-238.*.*.*'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L889"></a><tt class="py-lineno"> 889</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-459" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-459', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L890"></a><tt class="py-lineno"> 890</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L891"></a><tt class="py-lineno"> 891</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-460" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-460', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-461" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-461', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L892"></a><tt class="py-lineno"> 892</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-462" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-462', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt id="link-463" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-463', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'ff00::/12'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt><tt id="link-464" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-464', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'::/8'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-465" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-465', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'0100::/8'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L893"></a><tt class="py-lineno"> 893</tt> <tt class="py-line"> <tt id="link-466" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-466', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'0200::/7'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-467" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-467', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'0400::/6'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-468" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-468', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'0800::/5'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L894"></a><tt class="py-lineno"> 894</tt> <tt class="py-line"> <tt id="link-469" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-469', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'1000::/4'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-470" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-470', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'4000::/3'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-471" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-471', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'6000::/3'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L895"></a><tt class="py-lineno"> 895</tt> <tt class="py-line"> <tt id="link-472" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-472', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'8000::/3'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-473" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-473', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'A000::/3'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-474" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-474', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'C000::/3'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L896"></a><tt class="py-lineno"> 896</tt> <tt class="py-line"> <tt id="link-475" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-475', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'E000::/4'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-476" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-476', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'F000::/5'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-477" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-477', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'F800::/6'</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L897"></a><tt class="py-lineno"> 897</tt> <tt class="py-line"> <tt id="link-478" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-478', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'FE00::/9'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L898"></a><tt class="py-lineno"> 898</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt> <tt class="py-keyword">in</tt> <tt id="link-479" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-479', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L899"></a><tt class="py-lineno"> 899</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L900"></a><tt class="py-lineno"> 900</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L901"></a><tt class="py-lineno"> 901</tt> <tt class="py-line"> </tt>
-<a name="IP.is_ipv4_mapped"></a><div id="IP.is_ipv4_mapped-def"><a name="L902"></a><tt class="py-lineno"> 902</tt> <a class="py-toggle" href="#" id="IP.is_ipv4_mapped-toggle" onclick="return toggle('IP.is_ipv4_mapped');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_ipv4_mapped">is_ipv4_mapped</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_ipv4_mapped-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_ipv4_mapped-expanded"><a name="L903"></a><tt class="py-lineno"> 903</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L904"></a><tt class="py-lineno"> 904</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is IPv4-compatible IPv6 address, C{False}</tt> </tt>
-<a name="L905"></a><tt class="py-lineno"> 905</tt> <tt class="py-line"><tt class="py-docstring"> otherwise.</tt> </tt>
-<a name="L906"></a><tt class="py-lineno"> 906</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L907"></a><tt class="py-lineno"> 907</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-480" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-480', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-481" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-481', 'AT_INET6', 'link-5');">AT_INET6</a></tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-482" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-482', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">32</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0xffff</tt> </tt>
-</div><a name="L908"></a><tt class="py-lineno"> 908</tt> <tt class="py-line"> </tt>
-<a name="IP.is_ipv4_compat"></a><div id="IP.is_ipv4_compat-def"><a name="L909"></a><tt class="py-lineno"> 909</tt> <a class="py-toggle" href="#" id="IP.is_ipv4_compat-toggle" onclick="return toggle('IP.is_ipv4_compat');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#is_ipv4_compat">is_ipv4_compat</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.is_ipv4_compat-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.is_ipv4_compat-expanded"><a name="L910"></a><tt class="py-lineno"> 910</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L911"></a><tt class="py-lineno"> 911</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if this IP is IPv4-mapped IPv6 address, C{False}</tt> </tt>
-<a name="L912"></a><tt class="py-lineno"> 912</tt> <tt class="py-line"><tt class="py-docstring"> otherwise.</tt> </tt>
-<a name="L913"></a><tt class="py-lineno"> 913</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L914"></a><tt class="py-lineno"> 914</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-483" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-483', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-484" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-484', 'AT_INET6', 'link-5');">AT_INET6</a></tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-485" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-485', 'value', 'link-30');">value</a></tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">32</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt> </tt>
-</div><a name="L915"></a><tt class="py-lineno"> 915</tt> <tt class="py-line"> </tt>
-<a name="IP.info"></a><div id="IP.info-def"><a name="L916"></a><tt class="py-lineno"> 916</tt> <a class="py-toggle" href="#" id="IP.info-toggle" onclick="return toggle('IP.info');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#info">info</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.info-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.info-expanded"><a name="L917"></a><tt class="py-lineno"> 917</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L918"></a><tt class="py-lineno"> 918</tt> <tt class="py-line"><tt class="py-docstring"> @return: A record dict containing IANA registration details for this</tt> </tt>
-<a name="L919"></a><tt class="py-lineno"> 919</tt> <tt class="py-line"><tt class="py-docstring"> IP address if available, None otherwise.</tt> </tt>
-<a name="L920"></a><tt class="py-lineno"> 920</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L921"></a><tt class="py-lineno"> 921</tt> <tt class="py-line"> <tt class="py-comment"># This import is placed here for efficiency. If you don't call this</tt> </tt>
-<a name="L922"></a><tt class="py-lineno"> 922</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># method, you don't take the (small), one time, import start up</tt> </tt>
-<a name="L923"></a><tt class="py-lineno"> 923</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># penalty. Also gets around a nasty module dependency issue.</tt> </tt>
-<a name="L924"></a><tt class="py-lineno"> 924</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Two birds, one stone ...</tt> </tt>
-<a name="L925"></a><tt class="py-lineno"> 925</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">import</tt> <tt id="link-486" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-486', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-487" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-487', 'ip', 'link-75');">ip</a></tt> </tt>
-<a name="L926"></a><tt class="py-lineno"> 926</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-488" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-488', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-489" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-489', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-490" class="py-name" targets="Function netaddr.ip.query()=netaddr.ip-module.html#query"><a title="netaddr.ip.query" class="py-name" href="#" onclick="return doclink('link-490', 'query', 'link-490');">query</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L927"></a><tt class="py-lineno"> 927</tt> <tt class="py-line"> </tt>
-<a name="IP.__str__"></a><div id="IP.__str__-def"><a name="L928"></a><tt class="py-lineno"> 928</tt> <a class="py-toggle" href="#" id="IP.__str__-toggle" onclick="return toggle('IP.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.__str__-expanded"><a name="L929"></a><tt class="py-lineno"> 929</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: common string representation for this IP address"""</tt> </tt>
-<a name="L930"></a><tt class="py-lineno"> 930</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-491" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-491', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-492" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-492', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-493" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-493', 'value', 'link-30');">value</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L931"></a><tt class="py-lineno"> 931</tt> <tt class="py-line"> </tt>
-<a name="IP.__repr__"></a><div id="IP.__repr__-def"><a name="L932"></a><tt class="py-lineno"> 932</tt> <a class="py-toggle" href="#" id="IP.__repr__-toggle" onclick="return toggle('IP.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IP-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IP.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IP.__repr__-expanded"><a name="L933"></a><tt class="py-lineno"> 933</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L934"></a><tt class="py-lineno"> 934</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-494" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-494', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-495" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-495', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L935"></a><tt class="py-lineno"> 935</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s('%s')"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L936"></a><tt class="py-lineno"> 936</tt> <tt class="py-line"> </tt>
-<a name="L937"></a><tt class="py-lineno"> 937</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s('%s/%d')"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L938"></a><tt class="py-lineno"> 938</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-496" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-496', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L939"></a><tt class="py-lineno"> 939</tt> <tt class="py-line"> </tt>
-<a name="L940"></a><tt class="py-lineno"> 940</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="nrange"></a><div id="nrange-def"><a name="L941"></a><tt class="py-lineno"> 941</tt> <a class="py-toggle" href="#" id="nrange-toggle" onclick="return toggle('nrange');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address-module.html#nrange">nrange</a><tt class="py-op">(</tt><tt class="py-param">start</tt><tt class="py-op">,</tt> <tt class="py-param">stop</tt><tt class="py-op">,</tt> <tt class="py-param">step</tt><tt class="py-op">=</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="nrange-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="nrange-expanded"><a name="L942"></a><tt class="py-lineno"> 942</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L943"></a><tt class="py-lineno"> 943</tt> <tt class="py-line"><tt class="py-docstring"> An xrange work alike generator that produces sequences of IP addresses</tt> </tt>
-<a name="L944"></a><tt class="py-lineno"> 944</tt> <tt class="py-line"><tt class="py-docstring"> based on start and stop addresses, in intervals of step size.</tt> </tt>
-<a name="L945"></a><tt class="py-lineno"> 945</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L946"></a><tt class="py-lineno"> 946</tt> <tt class="py-line"><tt class="py-docstring"> @param start: first IP address string or L{IP} object in range.</tt> </tt>
-<a name="L947"></a><tt class="py-lineno"> 947</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L948"></a><tt class="py-lineno"> 948</tt> <tt class="py-line"><tt class="py-docstring"> @param stop: last IP address string or L{IP} object in range</tt> </tt>
-<a name="L949"></a><tt class="py-lineno"> 949</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L950"></a><tt class="py-lineno"> 950</tt> <tt class="py-line"><tt class="py-docstring"> @param step: (optional) size of step between address in range.</tt> </tt>
-<a name="L951"></a><tt class="py-lineno"> 951</tt> <tt class="py-line"><tt class="py-docstring"> (Default: 1)</tt> </tt>
-<a name="L952"></a><tt class="py-lineno"> 952</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L953"></a><tt class="py-lineno"> 953</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) callable used on addresses returned.</tt> </tt>
-<a name="L954"></a><tt class="py-lineno"> 954</tt> <tt class="py-line"><tt class="py-docstring"> (Default: None - L{IP} objects). Supported options :-</tt> </tt>
-<a name="L955"></a><tt class="py-lineno"> 955</tt> <tt class="py-line"><tt class="py-docstring"> - C{str} - IP address strings</tt> </tt>
-<a name="L956"></a><tt class="py-lineno"> 956</tt> <tt class="py-line"><tt class="py-docstring"> - C{int}, C{long} - IP address integer (network byte order)</tt> </tt>
-<a name="L957"></a><tt class="py-lineno"> 957</tt> <tt class="py-line"><tt class="py-docstring"> - C{hex} - IP address as a hexadecimal number</tt> </tt>
-<a name="L958"></a><tt class="py-lineno"> 958</tt> <tt class="py-line"><tt class="py-docstring"> - L{IP} class/subclass or callable that accepts C{addr_value} and</tt> </tt>
-<a name="L959"></a><tt class="py-lineno"> 959</tt> <tt class="py-line"><tt class="py-docstring"> C{addr_type} arguments.</tt> </tt>
-<a name="L960"></a><tt class="py-lineno"> 960</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L961"></a><tt class="py-lineno"> 961</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt id="link-497" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-497', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L962"></a><tt class="py-lineno"> 962</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L963"></a><tt class="py-lineno"> 963</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt id="link-498" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-498', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
-<a name="L964"></a><tt class="py-lineno"> 964</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L965"></a><tt class="py-lineno"> 965</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'start is not recognised address in string '</tt> \ </tt>
-<a name="L966"></a><tt class="py-lineno"> 966</tt> <tt class="py-line"> <tt class="py-string">'format or IP class/subclass instance!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L967"></a><tt class="py-lineno"> 967</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L968"></a><tt class="py-lineno"> 968</tt> <tt class="py-line"> <tt class="py-comment"># Use start object's constructor as formatter.</tt> </tt>
-<a name="L969"></a><tt class="py-lineno"> 969</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt id="link-499" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-499', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L970"></a><tt class="py-lineno"> 970</tt> <tt class="py-line"> <tt id="link-500" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-500', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt class="py-name">start</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt> </tt>
-<a name="L971"></a><tt class="py-lineno"> 971</tt> <tt class="py-line"> </tt>
-<a name="L972"></a><tt class="py-lineno"> 972</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt id="link-501" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-501', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L973"></a><tt class="py-lineno"> 973</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L974"></a><tt class="py-lineno"> 974</tt> <tt class="py-line"> <tt class="py-name">stop</tt> <tt class="py-op">=</tt> <tt id="link-502" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-502', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">stop</tt><tt class="py-op">)</tt> </tt>
-<a name="L975"></a><tt class="py-lineno"> 975</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L976"></a><tt class="py-lineno"> 976</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'stop is not recognised address string '</tt> \ </tt>
-<a name="L977"></a><tt class="py-lineno"> 977</tt> <tt class="py-line"> <tt class="py-string">'or IP class/subclass instance!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L978"></a><tt class="py-lineno"> 978</tt> <tt class="py-line"> </tt>
-<a name="L979"></a><tt class="py-lineno"> 979</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L980"></a><tt class="py-lineno"> 980</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'step must be type int|long, not %s!'</tt> <tt class="py-op">%</tt> <tt class="py-name">type</tt><tt class="py-op">(</tt><tt class="py-name">step</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L981"></a><tt class="py-lineno"> 981</tt> <tt class="py-line"> </tt>
-<a name="L982"></a><tt class="py-lineno"> 982</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start</tt><tt class="py-op">.</tt><tt id="link-503" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-503', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">stop</tt><tt class="py-op">.</tt><tt id="link-504" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-504', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L983"></a><tt class="py-lineno"> 983</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'start and stop are not the same address type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L984"></a><tt class="py-lineno"> 984</tt> <tt class="py-line"> </tt>
-<a name="L985"></a><tt class="py-lineno"> 985</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">step</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L986"></a><tt class="py-lineno"> 986</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'step argument cannot be zero'</tt><tt class="py-op">)</tt> </tt>
-<a name="L987"></a><tt class="py-lineno"> 987</tt> <tt class="py-line"> </tt>
-<a name="L988"></a><tt class="py-lineno"> 988</tt> <tt class="py-line"> <tt class="py-name">negative_step</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L989"></a><tt class="py-lineno"> 989</tt> <tt class="py-line"> <tt id="link-505" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-505', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt class="py-name">start</tt><tt class="py-op">.</tt><tt id="link-506" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-506', 'addr_type', 'link-43');">addr_type</a></tt> </tt>
-<a name="L990"></a><tt class="py-lineno"> 990</tt> <tt class="py-line"> </tt>
-<a name="L991"></a><tt class="py-lineno"> 991</tt> <tt class="py-line"> <tt class="py-comment"># We don't need objects from here onwards. Basic integer values will do</tt> </tt>
-<a name="L992"></a><tt class="py-lineno"> 992</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># just fine.</tt> </tt>
-<a name="L993"></a><tt class="py-lineno"> 993</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">start_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">start</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt> </tt>
-<a name="L994"></a><tt class="py-lineno"> 994</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
-<a name="L995"></a><tt class="py-lineno"> 995</tt> <tt class="py-line"> <tt class="py-name">stop</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">stop</tt><tt class="py-op">)</tt> </tt>
-<a name="L996"></a><tt class="py-lineno"> 996</tt> <tt class="py-line"> </tt>
-<a name="L997"></a><tt class="py-lineno"> 997</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">step</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L998"></a><tt class="py-lineno"> 998</tt> <tt class="py-line"> <tt class="py-name">negative_step</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L999"></a><tt class="py-lineno"> 999</tt> <tt class="py-line"> </tt>
-<a name="L1000"></a><tt class="py-lineno">1000</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">=</tt> <tt class="py-name">start</tt> <tt class="py-op">-</tt> <tt class="py-name">step</tt> </tt>
-<a name="L1001"></a><tt class="py-lineno">1001</tt> <tt class="py-line"> </tt>
-<a name="L1002"></a><tt class="py-lineno">1002</tt> <tt class="py-line"> <tt class="py-comment"># Default formatter.</tt> </tt>
-<a name="L1003"></a><tt class="py-lineno">1003</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt id="link-507" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-507', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1004"></a><tt class="py-lineno">1004</tt> <tt class="py-line"> <tt id="link-508" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-508', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt id="link-509" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-509', 'IP', 'link-76');">IP</a></tt> </tt>
-<a name="L1005"></a><tt class="py-lineno">1005</tt> <tt class="py-line"> </tt>
-<a name="L1006"></a><tt class="py-lineno">1006</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-510" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-510', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">,</tt> <tt class="py-name">hex</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1007"></a><tt class="py-lineno">1007</tt> <tt class="py-line"> <tt class="py-comment"># Yield network address integer values.</tt> </tt>
-<a name="L1008"></a><tt class="py-lineno">1008</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L1009"></a><tt class="py-lineno">1009</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">+=</tt> <tt class="py-name">step</tt> </tt>
-<a name="L1010"></a><tt class="py-lineno">1010</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">negative_step</tt><tt class="py-op">:</tt> </tt>
-<a name="L1011"></a><tt class="py-lineno">1011</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1012"></a><tt class="py-lineno">1012</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1013"></a><tt class="py-lineno">1013</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1014"></a><tt class="py-lineno">1014</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1015"></a><tt class="py-lineno">1015</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1016"></a><tt class="py-lineno">1016</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-511" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-511', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">)</tt> </tt>
-<a name="L1017"></a><tt class="py-lineno">1017</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt id="link-512" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-512', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1018"></a><tt class="py-lineno">1018</tt> <tt class="py-line"> <tt class="py-comment"># Yield address string values.</tt> </tt>
-<a name="L1019"></a><tt class="py-lineno">1019</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L1020"></a><tt class="py-lineno">1020</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">+=</tt> <tt class="py-name">step</tt> </tt>
-<a name="L1021"></a><tt class="py-lineno">1021</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">negative_step</tt><tt class="py-op">:</tt> </tt>
-<a name="L1022"></a><tt class="py-lineno">1022</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1023"></a><tt class="py-lineno">1023</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1024"></a><tt class="py-lineno">1024</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1025"></a><tt class="py-lineno">1025</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1026"></a><tt class="py-lineno">1026</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1027"></a><tt class="py-lineno">1027</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">start_fmt</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt id="link-513" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-513', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1028"></a><tt class="py-lineno">1028</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1029"></a><tt class="py-lineno">1029</tt> <tt class="py-line"> <tt class="py-comment"># Yield network address objects.</tt> </tt>
-<a name="L1030"></a><tt class="py-lineno">1030</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L1031"></a><tt class="py-lineno">1031</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">+=</tt> <tt class="py-name">step</tt> </tt>
-<a name="L1032"></a><tt class="py-lineno">1032</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">negative_step</tt><tt class="py-op">:</tt> </tt>
-<a name="L1033"></a><tt class="py-lineno">1033</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1034"></a><tt class="py-lineno">1034</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1035"></a><tt class="py-lineno">1035</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1036"></a><tt class="py-lineno">1036</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">stop</tt><tt class="py-op">:</tt> </tt>
-<a name="L1037"></a><tt class="py-lineno">1037</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> </tt>
-<a name="L1038"></a><tt class="py-lineno">1038</tt> <tt class="py-line"> </tt>
-<a name="L1039"></a><tt class="py-lineno">1039</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-514" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-514', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt id="link-515" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-515', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1040"></a><tt class="py-lineno">1040</tt> <tt class="py-line"> </tt>
-<a name="L1041"></a><tt class="py-lineno">1041</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IPRange"></a><div id="IPRange-def"><a name="L1042"></a><tt class="py-lineno">1042</tt> <a class="py-toggle" href="#" id="IPRange-toggle" onclick="return toggle('IPRange');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html">IPRange</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="IPRange-expanded"><a name="L1043"></a><tt class="py-lineno">1043</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1044"></a><tt class="py-lineno">1044</tt> <tt class="py-line"><tt class="py-docstring"> Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses using</tt> </tt>
-<a name="L1045"></a><tt class="py-lineno">1045</tt> <tt class="py-line"><tt class="py-docstring"> only a lower and upper bound IP address.</tt> </tt>
-<a name="L1046"></a><tt class="py-lineno">1046</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1047"></a><tt class="py-lineno">1047</tt> <tt class="py-line"><tt class="py-docstring"> It is the base class for more specialised block types such as L{CIDR()}</tt> </tt>
-<a name="L1048"></a><tt class="py-lineno">1048</tt> <tt class="py-line"><tt class="py-docstring"> and L{Wildcard()}. There is no requirement that the boundary IP addresses</tt> </tt>
-<a name="L1049"></a><tt class="py-lineno">1049</tt> <tt class="py-line"><tt class="py-docstring"> fall on strict bitmask boundaries.</tt> </tt>
-<a name="L1050"></a><tt class="py-lineno">1050</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1051"></a><tt class="py-lineno">1051</tt> <tt class="py-line"><tt class="py-docstring"> The sort order for sequence of mixed version L{IPRange} objects is IPv4</tt> </tt>
-<a name="L1052"></a><tt class="py-lineno">1052</tt> <tt class="py-line"><tt class="py-docstring"> followed by IPv6, based on the range's magnitude (size).</tt> </tt>
-<a name="L1053"></a><tt class="py-lineno">1053</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1054"></a><tt class="py-lineno">1054</tt> <tt class="py-line"> <tt id="link-516" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-516', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-517" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-517', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-518" class="py-name"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-518', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1055"></a><tt class="py-lineno">1055</tt> <tt class="py-line"> <tt id="link-519" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-519', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-520" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-520', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-521" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-521', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-522" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-522', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1056"></a><tt class="py-lineno">1056</tt> <tt class="py-line"> </tt>
-<a name="L1057"></a><tt class="py-lineno">1057</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L1058"></a><tt class="py-lineno">1058</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-523" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-523', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-524" class="py-name"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-524', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-525" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-525', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1059"></a><tt class="py-lineno">1059</tt> <tt class="py-line"> <tt id="link-526" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-526', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-527" class="py-name"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-527', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-528" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-528', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1060"></a><tt class="py-lineno">1060</tt> <tt class="py-line"> <tt id="link-529" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-529', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt id="link-530" class="py-name"><a title="netaddr.address.AddrValueDescriptor" class="py-name" href="#" onclick="return doclink('link-530', 'AddrValueDescriptor', 'link-140');">AddrValueDescriptor</a></tt><tt class="py-op">(</tt><tt class="py-string">'first'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1061"></a><tt class="py-lineno">1061</tt> <tt class="py-line"> <tt id="link-531" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-531', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt id="link-532" class="py-name"><a title="netaddr.address.AddrValueDescriptor" class="py-name" href="#" onclick="return doclink('link-532', 'AddrValueDescriptor', 'link-140');">AddrValueDescriptor</a></tt><tt class="py-op">(</tt><tt class="py-string">'last'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1062"></a><tt class="py-lineno">1062</tt> <tt class="py-line"> <tt id="link-533" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-533', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt id="link-534" class="py-name" targets="Class netaddr.address.FormatDescriptor=netaddr.address.FormatDescriptor-class.html"><a title="netaddr.address.FormatDescriptor" class="py-name" href="#" onclick="return doclink('link-534', 'FormatDescriptor', 'link-534');">FormatDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-535" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-535', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1063"></a><tt class="py-lineno">1063</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__init__"></a><div id="IPRange.__init__-def"><a name="L1064"></a><tt class="py-lineno">1064</tt> <a class="py-toggle" href="#" id="IPRange.__init__-toggle" onclick="return toggle('IPRange.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">first</tt><tt class="py-op">,</tt> <tt class="py-param">last</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt id="link-536" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-536', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__init__-expanded"><a name="L1065"></a><tt class="py-lineno">1065</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1066"></a><tt class="py-lineno">1066</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L1067"></a><tt class="py-lineno">1067</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1068"></a><tt class="py-lineno">1068</tt> <tt class="py-line"><tt class="py-docstring"> @param first: start address for this IP address range.</tt> </tt>
-<a name="L1069"></a><tt class="py-lineno">1069</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1070"></a><tt class="py-lineno">1070</tt> <tt class="py-line"><tt class="py-docstring"> @param last: stop address for this IP address range.</tt> </tt>
-<a name="L1071"></a><tt class="py-lineno">1071</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1072"></a><tt class="py-lineno">1072</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) callable used to create return values.</tt> </tt>
-<a name="L1073"></a><tt class="py-lineno">1073</tt> <tt class="py-line"><tt class="py-docstring"> Default: L{IP()} objects. See L{nrange()} documentations for</tt> </tt>
-<a name="L1074"></a><tt class="py-lineno">1074</tt> <tt class="py-line"><tt class="py-docstring"> more details on the various options.</tt> </tt>
-<a name="L1075"></a><tt class="py-lineno">1075</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1076"></a><tt class="py-lineno">1076</tt> <tt class="py-line"> <tt class="py-comment">#TODO: this can be optimised, consider accepting addr_type via the</tt> </tt>
-<a name="L1077"></a><tt class="py-lineno">1077</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#TODO: constructor.</tt> </tt>
-<a name="L1078"></a><tt class="py-lineno">1078</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-537" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-537', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-538" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-538', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt> </tt>
-<a name="L1079"></a><tt class="py-lineno">1079</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-539" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-539', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt id="link-540" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-540', 'first', 'link-110');">first</a></tt> </tt>
-<a name="L1080"></a><tt class="py-lineno">1080</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-541" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-541', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt id="link-542" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-542', 'last', 'link-372');">last</a></tt> </tt>
-<a name="L1081"></a><tt class="py-lineno">1081</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-543" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-543', 'last', 'link-372');">last</a></tt> <tt class="py-op">&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-544" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-544', 'first', 'link-110');">first</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1082"></a><tt class="py-lineno">1082</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'start address is greater than stop address!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1083"></a><tt class="py-lineno">1083</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-545" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-545', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt id="link-546" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-546', 'fmt', 'link-261');">fmt</a></tt> </tt>
-</div><a name="L1084"></a><tt class="py-lineno">1084</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__hash__"></a><div id="IPRange.__hash__-def"><a name="L1085"></a><tt class="py-lineno">1085</tt> <a class="py-toggle" href="#" id="IPRange.__hash__-toggle" onclick="return toggle('IPRange.__hash__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__hash__">__hash__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__hash__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__hash__-expanded"><a name="L1086"></a><tt class="py-lineno">1086</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1087"></a><tt class="py-lineno">1087</tt> <tt class="py-line"><tt class="py-docstring"> @return: The hash of this address range. Allow them to be used in sets</tt> </tt>
-<a name="L1088"></a><tt class="py-lineno">1088</tt> <tt class="py-line"><tt class="py-docstring"> and as keys in dictionaries.</tt> </tt>
-<a name="L1089"></a><tt class="py-lineno">1089</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1090"></a><tt class="py-lineno">1090</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hash</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-547" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-547', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-548" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-548', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-549" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-549', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1091"></a><tt class="py-lineno">1091</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__len__"></a><div id="IPRange.__len__-def"><a name="L1092"></a><tt class="py-lineno">1092</tt> <a class="py-toggle" href="#" id="IPRange.__len__-toggle" onclick="return toggle('IPRange.__len__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__len__">__len__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__len__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__len__-expanded"><a name="L1093"></a><tt class="py-lineno">1093</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1094"></a><tt class="py-lineno">1094</tt> <tt class="py-line"><tt class="py-docstring"> @return: The total number of network addresses in this range.</tt> </tt>
-<a name="L1095"></a><tt class="py-lineno">1095</tt> <tt class="py-line"><tt class="py-docstring"> - Use this method only for ranges that contain less than</tt> </tt>
-<a name="L1096"></a><tt class="py-lineno">1096</tt> <tt class="py-line"><tt class="py-docstring"> C{2^31} addresses or try the L{size()} method. Raises an</tt> </tt>
-<a name="L1097"></a><tt class="py-lineno">1097</tt> <tt class="py-line"><tt class="py-docstring"> C{IndexError} if size is exceeded.</tt> </tt>
-<a name="L1098"></a><tt class="py-lineno">1098</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1099"></a><tt class="py-lineno">1099</tt> <tt class="py-line"> <tt id="link-550" class="py-name" targets="Method netaddr.address.IPRange.size()=netaddr.address.IPRange-class.html#size"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-550', 'size', 'link-550');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-551" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-551', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1100"></a><tt class="py-lineno">1100</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-552" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-552', 'size', 'link-550');">size</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">31</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1101"></a><tt class="py-lineno">1101</tt> <tt class="py-line"> <tt class="py-comment"># Use size() method in this class instead as len() will b0rk!</tt> </tt>
-<a name="L1102"></a><tt class="py-lineno">1102</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">"range contains greater than 2^31 addresses! "</tt> \ </tt>
-<a name="L1103"></a><tt class="py-lineno">1103</tt> <tt class="py-line"> <tt class="py-string">"Use obj.size() instead."</tt><tt class="py-op">)</tt> </tt>
-<a name="L1104"></a><tt class="py-lineno">1104</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-553" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-553', 'size', 'link-550');">size</a></tt> </tt>
-</div><a name="L1105"></a><tt class="py-lineno">1105</tt> <tt class="py-line"> </tt>
-<a name="IPRange.size"></a><div id="IPRange.size-def"><a name="L1106"></a><tt class="py-lineno">1106</tt> <a class="py-toggle" href="#" id="IPRange.size-toggle" onclick="return toggle('IPRange.size');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#size">size</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.size-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.size-expanded"><a name="L1107"></a><tt class="py-lineno">1107</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1108"></a><tt class="py-lineno">1108</tt> <tt class="py-line"><tt class="py-docstring"> @return: The total number of network addresses in this range.</tt> </tt>
-<a name="L1109"></a><tt class="py-lineno">1109</tt> <tt class="py-line"><tt class="py-docstring"> - Use this method in preference to L{__len__()} when size of</tt> </tt>
-<a name="L1110"></a><tt class="py-lineno">1110</tt> <tt class="py-line"><tt class="py-docstring"> ranges potentially exceeds C{2^31} addresses.</tt> </tt>
-<a name="L1111"></a><tt class="py-lineno">1111</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1112"></a><tt class="py-lineno">1112</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-554" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-554', 'last', 'link-372');">last</a></tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-555" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-555', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
-</div><a name="L1113"></a><tt class="py-lineno">1113</tt> <tt class="py-line"> </tt>
-<a name="IPRange.format"></a><div id="IPRange.format-def"><a name="L1114"></a><tt class="py-lineno">1114</tt> <a class="py-toggle" href="#" id="IPRange.format-toggle" onclick="return toggle('IPRange.format');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#format">format</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_addr</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.format-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.format-expanded"><a name="L1115"></a><tt class="py-lineno">1115</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1116"></a><tt class="py-lineno">1116</tt> <tt class="py-line"><tt class="py-docstring"> @param int_addr: a network address integer (network byte order).</tt> </tt>
-<a name="L1117"></a><tt class="py-lineno">1117</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1118"></a><tt class="py-lineno">1118</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) a callable used on return values.</tt> </tt>
-<a name="L1119"></a><tt class="py-lineno">1119</tt> <tt class="py-line"><tt class="py-docstring"> Default: None. If set to None, this method uses the self.fmt</tt> </tt>
-<a name="L1120"></a><tt class="py-lineno">1120</tt> <tt class="py-line"><tt class="py-docstring"> setting instead. The argument is provided as an override option.</tt> </tt>
-<a name="L1121"></a><tt class="py-lineno">1121</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1122"></a><tt class="py-lineno">1122</tt> <tt class="py-line"><tt class="py-docstring"> @return: a network address in the format returned after passing it</tt> </tt>
-<a name="L1123"></a><tt class="py-lineno">1123</tt> <tt class="py-line"><tt class="py-docstring"> through this object's fmt property callable.</tt> </tt>
-<a name="L1124"></a><tt class="py-lineno">1124</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1125"></a><tt class="py-lineno">1125</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-556" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-556', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1126"></a><tt class="py-lineno">1126</tt> <tt class="py-line"> <tt id="link-557" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-557', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-558" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-558', 'fmt', 'link-261');">fmt</a></tt> </tt>
-<a name="L1127"></a><tt class="py-lineno">1127</tt> <tt class="py-line"> </tt>
-<a name="L1128"></a><tt class="py-lineno">1128</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-559" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-559', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1129"></a><tt class="py-lineno">1129</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-560" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-560', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-561" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-561', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">int_addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1130"></a><tt class="py-lineno">1130</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt id="link-562" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-562', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">,</tt> <tt class="py-name">hex</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1131"></a><tt class="py-lineno">1131</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-563" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-563', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">int_addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1132"></a><tt class="py-lineno">1132</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1133"></a><tt class="py-lineno">1133</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-564" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-564', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">int_addr</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-565" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-565', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1134"></a><tt class="py-lineno">1134</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__getitem__"></a><div id="IPRange.__getitem__-def"><a name="L1135"></a><tt class="py-lineno">1135</tt> <a class="py-toggle" href="#" id="IPRange.__getitem__-toggle" onclick="return toggle('IPRange.__getitem__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__getitem__">__getitem__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__getitem__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__getitem__-expanded"><a name="L1136"></a><tt class="py-lineno">1136</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1137"></a><tt class="py-lineno">1137</tt> <tt class="py-line"><tt class="py-docstring"> @return: The IP address(es) in this address range referenced by</tt> </tt>
-<a name="L1138"></a><tt class="py-lineno">1138</tt> <tt class="py-line"><tt class="py-docstring"> index/slice. Slicing objects can produce large sequences so</tt> </tt>
-<a name="L1139"></a><tt class="py-lineno">1139</tt> <tt class="py-line"><tt class="py-docstring"> generator objects are returned instead of a list. Wrapping a slice</tt> </tt>
-<a name="L1140"></a><tt class="py-lineno">1140</tt> <tt class="py-line"><tt class="py-docstring"> with C{list()} or C{tuple()} may be required dependent on context</tt> </tt>
-<a name="L1141"></a><tt class="py-lineno">1141</tt> <tt class="py-line"><tt class="py-docstring"> in which it is called.</tt> </tt>
-<a name="L1142"></a><tt class="py-lineno">1142</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1143"></a><tt class="py-lineno">1143</tt> <tt class="py-line"> </tt>
-<a name="L1144"></a><tt class="py-lineno">1144</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1145"></a><tt class="py-lineno">1145</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-op">(</tt><tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-566" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-566', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L1146"></a><tt class="py-lineno">1146</tt> <tt class="py-line"> <tt class="py-comment"># negative index.</tt> </tt>
-<a name="L1147"></a><tt class="py-lineno">1147</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-567" class="py-name" targets="Method netaddr.address.IPRange.format()=netaddr.address.IPRange-class.html#format"><a title="netaddr.address.IPRange.format" class="py-name" href="#" onclick="return doclink('link-567', 'format', 'link-567');">format</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-568" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-568', 'last', 'link-372');">last</a></tt> <tt class="py-op">+</tt> <tt class="py-name">index</tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L1148"></a><tt class="py-lineno">1148</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">index</tt> <tt class="py-op">&lt;=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-569" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-569', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1149"></a><tt class="py-lineno">1149</tt> <tt class="py-line"> <tt class="py-comment"># Positive index or zero index.</tt> </tt>
-<a name="L1150"></a><tt class="py-lineno">1150</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-570" class="py-name"><a title="netaddr.address.IPRange.format" class="py-name" href="#" onclick="return doclink('link-570', 'format', 'link-567');">format</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-571" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-571', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-name">index</tt><tt class="py-op">)</tt> </tt>
-<a name="L1151"></a><tt class="py-lineno">1151</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1152"></a><tt class="py-lineno">1152</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'index out range for address range size!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1153"></a><tt class="py-lineno">1153</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">slice</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1154"></a><tt class="py-lineno">1154</tt> <tt class="py-line"> <tt class="py-comment"># slices</tt> </tt>
-<a name="L1155"></a><tt class="py-lineno">1155</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: IPv6 breaks the .indices() method on the slice object</tt> </tt>
-<a name="L1156"></a><tt class="py-lineno">1156</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: spectacularly. We'll have to work out the start, stop and</tt> </tt>
-<a name="L1157"></a><tt class="py-lineno">1157</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: step ourselves :-(</tt> </tt>
-<a name="L1158"></a><tt class="py-lineno">1158</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#</tt> </tt>
-<a name="L1159"></a><tt class="py-lineno">1159</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: see PySlice_GetIndicesEx function in Python SVN</tt> </tt>
-<a name="L1160"></a><tt class="py-lineno">1160</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: repository for implementation details :-</tt> </tt>
-<a name="L1161"></a><tt class="py-lineno">1161</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: http://svn.python.org/view/python/trunk/Objects/sliceobject.c</tt> </tt>
-<a name="L1162"></a><tt class="py-lineno">1162</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">stop</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">index</tt><tt class="py-op">.</tt><tt class="py-name">indices</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-572" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-572', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1163"></a><tt class="py-lineno">1163</tt> <tt class="py-line"> </tt>
-<a name="L1164"></a><tt class="py-lineno">1164</tt> <tt class="py-line"> <tt class="py-name">start_addr</tt> <tt class="py-op">=</tt> <tt id="link-573" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-573', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-574" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-574', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-575" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-575', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1165"></a><tt class="py-lineno">1165</tt> <tt class="py-line"> <tt class="py-name">end_addr</tt> <tt class="py-op">=</tt> <tt id="link-576" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-576', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-577" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-577', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-name">stop</tt> <tt class="py-op">-</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-578" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-578', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1166"></a><tt class="py-lineno">1166</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-579" class="py-name" targets="Function netaddr.address.nrange()=netaddr.address-module.html#nrange"><a title="netaddr.address.nrange" class="py-name" href="#" onclick="return doclink('link-579', 'nrange', 'link-579');">nrange</a></tt><tt class="py-op">(</tt><tt class="py-name">start_addr</tt><tt class="py-op">,</tt> <tt class="py-name">end_addr</tt><tt class="py-op">,</tt> <tt class="py-name">step</tt><tt class="py-op">,</tt> <tt id="link-580" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-580', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-581" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-581', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1167"></a><tt class="py-lineno">1167</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1168"></a><tt class="py-lineno">1168</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported type %r!'</tt> <tt class="py-op">%</tt> <tt class="py-name">index</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1169"></a><tt class="py-lineno">1169</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__iter__"></a><div id="IPRange.__iter__-def"><a name="L1170"></a><tt class="py-lineno">1170</tt> <a class="py-toggle" href="#" id="IPRange.__iter__-toggle" onclick="return toggle('IPRange.__iter__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__iter__">__iter__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__iter__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__iter__-expanded"><a name="L1171"></a><tt class="py-lineno">1171</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1172"></a><tt class="py-lineno">1172</tt> <tt class="py-line"><tt class="py-docstring"> @return: An iterator object providing access to all network addresses</tt> </tt>
-<a name="L1173"></a><tt class="py-lineno">1173</tt> <tt class="py-line"><tt class="py-docstring"> within this range.</tt> </tt>
-<a name="L1174"></a><tt class="py-lineno">1174</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1175"></a><tt class="py-lineno">1175</tt> <tt class="py-line"> <tt class="py-name">start_addr</tt> <tt class="py-op">=</tt> <tt id="link-582" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-582', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-583" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-583', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-584" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-584', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1176"></a><tt class="py-lineno">1176</tt> <tt class="py-line"> <tt class="py-name">end_addr</tt> <tt class="py-op">=</tt> <tt id="link-585" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-585', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-586" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-586', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-587" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-587', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1177"></a><tt class="py-lineno">1177</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-588" class="py-name"><a title="netaddr.address.nrange" class="py-name" href="#" onclick="return doclink('link-588', 'nrange', 'link-579');">nrange</a></tt><tt class="py-op">(</tt><tt class="py-name">start_addr</tt><tt class="py-op">,</tt> <tt class="py-name">end_addr</tt><tt class="py-op">,</tt> <tt id="link-589" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-589', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-590" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-590', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1178"></a><tt class="py-lineno">1178</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__contains__"></a><div id="IPRange.__contains__-def"><a name="L1179"></a><tt class="py-lineno">1179</tt> <a class="py-toggle" href="#" id="IPRange.__contains__-toggle" onclick="return toggle('IPRange.__contains__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__contains__">__contains__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__contains__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__contains__-expanded"><a name="L1180"></a><tt class="py-lineno">1180</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1181"></a><tt class="py-lineno">1181</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: and IP/IPRange class/subclass instance or IP string value</tt> </tt>
-<a name="L1182"></a><tt class="py-lineno">1182</tt> <tt class="py-line"><tt class="py-docstring"> to be compared.</tt> </tt>
-<a name="L1183"></a><tt class="py-lineno">1183</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1184"></a><tt class="py-lineno">1184</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if given address or range falls within this range,</tt> </tt>
-<a name="L1185"></a><tt class="py-lineno">1185</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L1186"></a><tt class="py-lineno">1186</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1187"></a><tt class="py-lineno">1187</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1188"></a><tt class="py-lineno">1188</tt> <tt class="py-line"> <tt class="py-comment"># string address or address range.</tt> </tt>
-<a name="L1189"></a><tt class="py-lineno">1189</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">c_addr</tt> <tt class="py-op">=</tt> <tt id="link-591" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-591', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1190"></a><tt class="py-lineno">1190</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">c_addr</tt><tt class="py-op">.</tt><tt id="link-592" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-592', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-593" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-593', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1191"></a><tt class="py-lineno">1191</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-594" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-594', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">c_addr</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-595" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-595', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1192"></a><tt class="py-lineno">1192</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1193"></a><tt class="py-lineno">1193</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt id="link-596" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-596', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1194"></a><tt class="py-lineno">1194</tt> <tt class="py-line"> <tt class="py-comment"># Single value check.</tt> </tt>
-<a name="L1195"></a><tt class="py-lineno">1195</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-597" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-597', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-598" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-598', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1196"></a><tt class="py-lineno">1196</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1197"></a><tt class="py-lineno">1197</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">issubclass</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt id="link-599" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-599', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1198"></a><tt class="py-lineno">1198</tt> <tt class="py-line"> <tt class="py-comment"># Range value check.</tt> </tt>
-<a name="L1199"></a><tt class="py-lineno">1199</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt id="link-600" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-600', 'first', 'link-110');">first</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-601" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-601', 'first', 'link-110');">first</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt id="link-602" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-602', 'last', 'link-372');">last</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-603" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-603', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1200"></a><tt class="py-lineno">1200</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1201"></a><tt class="py-lineno">1201</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1202"></a><tt class="py-lineno">1202</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported type or class!'</tt> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1203"></a><tt class="py-lineno">1203</tt> <tt class="py-line"> </tt>
-<a name="L1204"></a><tt class="py-lineno">1204</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1205"></a><tt class="py-lineno">1205</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__eq__"></a><div id="IPRange.__eq__-def"><a name="L1206"></a><tt class="py-lineno">1206</tt> <a class="py-toggle" href="#" id="IPRange.__eq__-toggle" onclick="return toggle('IPRange.__eq__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__eq__">__eq__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__eq__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__eq__-expanded"><a name="L1207"></a><tt class="py-lineno">1207</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1208"></a><tt class="py-lineno">1208</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1209"></a><tt class="py-lineno">1209</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1210"></a><tt class="py-lineno">1210</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are the same as</tt> </tt>
-<a name="L1211"></a><tt class="py-lineno">1211</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L1212"></a><tt class="py-lineno">1212</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1213"></a><tt class="py-lineno">1213</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1214"></a><tt class="py-lineno">1214</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-604" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-604', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-605" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-605', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-606" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-606', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> \ </tt>
-<a name="L1215"></a><tt class="py-lineno">1215</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-607" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-607', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-608" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-608', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-609" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-609', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1216"></a><tt class="py-lineno">1216</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1217"></a><tt class="py-lineno">1217</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1218"></a><tt class="py-lineno">1218</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__ne__"></a><div id="IPRange.__ne__-def"><a name="L1219"></a><tt class="py-lineno">1219</tt> <a class="py-toggle" href="#" id="IPRange.__ne__-toggle" onclick="return toggle('IPRange.__ne__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__ne__">__ne__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__ne__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__ne__-expanded"><a name="L1220"></a><tt class="py-lineno">1220</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1221"></a><tt class="py-lineno">1221</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1222"></a><tt class="py-lineno">1222</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1223"></a><tt class="py-lineno">1223</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are not the same as</tt> </tt>
-<a name="L1224"></a><tt class="py-lineno">1224</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L1225"></a><tt class="py-lineno">1225</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1226"></a><tt class="py-lineno">1226</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1227"></a><tt class="py-lineno">1227</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-610" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-610', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-611" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-611', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-612" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-612', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> \ </tt>
-<a name="L1228"></a><tt class="py-lineno">1228</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-613" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-613', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-614" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-614', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-615" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-615', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1229"></a><tt class="py-lineno">1229</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1230"></a><tt class="py-lineno">1230</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1231"></a><tt class="py-lineno">1231</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__lt__"></a><div id="IPRange.__lt__-def"><a name="L1232"></a><tt class="py-lineno">1232</tt> <a class="py-toggle" href="#" id="IPRange.__lt__-toggle" onclick="return toggle('IPRange.__lt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__lt__">__lt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__lt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__lt__-expanded"><a name="L1233"></a><tt class="py-lineno">1233</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1234"></a><tt class="py-lineno">1234</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1235"></a><tt class="py-lineno">1235</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1236"></a><tt class="py-lineno">1236</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are less than other,</tt> </tt>
-<a name="L1237"></a><tt class="py-lineno">1237</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L1238"></a><tt class="py-lineno">1238</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1239"></a><tt class="py-lineno">1239</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1240"></a><tt class="py-lineno">1240</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-616" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-616', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-617" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-617', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-618" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-618', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">&lt;</tt> \ </tt>
-<a name="L1241"></a><tt class="py-lineno">1241</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-619" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-619', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-620" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-620', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-621" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-621', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1242"></a><tt class="py-lineno">1242</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1243"></a><tt class="py-lineno">1243</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1244"></a><tt class="py-lineno">1244</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__le__"></a><div id="IPRange.__le__-def"><a name="L1245"></a><tt class="py-lineno">1245</tt> <a class="py-toggle" href="#" id="IPRange.__le__-toggle" onclick="return toggle('IPRange.__le__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__le__">__le__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__le__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__le__-expanded"><a name="L1246"></a><tt class="py-lineno">1246</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1247"></a><tt class="py-lineno">1247</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1248"></a><tt class="py-lineno">1248</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1249"></a><tt class="py-lineno">1249</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are less or equal to</tt> </tt>
-<a name="L1250"></a><tt class="py-lineno">1250</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L1251"></a><tt class="py-lineno">1251</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1252"></a><tt class="py-lineno">1252</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1253"></a><tt class="py-lineno">1253</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-622" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-622', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-623" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-623', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-624" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-624', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> \ </tt>
-<a name="L1254"></a><tt class="py-lineno">1254</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-625" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-625', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-626" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-626', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-627" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-627', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1255"></a><tt class="py-lineno">1255</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1256"></a><tt class="py-lineno">1256</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1257"></a><tt class="py-lineno">1257</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__gt__"></a><div id="IPRange.__gt__-def"><a name="L1258"></a><tt class="py-lineno">1258</tt> <a class="py-toggle" href="#" id="IPRange.__gt__-toggle" onclick="return toggle('IPRange.__gt__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__gt__">__gt__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__gt__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__gt__-expanded"><a name="L1259"></a><tt class="py-lineno">1259</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1260"></a><tt class="py-lineno">1260</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1261"></a><tt class="py-lineno">1261</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1262"></a><tt class="py-lineno">1262</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are greater than</tt> </tt>
-<a name="L1263"></a><tt class="py-lineno">1263</tt> <tt class="py-line"><tt class="py-docstring"> other, C{False} otherwise.</tt> </tt>
-<a name="L1264"></a><tt class="py-lineno">1264</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1265"></a><tt class="py-lineno">1265</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1266"></a><tt class="py-lineno">1266</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-628" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-628', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-629" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-629', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-630" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-630', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> \ </tt>
-<a name="L1267"></a><tt class="py-lineno">1267</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-631" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-631', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-632" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-632', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-633" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-633', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1268"></a><tt class="py-lineno">1268</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1269"></a><tt class="py-lineno">1269</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1270"></a><tt class="py-lineno">1270</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__ge__"></a><div id="IPRange.__ge__-def"><a name="L1271"></a><tt class="py-lineno">1271</tt> <a class="py-toggle" href="#" id="IPRange.__ge__-toggle" onclick="return toggle('IPRange.__ge__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__ge__">__ge__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__ge__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__ge__-expanded"><a name="L1272"></a><tt class="py-lineno">1272</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1273"></a><tt class="py-lineno">1273</tt> <tt class="py-line"><tt class="py-docstring"> @param other: an address object of the same address type as C{self}.</tt> </tt>
-<a name="L1274"></a><tt class="py-lineno">1274</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1275"></a><tt class="py-lineno">1275</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if the boundaries of this range are greater or equal</tt> </tt>
-<a name="L1276"></a><tt class="py-lineno">1276</tt> <tt class="py-line"><tt class="py-docstring"> to other, C{False} otherwise.</tt> </tt>
-<a name="L1277"></a><tt class="py-lineno">1277</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1278"></a><tt class="py-lineno">1278</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1279"></a><tt class="py-lineno">1279</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-634" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-634', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-635" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-635', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-636" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-636', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> \ </tt>
-<a name="L1280"></a><tt class="py-lineno">1280</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-637" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-637', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-638" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-638', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-639" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-639', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1281"></a><tt class="py-lineno">1281</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1282"></a><tt class="py-lineno">1282</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1283"></a><tt class="py-lineno">1283</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__iadd__"></a><div id="IPRange.__iadd__-def"><a name="L1284"></a><tt class="py-lineno">1284</tt> <a class="py-toggle" href="#" id="IPRange.__iadd__-toggle" onclick="return toggle('IPRange.__iadd__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__iadd__">__iadd__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__iadd__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__iadd__-expanded"><a name="L1285"></a><tt class="py-lineno">1285</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1286"></a><tt class="py-lineno">1286</tt> <tt class="py-line"><tt class="py-docstring"> Increments start and end addresses of this range by the current size.</tt> </tt>
-<a name="L1287"></a><tt class="py-lineno">1287</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1288"></a><tt class="py-lineno">1288</tt> <tt class="py-line"><tt class="py-docstring"> Raises IndexError if the result exceeds address range maximum.</tt> </tt>
-<a name="L1289"></a><tt class="py-lineno">1289</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1290"></a><tt class="py-lineno">1290</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1291"></a><tt class="py-lineno">1291</tt> <tt class="py-line"> <tt class="py-name">new_first</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-640" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-640', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-641" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-641', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
-<a name="L1292"></a><tt class="py-lineno">1292</tt> <tt class="py-line"> <tt class="py-name">new_last</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-642" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-642', 'last', 'link-372');">last</a></tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-643" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-643', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
-<a name="L1293"></a><tt class="py-lineno">1293</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1294"></a><tt class="py-lineno">1294</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Increment value must be an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1295"></a><tt class="py-lineno">1295</tt> <tt class="py-line"> </tt>
-<a name="L1296"></a><tt class="py-lineno">1296</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_last</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-644" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-644', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt><tt class="py-op">:</tt> </tt>
-<a name="L1297"></a><tt class="py-lineno">1297</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid increment is outside address boundary!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1298"></a><tt class="py-lineno">1298</tt> <tt class="py-line"> </tt>
-<a name="L1299"></a><tt class="py-lineno">1299</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-645" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-645', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_first</tt> </tt>
-<a name="L1300"></a><tt class="py-lineno">1300</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-646" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-646', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_last</tt> </tt>
-<a name="L1301"></a><tt class="py-lineno">1301</tt> <tt class="py-line"> </tt>
-<a name="L1302"></a><tt class="py-lineno">1302</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
-</div><a name="L1303"></a><tt class="py-lineno">1303</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__isub__"></a><div id="IPRange.__isub__-def"><a name="L1304"></a><tt class="py-lineno">1304</tt> <a class="py-toggle" href="#" id="IPRange.__isub__-toggle" onclick="return toggle('IPRange.__isub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__isub__">__isub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">i</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__isub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__isub__-expanded"><a name="L1305"></a><tt class="py-lineno">1305</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1306"></a><tt class="py-lineno">1306</tt> <tt class="py-line"><tt class="py-docstring"> Decrements start and end addresses of this range by the current size.</tt> </tt>
-<a name="L1307"></a><tt class="py-lineno">1307</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1308"></a><tt class="py-lineno">1308</tt> <tt class="py-line"><tt class="py-docstring"> Raises IndexError if the result is less than zero.</tt> </tt>
-<a name="L1309"></a><tt class="py-lineno">1309</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1310"></a><tt class="py-lineno">1310</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1311"></a><tt class="py-lineno">1311</tt> <tt class="py-line"> <tt class="py-name">new_first</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-647" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-647', 'first', 'link-110');">first</a></tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-648" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-648', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
-<a name="L1312"></a><tt class="py-lineno">1312</tt> <tt class="py-line"> <tt class="py-name">new_last</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-649" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-649', 'last', 'link-372');">last</a></tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-650" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-650', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt><tt class="py-op">)</tt> </tt>
-<a name="L1313"></a><tt class="py-lineno">1313</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1314"></a><tt class="py-lineno">1314</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Decrement value must be an integer!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1315"></a><tt class="py-lineno">1315</tt> <tt class="py-line"> </tt>
-<a name="L1316"></a><tt class="py-lineno">1316</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_last</tt> <tt class="py-op">&lt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L1317"></a><tt class="py-lineno">1317</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid decrement is outside address boundary!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1318"></a><tt class="py-lineno">1318</tt> <tt class="py-line"> </tt>
-<a name="L1319"></a><tt class="py-lineno">1319</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-651" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-651', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_first</tt> </tt>
-<a name="L1320"></a><tt class="py-lineno">1320</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-652" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-652', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt class="py-name">new_last</tt> </tt>
-<a name="L1321"></a><tt class="py-lineno">1321</tt> <tt class="py-line"> </tt>
-<a name="L1322"></a><tt class="py-lineno">1322</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt> </tt>
-</div><a name="L1323"></a><tt class="py-lineno">1323</tt> <tt class="py-line"> </tt>
-<a name="IPRange.iprange"></a><div id="IPRange.iprange-def"><a name="L1324"></a><tt class="py-lineno">1324</tt> <a class="py-toggle" href="#" id="IPRange.iprange-toggle" onclick="return toggle('IPRange.iprange');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#iprange">iprange</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.iprange-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.iprange-expanded"><a name="L1325"></a><tt class="py-lineno">1325</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1326"></a><tt class="py-lineno">1326</tt> <tt class="py-line"><tt class="py-docstring"> @return: A valid L{IPRange} object for this address range.</tt> </tt>
-<a name="L1327"></a><tt class="py-lineno">1327</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1328"></a><tt class="py-lineno">1328</tt> <tt class="py-line"> <tt class="py-comment">#TODO: this can be optimised.</tt> </tt>
-<a name="L1329"></a><tt class="py-lineno">1329</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">ip_range</tt> <tt class="py-op">=</tt> <tt id="link-653" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-653', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-654" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-654', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-655" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-655', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-656" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-656', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1330"></a><tt class="py-lineno">1330</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-657" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-657', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-658" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-658', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-659" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-659', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1331"></a><tt class="py-lineno">1331</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-660" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-660', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">==</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
-<a name="L1332"></a><tt class="py-lineno">1332</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">ip_range</tt><tt class="py-op">)</tt> </tt>
-<a name="L1333"></a><tt class="py-lineno">1333</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">ip_range</tt> </tt>
-</div><a name="L1334"></a><tt class="py-lineno">1334</tt> <tt class="py-line"> </tt>
-<a name="IPRange.cidrs"></a><div id="IPRange.cidrs-def"><a name="L1335"></a><tt class="py-lineno">1335</tt> <a class="py-toggle" href="#" id="IPRange.cidrs-toggle" onclick="return toggle('IPRange.cidrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#cidrs">cidrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.cidrs-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.cidrs-expanded"><a name="L1336"></a><tt class="py-lineno">1336</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1337"></a><tt class="py-lineno">1337</tt> <tt class="py-line"><tt class="py-docstring"> @return: A list of one or more L{CIDR} objects covering this address</tt> </tt>
-<a name="L1338"></a><tt class="py-lineno">1338</tt> <tt class="py-line"><tt class="py-docstring"> range. B{Please Note:} a list is returned even if this range maps</tt> </tt>
-<a name="L1339"></a><tt class="py-lineno">1339</tt> <tt class="py-line"><tt class="py-docstring"> to a single CIDR because arbitrary ranges may not be aligned with</tt> </tt>
-<a name="L1340"></a><tt class="py-lineno">1340</tt> <tt class="py-line"><tt class="py-docstring"> base 2 subnet sizes and will therefore return multiple CIDRs.</tt> </tt>
-<a name="L1341"></a><tt class="py-lineno">1341</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1342"></a><tt class="py-lineno">1342</tt> <tt class="py-line"> <tt class="py-comment"># This can probably be tidied up a bit but I'm really proud of this</tt> </tt>
-<a name="L1343"></a><tt class="py-lineno">1343</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># method. It is one seriously sweet piece of code!!!</tt> </tt>
-<a name="L1344"></a><tt class="py-lineno">1344</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">cidr_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1345"></a><tt class="py-lineno">1345</tt> <tt class="py-line"> </tt>
-<a name="L1346"></a><tt class="py-lineno">1346</tt> <tt class="py-line"> <tt class="py-comment"># Get spanning CIDR covering both addresses.</tt> </tt>
-<a name="L1347"></a><tt class="py-lineno">1347</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt id="link-661" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-661', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-662" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-662', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-663" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-663', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1348"></a><tt class="py-lineno">1348</tt> <tt class="py-line"> <tt class="py-name">end</tt> <tt class="py-op">=</tt> <tt id="link-664" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-664', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-665" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-665', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-666" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-666', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1349"></a><tt class="py-lineno">1349</tt> <tt class="py-line"> </tt>
-<a name="L1350"></a><tt class="py-lineno">1350</tt> <tt class="py-line"> <tt class="py-name">cidr_span</tt> <tt class="py-op">=</tt> <tt id="link-667" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-667', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">.</tt><tt id="link-668" class="py-name" targets="Static Method netaddr.address.CIDR.span()=netaddr.address.CIDR-class.html#span"><a title="netaddr.address.CIDR.span" class="py-name" href="#" onclick="return doclink('link-668', 'span', 'link-668');">span</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">end</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1351"></a><tt class="py-lineno">1351</tt> <tt class="py-line"> </tt>
-<a name="L1352"></a><tt class="py-lineno">1352</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-669" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-669', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-670" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-670', 'first', 'link-110');">first</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-671" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-671', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-672" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-672', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1353"></a><tt class="py-lineno">1353</tt> <tt class="py-line"> <tt class="py-comment"># Spanning CIDR matches start and end exactly.</tt> </tt>
-<a name="L1354"></a><tt class="py-lineno">1354</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">cidr_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">cidr_span</tt><tt class="py-op">]</tt> </tt>
-<a name="L1355"></a><tt class="py-lineno">1355</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-673" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-673', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-674" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-674', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1356"></a><tt class="py-lineno">1356</tt> <tt class="py-line"> <tt class="py-comment"># Spanning CIDR matches end exactly.</tt> </tt>
-<a name="L1357"></a><tt class="py-lineno">1357</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-675" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-675', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-676" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-676', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
-<a name="L1358"></a><tt class="py-lineno">1358</tt> <tt class="py-line"> <tt class="py-name">first_int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-677" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-677', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1359"></a><tt class="py-lineno">1359</tt> <tt class="py-line"> <tt id="link-678" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-678', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1360"></a><tt class="py-lineno">1360</tt> <tt class="py-line"> <tt class="py-name">cidr_remainder</tt> <tt class="py-op">=</tt> <tt class="py-name">cidr_span</tt> <tt class="py-op">-</tt> <tt id="link-679" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-679', 'ip', 'link-75');">ip</a></tt> </tt>
-<a name="L1361"></a><tt class="py-lineno">1361</tt> <tt class="py-line"> </tt>
-<a name="L1362"></a><tt class="py-lineno">1362</tt> <tt class="py-line"> <tt class="py-name">first_found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1363"></a><tt class="py-lineno">1363</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-680" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-680', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">cidr_remainder</tt><tt class="py-op">:</tt> </tt>
-<a name="L1364"></a><tt class="py-lineno">1364</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-681" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-681', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-682" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-682', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-name">first_int_val</tt><tt class="py-op">:</tt> </tt>
-<a name="L1365"></a><tt class="py-lineno">1365</tt> <tt class="py-line"> <tt class="py-name">first_found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1366"></a><tt class="py-lineno">1366</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">first_found</tt><tt class="py-op">:</tt> </tt>
-<a name="L1367"></a><tt class="py-lineno">1367</tt> <tt class="py-line"> <tt class="py-name">cidr_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-683" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-683', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1368"></a><tt class="py-lineno">1368</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-684" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-684', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-685" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-685', 'first', 'link-110');">first</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1369"></a><tt class="py-lineno">1369</tt> <tt class="py-line"> <tt class="py-comment"># Spanning CIDR matches start exactly.</tt> </tt>
-<a name="L1370"></a><tt class="py-lineno">1370</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-686" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-686', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-687" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-687', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">end</tt><tt class="py-op">)</tt> </tt>
-<a name="L1371"></a><tt class="py-lineno">1371</tt> <tt class="py-line"> <tt class="py-name">last_int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-688" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-688', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1372"></a><tt class="py-lineno">1372</tt> <tt class="py-line"> <tt id="link-689" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-689', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1373"></a><tt class="py-lineno">1373</tt> <tt class="py-line"> <tt class="py-name">cidr_remainder</tt> <tt class="py-op">=</tt> <tt class="py-name">cidr_span</tt> <tt class="py-op">-</tt> <tt id="link-690" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-690', 'ip', 'link-75');">ip</a></tt> </tt>
-<a name="L1374"></a><tt class="py-lineno">1374</tt> <tt class="py-line"> </tt>
-<a name="L1375"></a><tt class="py-lineno">1375</tt> <tt class="py-line"> <tt class="py-name">last_found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1376"></a><tt class="py-lineno">1376</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-691" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-691', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">cidr_remainder</tt><tt class="py-op">:</tt> </tt>
-<a name="L1377"></a><tt class="py-lineno">1377</tt> <tt class="py-line"> <tt class="py-name">cidr_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-692" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-692', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1378"></a><tt class="py-lineno">1378</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-693" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-693', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-694" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-694', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-name">last_int_val</tt><tt class="py-op">:</tt> </tt>
-<a name="L1379"></a><tt class="py-lineno">1379</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L1380"></a><tt class="py-lineno">1380</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-695" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-695', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-696" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-696', 'first', 'link-110');">first</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">cidr_span</tt><tt class="py-op">.</tt><tt id="link-697" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-697', 'last', 'link-372');">last</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-698" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-698', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1381"></a><tt class="py-lineno">1381</tt> <tt class="py-line"> <tt class="py-comment"># Spanning CIDR overlaps start and end.</tt> </tt>
-<a name="L1382"></a><tt class="py-lineno">1382</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-699" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-699', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-700" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-700', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">)</tt> </tt>
-<a name="L1383"></a><tt class="py-lineno">1383</tt> <tt class="py-line"> <tt class="py-name">first_int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-701" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-701', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1384"></a><tt class="py-lineno">1384</tt> <tt class="py-line"> <tt id="link-702" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-702', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1385"></a><tt class="py-lineno">1385</tt> <tt class="py-line"> <tt class="py-name">cidr_remainder</tt> <tt class="py-op">=</tt> <tt class="py-name">cidr_span</tt> <tt class="py-op">-</tt> <tt id="link-703" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-703', 'ip', 'link-75');">ip</a></tt> </tt>
-<a name="L1386"></a><tt class="py-lineno">1386</tt> <tt class="py-line"> </tt>
-<a name="L1387"></a><tt class="py-lineno">1387</tt> <tt class="py-line"> <tt class="py-comment"># Fix start.</tt> </tt>
-<a name="L1388"></a><tt class="py-lineno">1388</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">first_found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1389"></a><tt class="py-lineno">1389</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-704" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-704', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">cidr_remainder</tt><tt class="py-op">:</tt> </tt>
-<a name="L1390"></a><tt class="py-lineno">1390</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-705" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-705', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-706" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-706', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-name">first_int_val</tt><tt class="py-op">:</tt> </tt>
-<a name="L1391"></a><tt class="py-lineno">1391</tt> <tt class="py-line"> <tt class="py-name">first_found</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1392"></a><tt class="py-lineno">1392</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">first_found</tt><tt class="py-op">:</tt> </tt>
-<a name="L1393"></a><tt class="py-lineno">1393</tt> <tt class="py-line"> <tt class="py-name">cidr_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-707" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-707', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1394"></a><tt class="py-lineno">1394</tt> <tt class="py-line"> </tt>
-<a name="L1395"></a><tt class="py-lineno">1395</tt> <tt class="py-line"> <tt class="py-comment"># Fix end.</tt> </tt>
-<a name="L1396"></a><tt class="py-lineno">1396</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-708" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-708', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-709" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-709', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">end</tt><tt class="py-op">)</tt> </tt>
-<a name="L1397"></a><tt class="py-lineno">1397</tt> <tt class="py-line"> <tt class="py-name">last_int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-710" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-710', 'ip', 'link-75');">ip</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1398"></a><tt class="py-lineno">1398</tt> <tt class="py-line"> <tt id="link-711" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-711', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1399"></a><tt class="py-lineno">1399</tt> <tt class="py-line"> <tt class="py-name">cidr_remainder</tt> <tt class="py-op">=</tt> <tt class="py-name">cidr_list</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-712" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-712', 'ip', 'link-75');">ip</a></tt> </tt>
-<a name="L1400"></a><tt class="py-lineno">1400</tt> <tt class="py-line"> </tt>
-<a name="L1401"></a><tt class="py-lineno">1401</tt> <tt class="py-line"> <tt class="py-name">last_found</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1402"></a><tt class="py-lineno">1402</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-713" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-713', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">cidr_remainder</tt><tt class="py-op">:</tt> </tt>
-<a name="L1403"></a><tt class="py-lineno">1403</tt> <tt class="py-line"> <tt class="py-name">cidr_list</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-714" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-714', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1404"></a><tt class="py-lineno">1404</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-715" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-715', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-716" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-716', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-name">last_int_val</tt><tt class="py-op">:</tt> </tt>
-<a name="L1405"></a><tt class="py-lineno">1405</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L1406"></a><tt class="py-lineno">1406</tt> <tt class="py-line"> </tt>
-<a name="L1407"></a><tt class="py-lineno">1407</tt> <tt class="py-line"> <tt class="py-comment"># Return address list in requested format.</tt> </tt>
-<a name="L1408"></a><tt class="py-lineno">1408</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-717" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-717', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1409"></a><tt class="py-lineno">1409</tt> <tt class="py-line"> <tt class="py-name">cidr_list</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-718" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-718', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">c</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">c</tt> <tt class="py-keyword">in</tt> <tt class="py-name">cidr_list</tt><tt class="py-op">]</tt> </tt>
-<a name="L1410"></a><tt class="py-lineno">1410</tt> <tt class="py-line"> </tt>
-<a name="L1411"></a><tt class="py-lineno">1411</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">cidr_list</tt> </tt>
-</div><a name="L1412"></a><tt class="py-lineno">1412</tt> <tt class="py-line"> </tt>
-<a name="IPRange.wildcard"></a><div id="IPRange.wildcard-def"><a name="L1413"></a><tt class="py-lineno">1413</tt> <a class="py-toggle" href="#" id="IPRange.wildcard-toggle" onclick="return toggle('IPRange.wildcard');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#wildcard">wildcard</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.wildcard-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.wildcard-expanded"><a name="L1414"></a><tt class="py-lineno">1414</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1415"></a><tt class="py-lineno">1415</tt> <tt class="py-line"><tt class="py-docstring"> @return: A L{Wildcard} object equivalent to this CIDR.</tt> </tt>
-<a name="L1416"></a><tt class="py-lineno">1416</tt> <tt class="py-line"><tt class="py-docstring"> - If CIDR was initialised with C{fmt=str}, a wildcard string</tt> </tt>
-<a name="L1417"></a><tt class="py-lineno">1417</tt> <tt class="py-line"><tt class="py-docstring"> is returned, in all other cases a L{Wildcard} object is</tt> </tt>
-<a name="L1418"></a><tt class="py-lineno">1418</tt> <tt class="py-line"><tt class="py-docstring"> returned.</tt> </tt>
-<a name="L1419"></a><tt class="py-lineno">1419</tt> <tt class="py-line"><tt class="py-docstring"> - Only supports IPv4 CIDR addresses.</tt> </tt>
-<a name="L1420"></a><tt class="py-lineno">1420</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1421"></a><tt class="py-lineno">1421</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-719" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-719', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-720" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-720', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-721" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-721', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1422"></a><tt class="py-lineno">1422</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-722" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-722', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-723" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-723', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-724" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-724', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1423"></a><tt class="py-lineno">1423</tt> <tt class="py-line"> </tt>
-<a name="L1424"></a><tt class="py-lineno">1424</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-725" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-725', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt id="link-726" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-726', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1425"></a><tt class="py-lineno">1425</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-727" class="py-name"><a title="netaddr.AddrConversionError" class="py-name" href="#" onclick="return doclink('link-727', 'AddrConversionError', 'link-2');">AddrConversionError</a></tt><tt class="py-op">(</tt><tt class="py-string">'wildcards only suitable for IPv4 '</tt> \ </tt>
-<a name="L1426"></a><tt class="py-lineno">1426</tt> <tt class="py-line"> <tt class="py-string">'ranges!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1427"></a><tt class="py-lineno">1427</tt> <tt class="py-line"> </tt>
-<a name="L1428"></a><tt class="py-lineno">1428</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1429"></a><tt class="py-lineno">1429</tt> <tt class="py-line"> </tt>
-<a name="L1430"></a><tt class="py-lineno">1430</tt> <tt class="py-line"> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1431"></a><tt class="py-lineno">1431</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L1432"></a><tt class="py-lineno">1432</tt> <tt class="py-line"> </tt>
-<a name="L1433"></a><tt class="py-lineno">1433</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1434"></a><tt class="py-lineno">1434</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L1435"></a><tt class="py-lineno">1435</tt> <tt class="py-line"> <tt class="py-comment"># A normal octet.</tt> </tt>
-<a name="L1436"></a><tt class="py-lineno">1436</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1437"></a><tt class="py-lineno">1437</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">255</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1438"></a><tt class="py-lineno">1438</tt> <tt class="py-line"> <tt class="py-comment"># An asterisk octet.</tt> </tt>
-<a name="L1439"></a><tt class="py-lineno">1439</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'*'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1440"></a><tt class="py-lineno">1440</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1441"></a><tt class="py-lineno">1441</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1442"></a><tt class="py-lineno">1442</tt> <tt class="py-line"> <tt class="py-comment"># Create a hyphenated octet - only one allowed per wildcard.</tt> </tt>
-<a name="L1443"></a><tt class="py-lineno">1443</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">seen_asterisk</tt><tt class="py-op">:</tt> </tt>
-<a name="L1444"></a><tt class="py-lineno">1444</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">seen_hyphen</tt><tt class="py-op">:</tt> </tt>
-<a name="L1445"></a><tt class="py-lineno">1445</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'%s-%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1446"></a><tt class="py-lineno">1446</tt> <tt class="py-line"> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1447"></a><tt class="py-lineno">1447</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1448"></a><tt class="py-lineno">1448</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">SyntaxError</tt><tt class="py-op">(</tt><tt class="py-string">'only one hyphenated octet per '</tt> \ </tt>
-<a name="L1449"></a><tt class="py-lineno">1449</tt> <tt class="py-line"> <tt class="py-string">'wildcard permitted!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1450"></a><tt class="py-lineno">1450</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1451"></a><tt class="py-lineno">1451</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">SyntaxError</tt><tt class="py-op">(</tt><tt class="py-string">"* chars aren't permitted before ' \</tt> </tt>
-<a name="L1452"></a><tt class="py-lineno">1452</tt> <tt class="py-line"><tt class="py-string"> 'hyphenated octets!"</tt><tt class="py-op">)</tt> </tt>
-<a name="L1453"></a><tt class="py-lineno">1453</tt> <tt class="py-line"> </tt>
-<a name="L1454"></a><tt class="py-lineno">1454</tt> <tt class="py-line"> <tt id="link-728" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-728', 'wildcard', 'link-361');">wildcard</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-<a name="L1455"></a><tt class="py-lineno">1455</tt> <tt class="py-line"> </tt>
-<a name="L1456"></a><tt class="py-lineno">1456</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-729" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-729', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">==</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
-<a name="L1457"></a><tt class="py-lineno">1457</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-730" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-730', 'wildcard', 'link-361');">wildcard</a></tt> </tt>
-<a name="L1458"></a><tt class="py-lineno">1458</tt> <tt class="py-line"> </tt>
-<a name="L1459"></a><tt class="py-lineno">1459</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-731" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-731', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">(</tt><tt id="link-732" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-732', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1460"></a><tt class="py-lineno">1460</tt> <tt class="py-line"> </tt>
-<a name="IPRange.issubnet"></a><div id="IPRange.issubnet-def"><a name="L1461"></a><tt class="py-lineno">1461</tt> <a class="py-toggle" href="#" id="IPRange.issubnet-toggle" onclick="return toggle('IPRange.issubnet');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#issubnet">issubnet</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.issubnet-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.issubnet-expanded"><a name="L1462"></a><tt class="py-lineno">1462</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1463"></a><tt class="py-lineno">1463</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if other's boundary is equal to or within this range.</tt> </tt>
-<a name="L1464"></a><tt class="py-lineno">1464</tt> <tt class="py-line"><tt class="py-docstring"> False otherwise.</tt> </tt>
-<a name="L1465"></a><tt class="py-lineno">1465</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1466"></a><tt class="py-lineno">1466</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1467"></a><tt class="py-lineno">1467</tt> <tt class="py-line"> <tt class="py-name">other</tt> <tt class="py-op">=</tt> <tt id="link-733" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-733', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1468"></a><tt class="py-lineno">1468</tt> <tt class="py-line"> </tt>
-<a name="L1469"></a><tt class="py-lineno">1469</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-string">'addr_type'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1470"></a><tt class="py-lineno">1470</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported argument type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1471"></a><tt class="py-lineno">1471</tt> <tt class="py-line"> </tt>
-<a name="L1472"></a><tt class="py-lineno">1472</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-734" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-734', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-735" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-735', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1473"></a><tt class="py-lineno">1473</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Ranges must be the same address type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1474"></a><tt class="py-lineno">1474</tt> <tt class="py-line"> </tt>
-<a name="L1475"></a><tt class="py-lineno">1475</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-736" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-736', 'first', 'link-110');">first</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-737" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-737', 'first', 'link-110');">first</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-738" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-738', 'last', 'link-372');">last</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-739" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-739', 'last', 'link-372');">last</a></tt> </tt>
-</div><a name="L1476"></a><tt class="py-lineno">1476</tt> <tt class="py-line"> </tt>
-<a name="IPRange.issupernet"></a><div id="IPRange.issupernet-def"><a name="L1477"></a><tt class="py-lineno">1477</tt> <a class="py-toggle" href="#" id="IPRange.issupernet-toggle" onclick="return toggle('IPRange.issupernet');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#issupernet">issupernet</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.issupernet-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.issupernet-expanded"><a name="L1478"></a><tt class="py-lineno">1478</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1479"></a><tt class="py-lineno">1479</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if other's boundary is equal to or contains this range.</tt> </tt>
-<a name="L1480"></a><tt class="py-lineno">1480</tt> <tt class="py-line"><tt class="py-docstring"> False otherwise.</tt> </tt>
-<a name="L1481"></a><tt class="py-lineno">1481</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1482"></a><tt class="py-lineno">1482</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1483"></a><tt class="py-lineno">1483</tt> <tt class="py-line"> <tt class="py-name">other</tt> <tt class="py-op">=</tt> <tt id="link-740" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-740', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1484"></a><tt class="py-lineno">1484</tt> <tt class="py-line"> </tt>
-<a name="L1485"></a><tt class="py-lineno">1485</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-string">'addr_type'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1486"></a><tt class="py-lineno">1486</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported argument type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1487"></a><tt class="py-lineno">1487</tt> <tt class="py-line"> </tt>
-<a name="L1488"></a><tt class="py-lineno">1488</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-741" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-741', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-742" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-742', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1489"></a><tt class="py-lineno">1489</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Ranges must be the same address type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1490"></a><tt class="py-lineno">1490</tt> <tt class="py-line"> </tt>
-<a name="L1491"></a><tt class="py-lineno">1491</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-743" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-743', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-744" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-744', 'first', 'link-110');">first</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-745" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-745', 'last', 'link-372');">last</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-746" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-746', 'last', 'link-372');">last</a></tt> </tt>
-</div><a name="L1492"></a><tt class="py-lineno">1492</tt> <tt class="py-line"> </tt>
-<a name="IPRange.adjacent"></a><div id="IPRange.adjacent-def"><a name="L1493"></a><tt class="py-lineno">1493</tt> <a class="py-toggle" href="#" id="IPRange.adjacent-toggle" onclick="return toggle('IPRange.adjacent');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#adjacent">adjacent</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.adjacent-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.adjacent-expanded"><a name="L1494"></a><tt class="py-lineno">1494</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1495"></a><tt class="py-lineno">1495</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if other's boundary touches the boundary of this</tt> </tt>
-<a name="L1496"></a><tt class="py-lineno">1496</tt> <tt class="py-line"><tt class="py-docstring"> address range, False otherwise.</tt> </tt>
-<a name="L1497"></a><tt class="py-lineno">1497</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1498"></a><tt class="py-lineno">1498</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1499"></a><tt class="py-lineno">1499</tt> <tt class="py-line"> <tt class="py-name">other</tt> <tt class="py-op">=</tt> <tt id="link-747" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-747', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1500"></a><tt class="py-lineno">1500</tt> <tt class="py-line"> </tt>
-<a name="L1501"></a><tt class="py-lineno">1501</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-string">'addr_type'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1502"></a><tt class="py-lineno">1502</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported argument type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1503"></a><tt class="py-lineno">1503</tt> <tt class="py-line"> </tt>
-<a name="L1504"></a><tt class="py-lineno">1504</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-748" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-748', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-749" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-749', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1505"></a><tt class="py-lineno">1505</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'addresses must be of the same type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1506"></a><tt class="py-lineno">1506</tt> <tt class="py-line"> </tt>
-<a name="L1507"></a><tt class="py-lineno">1507</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-750" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-750', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1508"></a><tt class="py-lineno">1508</tt> <tt class="py-line"> <tt class="py-comment"># Left hand side of this address range.</tt> </tt>
-<a name="L1509"></a><tt class="py-lineno">1509</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-751" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-751', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-752" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-752', 'last', 'link-372');">last</a></tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1510"></a><tt class="py-lineno">1510</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1511"></a><tt class="py-lineno">1511</tt> <tt class="py-line"> </tt>
-<a name="L1512"></a><tt class="py-lineno">1512</tt> <tt class="py-line"> <tt class="py-comment"># Right hand side of this address range.</tt> </tt>
-<a name="L1513"></a><tt class="py-lineno">1513</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-753" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-753', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-754" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-754', 'first', 'link-110');">first</a></tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1514"></a><tt class="py-lineno">1514</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1515"></a><tt class="py-lineno">1515</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt id="link-755" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-755', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1516"></a><tt class="py-lineno">1516</tt> <tt class="py-line"> <tt class="py-comment"># Left hand side of this address range.</tt> </tt>
-<a name="L1517"></a><tt class="py-lineno">1517</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-756" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-756', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-757" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-757', 'value', 'link-30');">value</a></tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1518"></a><tt class="py-lineno">1518</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1519"></a><tt class="py-lineno">1519</tt> <tt class="py-line"> </tt>
-<a name="L1520"></a><tt class="py-lineno">1520</tt> <tt class="py-line"> <tt class="py-comment"># Right hand side of this address range.</tt> </tt>
-<a name="L1521"></a><tt class="py-lineno">1521</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-758" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-758', 'last', 'link-372');">last</a></tt> <tt class="py-op">==</tt> <tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-759" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-759', 'value', 'link-30');">value</a></tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1522"></a><tt class="py-lineno">1522</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1523"></a><tt class="py-lineno">1523</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1524"></a><tt class="py-lineno">1524</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unexpected error for argument: %r!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1525"></a><tt class="py-lineno">1525</tt> <tt class="py-line"> </tt>
-<a name="L1526"></a><tt class="py-lineno">1526</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1527"></a><tt class="py-lineno">1527</tt> <tt class="py-line"> </tt>
-<a name="IPRange.overlaps"></a><div id="IPRange.overlaps-def"><a name="L1528"></a><tt class="py-lineno">1528</tt> <a class="py-toggle" href="#" id="IPRange.overlaps-toggle" onclick="return toggle('IPRange.overlaps');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#overlaps">overlaps</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.overlaps-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.overlaps-expanded"><a name="L1529"></a><tt class="py-lineno">1529</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1530"></a><tt class="py-lineno">1530</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if other's boundary crosses the boundary of this address</tt> </tt>
-<a name="L1531"></a><tt class="py-lineno">1531</tt> <tt class="py-line"><tt class="py-docstring"> range, False otherwise.</tt> </tt>
-<a name="L1532"></a><tt class="py-lineno">1532</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1533"></a><tt class="py-lineno">1533</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1534"></a><tt class="py-lineno">1534</tt> <tt class="py-line"> <tt class="py-name">other</tt> <tt class="py-op">=</tt> <tt id="link-760" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-760', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1535"></a><tt class="py-lineno">1535</tt> <tt class="py-line"> </tt>
-<a name="L1536"></a><tt class="py-lineno">1536</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">,</tt> <tt class="py-string">'addr_type'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1537"></a><tt class="py-lineno">1537</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is an unsupported argument type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L1538"></a><tt class="py-lineno">1538</tt> <tt class="py-line"> </tt>
-<a name="L1539"></a><tt class="py-lineno">1539</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-761" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-761', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-762" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-762', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1540"></a><tt class="py-lineno">1540</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'Ranges must be the same address type!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1541"></a><tt class="py-lineno">1541</tt> <tt class="py-line"> </tt>
-<a name="L1542"></a><tt class="py-lineno">1542</tt> <tt class="py-line"> <tt class="py-comment"># Left hand side of this address range.</tt> </tt>
-<a name="L1543"></a><tt class="py-lineno">1543</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-763" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-763', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-764" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-764', 'last', 'link-372');">last</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-765" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-765', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1544"></a><tt class="py-lineno">1544</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1545"></a><tt class="py-lineno">1545</tt> <tt class="py-line"> </tt>
-<a name="L1546"></a><tt class="py-lineno">1546</tt> <tt class="py-line"> <tt class="py-comment"># Right hand side of this address range.</tt> </tt>
-<a name="L1547"></a><tt class="py-lineno">1547</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-766" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-766', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-767" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-767', 'first', 'link-110');">first</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-768" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-768', 'last', 'link-372');">last</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1548"></a><tt class="py-lineno">1548</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L1549"></a><tt class="py-lineno">1549</tt> <tt class="py-line"> </tt>
-<a name="L1550"></a><tt class="py-lineno">1550</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L1551"></a><tt class="py-lineno">1551</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__str__"></a><div id="IPRange.__str__-def"><a name="L1552"></a><tt class="py-lineno">1552</tt> <a class="py-toggle" href="#" id="IPRange.__str__-toggle" onclick="return toggle('IPRange.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__str__-expanded"><a name="L1553"></a><tt class="py-lineno">1553</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s-%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-769" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-769', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-770" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-770', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-771" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-771', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1554"></a><tt class="py-lineno">1554</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-772" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-772', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-773" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-773', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-774" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-774', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1555"></a><tt class="py-lineno">1555</tt> <tt class="py-line"> </tt>
-<a name="IPRange.__repr__"></a><div id="IPRange.__repr__-def"><a name="L1556"></a><tt class="py-lineno">1556</tt> <a class="py-toggle" href="#" id="IPRange.__repr__-toggle" onclick="return toggle('IPRange.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRange-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRange.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRange.__repr__-expanded"><a name="L1557"></a><tt class="py-lineno">1557</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L1558"></a><tt class="py-lineno">1558</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s(%r, %r)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> </tt>
-<a name="L1559"></a><tt class="py-lineno">1559</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-775" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-775', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-776" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-776', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-777" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-777', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1560"></a><tt class="py-lineno">1560</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-778" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-778', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-779" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-779', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-780" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-780', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L1561"></a><tt class="py-lineno">1561</tt> <tt class="py-line"> </tt>
-<a name="L1562"></a><tt class="py-lineno">1562</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="CIDR"></a><div id="CIDR-def"><a name="L1563"></a><tt class="py-lineno">1563</tt> <a class="py-toggle" href="#" id="CIDR-toggle" onclick="return toggle('CIDR');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html">CIDR</a><tt class="py-op">(</tt><tt class="py-base-class">IPRange</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="CIDR-expanded"><a name="L1564"></a><tt class="py-lineno">1564</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1565"></a><tt class="py-lineno">1565</tt> <tt class="py-line"><tt class="py-docstring"> Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless</tt> </tt>
-<a name="L1566"></a><tt class="py-lineno">1566</tt> <tt class="py-line"><tt class="py-docstring"> Inter-Domain Routing) notation.</tt> </tt>
-<a name="L1567"></a><tt class="py-lineno">1567</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1568"></a><tt class="py-lineno">1568</tt> <tt class="py-line"><tt class="py-docstring"> CIDR is a method of categorising contiguous blocks of both IPv4 and IPv6</tt> </tt>
-<a name="L1569"></a><tt class="py-lineno">1569</tt> <tt class="py-line"><tt class="py-docstring"> addresses. It is very scalable allowing for the optimal usage of the IP</tt> </tt>
-<a name="L1570"></a><tt class="py-lineno">1570</tt> <tt class="py-line"><tt class="py-docstring"> address space. It permits the aggregation of networks via route</tt> </tt>
-<a name="L1571"></a><tt class="py-lineno">1571</tt> <tt class="py-line"><tt class="py-docstring"> summarisation (supernetting) where adjacent routes can be combined into a</tt> </tt>
-<a name="L1572"></a><tt class="py-lineno">1572</tt> <tt class="py-line"><tt class="py-docstring"> single route easily. This greatly assists in the reduction of routing</tt> </tt>
-<a name="L1573"></a><tt class="py-lineno">1573</tt> <tt class="py-line"><tt class="py-docstring"> table sizes and improves network router efficiency.</tt> </tt>
-<a name="L1574"></a><tt class="py-lineno">1574</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1575"></a><tt class="py-lineno">1575</tt> <tt class="py-line"><tt class="py-docstring"> CIDR blocks are represented by a base network address and a prefix</tt> </tt>
-<a name="L1576"></a><tt class="py-lineno">1576</tt> <tt class="py-line"><tt class="py-docstring"> indicating the size of the (variable length) subnet mask. These are</tt> </tt>
-<a name="L1577"></a><tt class="py-lineno">1577</tt> <tt class="py-line"><tt class="py-docstring"> separated by a single '/' character. Subnet sizes increase in powers of</tt> </tt>
-<a name="L1578"></a><tt class="py-lineno">1578</tt> <tt class="py-line"><tt class="py-docstring"> base 2 aligning to bit boundaries.</tt> </tt>
-<a name="L1579"></a><tt class="py-lineno">1579</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1580"></a><tt class="py-lineno">1580</tt> <tt class="py-line"><tt class="py-docstring"> It is technically invalid to have non-zero bits in a CIDR address to the</tt> </tt>
-<a name="L1581"></a><tt class="py-lineno">1581</tt> <tt class="py-line"><tt class="py-docstring"> right of the implied netmask. For user convenience this is however</tt> </tt>
-<a name="L1582"></a><tt class="py-lineno">1582</tt> <tt class="py-line"><tt class="py-docstring"> configurable and can be disabled using a constructor argument.</tt> </tt>
-<a name="L1583"></a><tt class="py-lineno">1583</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1584"></a><tt class="py-lineno">1584</tt> <tt class="py-line"><tt class="py-docstring"> The constructor accepts CIDRs expressed in one of 4 different ways :-</tt> </tt>
-<a name="L1585"></a><tt class="py-lineno">1585</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1586"></a><tt class="py-lineno">1586</tt> <tt class="py-line"><tt class="py-docstring"> A) Standard CIDR format :-</tt> </tt>
-<a name="L1587"></a><tt class="py-lineno">1587</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1588"></a><tt class="py-lineno">1588</tt> <tt class="py-line"><tt class="py-docstring"> IPv4::</tt> </tt>
-<a name="L1589"></a><tt class="py-lineno">1589</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1590"></a><tt class="py-lineno">1590</tt> <tt class="py-line"><tt class="py-docstring"> x.x.x.x/y -&gt; 192.0.2.0/24</tt> </tt>
-<a name="L1591"></a><tt class="py-lineno">1591</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1592"></a><tt class="py-lineno">1592</tt> <tt class="py-line"><tt class="py-docstring"> where the x's represent the network address and y is the netmask</tt> </tt>
-<a name="L1593"></a><tt class="py-lineno">1593</tt> <tt class="py-line"><tt class="py-docstring"> prefix between 0 and 32.</tt> </tt>
-<a name="L1594"></a><tt class="py-lineno">1594</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1595"></a><tt class="py-lineno">1595</tt> <tt class="py-line"><tt class="py-docstring"> IPv6::</tt> </tt>
-<a name="L1596"></a><tt class="py-lineno">1596</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1597"></a><tt class="py-lineno">1597</tt> <tt class="py-line"><tt class="py-docstring"> x::/y -&gt; fe80::/10</tt> </tt>
-<a name="L1598"></a><tt class="py-lineno">1598</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1599"></a><tt class="py-lineno">1599</tt> <tt class="py-line"><tt class="py-docstring"> where the x's represent the network address and y is the netmask</tt> </tt>
-<a name="L1600"></a><tt class="py-lineno">1600</tt> <tt class="py-line"><tt class="py-docstring"> prefix between 0 and 128.</tt> </tt>
-<a name="L1601"></a><tt class="py-lineno">1601</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1602"></a><tt class="py-lineno">1602</tt> <tt class="py-line"><tt class="py-docstring"> B) Abbreviated CIDR format (IPv4 only)::</tt> </tt>
-<a name="L1603"></a><tt class="py-lineno">1603</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1604"></a><tt class="py-lineno">1604</tt> <tt class="py-line"><tt class="py-docstring"> x -&gt; 192</tt> </tt>
-<a name="L1605"></a><tt class="py-lineno">1605</tt> <tt class="py-line"><tt class="py-docstring"> x/y -&gt; 10/8</tt> </tt>
-<a name="L1606"></a><tt class="py-lineno">1606</tt> <tt class="py-line"><tt class="py-docstring"> x.x/y -&gt; 192.168/16</tt> </tt>
-<a name="L1607"></a><tt class="py-lineno">1607</tt> <tt class="py-line"><tt class="py-docstring"> x.x.x/y -&gt; 192.168.0/24</tt> </tt>
-<a name="L1608"></a><tt class="py-lineno">1608</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1609"></a><tt class="py-lineno">1609</tt> <tt class="py-line"><tt class="py-docstring"> which are equivalent to::</tt> </tt>
-<a name="L1610"></a><tt class="py-lineno">1610</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1611"></a><tt class="py-lineno">1611</tt> <tt class="py-line"><tt class="py-docstring"> x.0.0.0/y -&gt; 192.0.0.0/24</tt> </tt>
-<a name="L1612"></a><tt class="py-lineno">1612</tt> <tt class="py-line"><tt class="py-docstring"> x.0.0.0/y -&gt; 10.0.0.0/8</tt> </tt>
-<a name="L1613"></a><tt class="py-lineno">1613</tt> <tt class="py-line"><tt class="py-docstring"> x.x.0.0/y -&gt; 192.168.0.0/16</tt> </tt>
-<a name="L1614"></a><tt class="py-lineno">1614</tt> <tt class="py-line"><tt class="py-docstring"> x.x.x.0/y -&gt; 192.168.0.0/24</tt> </tt>
-<a name="L1615"></a><tt class="py-lineno">1615</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1616"></a><tt class="py-lineno">1616</tt> <tt class="py-line"><tt class="py-docstring"> - The trailing zeros are implicit.</tt> </tt>
-<a name="L1617"></a><tt class="py-lineno">1617</tt> <tt class="py-line"><tt class="py-docstring"> - Old classful IP address rules apply if y is omitted.</tt> </tt>
-<a name="L1618"></a><tt class="py-lineno">1618</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1619"></a><tt class="py-lineno">1619</tt> <tt class="py-line"><tt class="py-docstring"> C) Hybrid CIDR format (prefix replaced by netmask) :-</tt> </tt>
-<a name="L1620"></a><tt class="py-lineno">1620</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1621"></a><tt class="py-lineno">1621</tt> <tt class="py-line"><tt class="py-docstring"> IPv4::</tt> </tt>
-<a name="L1622"></a><tt class="py-lineno">1622</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1623"></a><tt class="py-lineno">1623</tt> <tt class="py-line"><tt class="py-docstring"> x.x.x.x/y.y.y.y -&gt; 192.0.2.0/255.255.255.0</tt> </tt>
-<a name="L1624"></a><tt class="py-lineno">1624</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1625"></a><tt class="py-lineno">1625</tt> <tt class="py-line"><tt class="py-docstring"> IPv6::</tt> </tt>
-<a name="L1626"></a><tt class="py-lineno">1626</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1627"></a><tt class="py-lineno">1627</tt> <tt class="py-line"><tt class="py-docstring"> x::/y:: -&gt; fe80::/ffc0::</tt> </tt>
-<a name="L1628"></a><tt class="py-lineno">1628</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1629"></a><tt class="py-lineno">1629</tt> <tt class="py-line"><tt class="py-docstring"> where the y's represent a valid netmask.</tt> </tt>
-<a name="L1630"></a><tt class="py-lineno">1630</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1631"></a><tt class="py-lineno">1631</tt> <tt class="py-line"><tt class="py-docstring"> D) ACL-style CIDR format (prefix is replaced by a hostmask) :-</tt> </tt>
-<a name="L1632"></a><tt class="py-lineno">1632</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1633"></a><tt class="py-lineno">1633</tt> <tt class="py-line"><tt class="py-docstring"> Akin to Cisco's ACL (Access Control List) bitmasking (reverse</tt> </tt>
-<a name="L1634"></a><tt class="py-lineno">1634</tt> <tt class="py-line"><tt class="py-docstring"> netmasks).</tt> </tt>
-<a name="L1635"></a><tt class="py-lineno">1635</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1636"></a><tt class="py-lineno">1636</tt> <tt class="py-line"><tt class="py-docstring"> IPv4::</tt> </tt>
-<a name="L1637"></a><tt class="py-lineno">1637</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1638"></a><tt class="py-lineno">1638</tt> <tt class="py-line"><tt class="py-docstring"> x.x.x.x/y.y.y.y -&gt; 192.0.2.0/0.0.0.255</tt> </tt>
-<a name="L1639"></a><tt class="py-lineno">1639</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1640"></a><tt class="py-lineno">1640</tt> <tt class="py-line"><tt class="py-docstring"> IPv6::</tt> </tt>
-<a name="L1641"></a><tt class="py-lineno">1641</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1642"></a><tt class="py-lineno">1642</tt> <tt class="py-line"><tt class="py-docstring"> x::/y:: -&gt; fe80::/3f:ffff:ffff:ffff:ffff:ffff:ffff:ffff</tt> </tt>
-<a name="L1643"></a><tt class="py-lineno">1643</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1644"></a><tt class="py-lineno">1644</tt> <tt class="py-line"><tt class="py-docstring"> where the y's represent a valid hostmask.</tt> </tt>
-<a name="L1645"></a><tt class="py-lineno">1645</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1646"></a><tt class="py-lineno">1646</tt> <tt class="py-line"><tt class="py-docstring"> Reference: RFCs 1338 and 4632.</tt> </tt>
-<a name="L1647"></a><tt class="py-lineno">1647</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1648"></a><tt class="py-lineno">1648</tt> <tt class="py-line"> <tt id="link-781" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-781', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-782" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-782', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt> <tt id="link-783" class="py-name"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-783', 'ST_IPV6', 'link-12');">ST_IPV6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1649"></a><tt class="py-lineno">1649</tt> <tt class="py-line"> <tt id="link-784" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-784', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-785" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-785', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-786" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-786', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-787" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-787', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1650"></a><tt class="py-lineno">1650</tt> <tt class="py-line"> </tt>
-<a name="L1651"></a><tt class="py-lineno">1651</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L1652"></a><tt class="py-lineno">1652</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-788" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-788', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-789" class="py-name"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-789', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-790" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-790', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1653"></a><tt class="py-lineno">1653</tt> <tt class="py-line"> <tt id="link-791" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-791', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-792" class="py-name"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-792', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-793" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-793', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1654"></a><tt class="py-lineno">1654</tt> <tt class="py-line"> <tt id="link-794" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-794', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-795" class="py-name"><a title="netaddr.address.PrefixLenDescriptor" class="py-name" href="#" onclick="return doclink('link-795', 'PrefixLenDescriptor', 'link-318');">PrefixLenDescriptor</a></tt><tt class="py-op">(</tt><tt class="py-string">'CIDR'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1655"></a><tt class="py-lineno">1655</tt> <tt class="py-line"> <tt id="link-796" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-796', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt id="link-797" class="py-name"><a title="netaddr.address.FormatDescriptor" class="py-name" href="#" onclick="return doclink('link-797', 'FormatDescriptor', 'link-534');">FormatDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-798" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-798', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1656"></a><tt class="py-lineno">1656</tt> <tt class="py-line"> </tt>
-<a name="CIDR.abbrev_to_verbose"></a><div id="CIDR.abbrev_to_verbose-def"><a name="L1657"></a><tt class="py-lineno">1657</tt> <a class="py-toggle" href="#" id="CIDR.abbrev_to_verbose-toggle" onclick="return toggle('CIDR.abbrev_to_verbose');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#abbrev_to_verbose">abbrev_to_verbose</a><tt class="py-op">(</tt><tt class="py-param">abbrev_cidr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.abbrev_to_verbose-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.abbrev_to_verbose-expanded"><a name="L1658"></a><tt class="py-lineno">1658</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1659"></a><tt class="py-lineno">1659</tt> <tt class="py-line"><tt class="py-docstring"> A static method that converts abbreviated IPv4 CIDRs to their more</tt> </tt>
-<a name="L1660"></a><tt class="py-lineno">1660</tt> <tt class="py-line"><tt class="py-docstring"> verbose equivalent.</tt> </tt>
-<a name="L1661"></a><tt class="py-lineno">1661</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1662"></a><tt class="py-lineno">1662</tt> <tt class="py-line"><tt class="py-docstring"> @param abbrev_cidr: an abbreviated CIDR.</tt> </tt>
-<a name="L1663"></a><tt class="py-lineno">1663</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1664"></a><tt class="py-lineno">1664</tt> <tt class="py-line"><tt class="py-docstring"> Uses the old-style classful IP address rules to decide on a default</tt> </tt>
-<a name="L1665"></a><tt class="py-lineno">1665</tt> <tt class="py-line"><tt class="py-docstring"> subnet prefix if one is not explicitly provided.</tt> </tt>
-<a name="L1666"></a><tt class="py-lineno">1666</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1667"></a><tt class="py-lineno">1667</tt> <tt class="py-line"><tt class="py-docstring"> Only supports IPv4 addresses.</tt> </tt>
-<a name="L1668"></a><tt class="py-lineno">1668</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1669"></a><tt class="py-lineno">1669</tt> <tt class="py-line"><tt class="py-docstring"> Examples ::</tt> </tt>
-<a name="L1670"></a><tt class="py-lineno">1670</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1671"></a><tt class="py-lineno">1671</tt> <tt class="py-line"><tt class="py-docstring"> 10 - 10.0.0.0/8</tt> </tt>
-<a name="L1672"></a><tt class="py-lineno">1672</tt> <tt class="py-line"><tt class="py-docstring"> 10/16 - 10.0.0.0/16</tt> </tt>
-<a name="L1673"></a><tt class="py-lineno">1673</tt> <tt class="py-line"><tt class="py-docstring"> 128 - 128.0.0.0/16</tt> </tt>
-<a name="L1674"></a><tt class="py-lineno">1674</tt> <tt class="py-line"><tt class="py-docstring"> 128/8 - 128.0.0.0/8</tt> </tt>
-<a name="L1675"></a><tt class="py-lineno">1675</tt> <tt class="py-line"><tt class="py-docstring"> 192.168 - 192.168.0.0/16</tt> </tt>
-<a name="L1676"></a><tt class="py-lineno">1676</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1677"></a><tt class="py-lineno">1677</tt> <tt class="py-line"><tt class="py-docstring"> @return: A verbose CIDR from an abbreviated CIDR or old-style classful</tt> </tt>
-<a name="L1678"></a><tt class="py-lineno">1678</tt> <tt class="py-line"><tt class="py-docstring"> network address, C{None} if format provided was not recognised or</tt> </tt>
-<a name="L1679"></a><tt class="py-lineno">1679</tt> <tt class="py-line"><tt class="py-docstring"> supported.</tt> </tt>
-<a name="L1680"></a><tt class="py-lineno">1680</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1681"></a><tt class="py-lineno">1681</tt> <tt class="py-line"> <tt class="py-comment"># Internal function that returns a prefix value based on the old IPv4</tt> </tt>
-<a name="L1682"></a><tt class="py-lineno">1682</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># classful network scheme that has been superseded (almost) by CIDR.</tt> </tt>
-<a name="L1683"></a><tt class="py-lineno">1683</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">def</tt> <tt class="py-def-name">classful_prefix</tt><tt class="py-op">(</tt><tt class="py-param">octet</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1684"></a><tt class="py-lineno">1684</tt> <tt class="py-line"> <tt class="py-name">octet</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">octet</tt><tt class="py-op">)</tt> </tt>
-<a name="L1685"></a><tt class="py-lineno">1685</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">octet</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">255</tt><tt class="py-op">:</tt> </tt>
-<a name="L1686"></a><tt class="py-lineno">1686</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'Invalid octet: %r!'</tt> <tt class="py-op">%</tt> <tt class="py-name">octet</tt><tt class="py-op">)</tt> </tt>
-<a name="L1687"></a><tt class="py-lineno">1687</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">octet</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">127</tt><tt class="py-op">:</tt> <tt class="py-comment"># Legacy class 'A' classification.</tt> </tt>
-<a name="L1688"></a><tt class="py-lineno">1688</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">8</tt> </tt>
-<a name="L1689"></a><tt class="py-lineno">1689</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-number">128</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">octet</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">191</tt><tt class="py-op">:</tt> <tt class="py-comment"># Legacy class 'B' classification.</tt> </tt>
-<a name="L1690"></a><tt class="py-lineno">1690</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">16</tt> </tt>
-<a name="L1691"></a><tt class="py-lineno">1691</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-number">192</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">octet</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">223</tt><tt class="py-op">:</tt> <tt class="py-comment"># Legacy class 'C' classification.</tt> </tt>
-<a name="L1692"></a><tt class="py-lineno">1692</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">24</tt> </tt>
-<a name="L1693"></a><tt class="py-lineno">1693</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">octet</tt> <tt class="py-op">==</tt> <tt class="py-number">224</tt><tt class="py-op">:</tt> <tt class="py-comment"># Multicast address range.</tt> </tt>
-<a name="L1694"></a><tt class="py-lineno">1694</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">4</tt> </tt>
-<a name="L1695"></a><tt class="py-lineno">1695</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-number">225</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">octet</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">239</tt><tt class="py-op">:</tt> <tt class="py-comment"># Reserved.</tt> </tt>
-<a name="L1696"></a><tt class="py-lineno">1696</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">8</tt> </tt>
-<a name="L1697"></a><tt class="py-lineno">1697</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">32</tt> <tt class="py-comment"># Default.</tt> </tt>
-</div><a name="L1698"></a><tt class="py-lineno">1698</tt> <tt class="py-line"> </tt>
-<a name="L1699"></a><tt class="py-lineno">1699</tt> <tt class="py-line"> <tt class="py-name">start</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt> </tt>
-<a name="L1700"></a><tt class="py-lineno">1700</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1701"></a><tt class="py-lineno">1701</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1702"></a><tt class="py-lineno">1702</tt> <tt class="py-line"> </tt>
-<a name="L1703"></a><tt class="py-lineno">1703</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">abbrev_cidr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1704"></a><tt class="py-lineno">1704</tt> <tt class="py-line"> <tt class="py-comment"># Don't support IPv6 for now...</tt> </tt>
-<a name="L1705"></a><tt class="py-lineno">1705</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">':'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">abbrev_cidr</tt><tt class="py-op">:</tt> </tt>
-<a name="L1706"></a><tt class="py-lineno">1706</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1707"></a><tt class="py-lineno">1707</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1708"></a><tt class="py-lineno">1708</tt> <tt class="py-line"> <tt class="py-comment"># Single octet partial integer or string address.</tt> </tt>
-<a name="L1709"></a><tt class="py-lineno">1709</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">i</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">abbrev_cidr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1710"></a><tt class="py-lineno">1710</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">]</tt> </tt>
-<a name="L1711"></a><tt class="py-lineno">1711</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s%s/%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">classful_prefix</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1712"></a><tt class="py-lineno">1712</tt> <tt class="py-line"> </tt>
-<a name="L1713"></a><tt class="py-lineno">1713</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1714"></a><tt class="py-lineno">1714</tt> <tt class="py-line"> <tt class="py-comment"># Multi octet partial string address with optional prefix.</tt> </tt>
-<a name="L1715"></a><tt class="py-lineno">1715</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">part_addr</tt> <tt class="py-op">=</tt> <tt class="py-name">abbrev_cidr</tt> </tt>
-<a name="L1716"></a><tt class="py-lineno">1716</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1717"></a><tt class="py-lineno">1717</tt> <tt class="py-line"> </tt>
-<a name="L1718"></a><tt class="py-lineno">1718</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">part_addr</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L1719"></a><tt class="py-lineno">1719</tt> <tt class="py-line"> <tt class="py-comment"># Not a recognisable format.</tt> </tt>
-<a name="L1720"></a><tt class="py-lineno">1720</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1721"></a><tt class="py-lineno">1721</tt> <tt class="py-line"> </tt>
-<a name="L1722"></a><tt class="py-lineno">1722</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'/'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">part_addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L1723"></a><tt class="py-lineno">1723</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">part_addr</tt><tt class="py-op">,</tt> <tt class="py-name">prefix</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">part_addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L1724"></a><tt class="py-lineno">1724</tt> <tt class="py-line"> </tt>
-<a name="L1725"></a><tt class="py-lineno">1725</tt> <tt class="py-line"> <tt class="py-comment"># Check prefix for validity.</tt> </tt>
-<a name="L1726"></a><tt class="py-lineno">1726</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">prefix</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1727"></a><tt class="py-lineno">1727</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1728"></a><tt class="py-lineno">1728</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">32</tt><tt class="py-op">:</tt> </tt>
-<a name="L1729"></a><tt class="py-lineno">1729</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1730"></a><tt class="py-lineno">1730</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1731"></a><tt class="py-lineno">1731</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1732"></a><tt class="py-lineno">1732</tt> <tt class="py-line"> </tt>
-<a name="L1733"></a><tt class="py-lineno">1733</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'.'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">part_addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L1734"></a><tt class="py-lineno">1734</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">part_addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1735"></a><tt class="py-lineno">1735</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1736"></a><tt class="py-lineno">1736</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">part_addr</tt><tt class="py-op">]</tt> </tt>
-<a name="L1737"></a><tt class="py-lineno">1737</tt> <tt class="py-line"> </tt>
-<a name="L1738"></a><tt class="py-lineno">1738</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">1</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> </tt>
-<a name="L1739"></a><tt class="py-lineno">1739</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">4</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1740"></a><tt class="py-lineno">1740</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'0'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1741"></a><tt class="py-lineno">1741</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1742"></a><tt class="py-lineno">1742</tt> <tt class="py-line"> <tt class="py-comment"># Not a recognisable format.</tt> </tt>
-<a name="L1743"></a><tt class="py-lineno">1743</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1744"></a><tt class="py-lineno">1744</tt> <tt class="py-line"> </tt>
-<a name="L1745"></a><tt class="py-lineno">1745</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prefix</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1746"></a><tt class="py-lineno">1746</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1747"></a><tt class="py-lineno">1747</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">classful_prefix</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1748"></a><tt class="py-lineno">1748</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1749"></a><tt class="py-lineno">1749</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-<a name="L1750"></a><tt class="py-lineno">1750</tt> <tt class="py-line"> </tt>
-<a name="L1751"></a><tt class="py-lineno">1751</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s%s/%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">prefix</tt><tt class="py-op">)</tt> </tt>
-<a name="L1752"></a><tt class="py-lineno">1752</tt> <tt class="py-line"> </tt>
-<a name="L1753"></a><tt class="py-lineno">1753</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1754"></a><tt class="py-lineno">1754</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L1755"></a><tt class="py-lineno">1755</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">IndexError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1756"></a><tt class="py-lineno">1756</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L1757"></a><tt class="py-lineno">1757</tt> <tt class="py-line"> </tt>
-<a name="L1758"></a><tt class="py-lineno">1758</tt> <tt class="py-line"> <tt class="py-comment"># Not a recognisable format.</tt> </tt>
-<a name="L1759"></a><tt class="py-lineno">1759</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">None</tt> </tt>
-</div><a name="L1760"></a><tt class="py-lineno">1760</tt> <tt class="py-line"> </tt>
-<a name="CIDR.span"></a><div id="CIDR.span-def"><a name="L1761"></a><tt class="py-lineno">1761</tt> <a class="py-toggle" href="#" id="CIDR.span-toggle" onclick="return toggle('CIDR.span');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#span">span</a><tt class="py-op">(</tt><tt class="py-param">addrs</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.span-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.span-expanded"><a name="L1762"></a><tt class="py-lineno">1762</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1763"></a><tt class="py-lineno">1763</tt> <tt class="py-line"><tt class="py-docstring"> Static method that accepts a sequence of IP addresses and/or CIDRs,</tt> </tt>
-<a name="L1764"></a><tt class="py-lineno">1764</tt> <tt class="py-line"><tt class="py-docstring"> Wildcards and IPRanges returning a single CIDR that is large enough</tt> </tt>
-<a name="L1765"></a><tt class="py-lineno">1765</tt> <tt class="py-line"><tt class="py-docstring"> to span the lowest and highest IP addresses in the sequence (with</tt> </tt>
-<a name="L1766"></a><tt class="py-lineno">1766</tt> <tt class="py-line"><tt class="py-docstring"> a possible overlap on either end).</tt> </tt>
-<a name="L1767"></a><tt class="py-lineno">1767</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1768"></a><tt class="py-lineno">1768</tt> <tt class="py-line"><tt class="py-docstring"> @param addrs: a sequence of IP, CIDR, Wildcard or IPRange objects</tt> </tt>
-<a name="L1769"></a><tt class="py-lineno">1769</tt> <tt class="py-line"><tt class="py-docstring"> and/or their string representations.</tt> </tt>
-<a name="L1770"></a><tt class="py-lineno">1770</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1771"></a><tt class="py-lineno">1771</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) callable used on return values.</tt> </tt>
-<a name="L1772"></a><tt class="py-lineno">1772</tt> <tt class="py-line"><tt class="py-docstring"> (Default: None - L{CIDR} object) Also accepts str() and unicode().</tt> </tt>
-<a name="L1773"></a><tt class="py-lineno">1773</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1774"></a><tt class="py-lineno">1774</tt> <tt class="py-line"><tt class="py-docstring"> @return: a single CIDR object spanning all addresses.</tt> </tt>
-<a name="L1775"></a><tt class="py-lineno">1775</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1776"></a><tt class="py-lineno">1776</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addrs</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">list</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> <tt class="py-comment"># Required - DO NOT CHANGE!</tt> </tt>
-<a name="L1777"></a><tt class="py-lineno">1777</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'expected address sequence is not iterable!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1778"></a><tt class="py-lineno">1778</tt> <tt class="py-line"> </tt>
-<a name="L1779"></a><tt class="py-lineno">1779</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">addrs</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L1780"></a><tt class="py-lineno">1780</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'sequence must contain 2 or more elements!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1781"></a><tt class="py-lineno">1781</tt> <tt class="py-line"> </tt>
-<a name="L1782"></a><tt class="py-lineno">1782</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-799" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-799', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1783"></a><tt class="py-lineno">1783</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported formatter %r!'</tt> <tt class="py-op">%</tt> <tt id="link-800" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-800', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1784"></a><tt class="py-lineno">1784</tt> <tt class="py-line"> </tt>
-<a name="L1785"></a><tt class="py-lineno">1785</tt> <tt class="py-line"> <tt class="py-comment"># List is required.</tt> </tt>
-<a name="L1786"></a><tt class="py-lineno">1786</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addrs</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1787"></a><tt class="py-lineno">1787</tt> <tt class="py-line"> <tt class="py-name">addrs</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">addrs</tt><tt class="py-op">)</tt> </tt>
-<a name="L1788"></a><tt class="py-lineno">1788</tt> <tt class="py-line"> </tt>
-<a name="L1789"></a><tt class="py-lineno">1789</tt> <tt class="py-line"> <tt class="py-comment"># Detect type of string address or address range and create the</tt> </tt>
-<a name="L1790"></a><tt class="py-lineno">1790</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># equivalent instance.</tt> </tt>
-<a name="L1791"></a><tt class="py-lineno">1791</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enumerate</tt><tt class="py-op">(</tt><tt class="py-name">addrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1792"></a><tt class="py-lineno">1792</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1793"></a><tt class="py-lineno">1793</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1794"></a><tt class="py-lineno">1794</tt> <tt class="py-line"> <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt id="link-801" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-801', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1795"></a><tt class="py-lineno">1795</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt> </tt>
-<a name="L1796"></a><tt class="py-lineno">1796</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L1797"></a><tt class="py-lineno">1797</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L1798"></a><tt class="py-lineno">1798</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L1799"></a><tt class="py-lineno">1799</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1800"></a><tt class="py-lineno">1800</tt> <tt class="py-line"> <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt id="link-802" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-802', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1801"></a><tt class="py-lineno">1801</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt> </tt>
-<a name="L1802"></a><tt class="py-lineno">1802</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L1803"></a><tt class="py-lineno">1803</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L1804"></a><tt class="py-lineno">1804</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L1805"></a><tt class="py-lineno">1805</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1806"></a><tt class="py-lineno">1806</tt> <tt class="py-line"> <tt class="py-name">obj</tt> <tt class="py-op">=</tt> <tt id="link-803" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-803', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L1807"></a><tt class="py-lineno">1807</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">obj</tt> </tt>
-<a name="L1808"></a><tt class="py-lineno">1808</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L1809"></a><tt class="py-lineno">1809</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L1810"></a><tt class="py-lineno">1810</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L1811"></a><tt class="py-lineno">1811</tt> <tt class="py-line"> </tt>
-<a name="L1812"></a><tt class="py-lineno">1812</tt> <tt class="py-line"> <tt class="py-comment"># Find lowest and highest IP objects in address list.</tt> </tt>
-<a name="L1813"></a><tt class="py-lineno">1813</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">addrs</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1814"></a><tt class="py-lineno">1814</tt> <tt class="py-line"> <tt class="py-name">lowest</tt> <tt class="py-op">=</tt> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L1815"></a><tt class="py-lineno">1815</tt> <tt class="py-line"> <tt class="py-name">highest</tt> <tt class="py-op">=</tt> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L1816"></a><tt class="py-lineno">1816</tt> <tt class="py-line"> </tt>
-<a name="L1817"></a><tt class="py-lineno">1817</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">lowest</tt><tt class="py-op">,</tt> <tt id="link-804" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-804', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1818"></a><tt class="py-lineno">1818</tt> <tt class="py-line"> <tt class="py-comment"># Create new IP as user may be returning address strings.</tt> </tt>
-<a name="L1819"></a><tt class="py-lineno">1819</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">lowest</tt> <tt class="py-op">=</tt> <tt id="link-805" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-805', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">lowest</tt><tt class="py-op">.</tt><tt id="link-806" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-806', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">lowest</tt><tt class="py-op">.</tt><tt id="link-807" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-807', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1820"></a><tt class="py-lineno">1820</tt> <tt class="py-line"> </tt>
-<a name="L1821"></a><tt class="py-lineno">1821</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">highest</tt><tt class="py-op">,</tt> <tt id="link-808" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-808', 'IPRange', 'link-375');">IPRange</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1822"></a><tt class="py-lineno">1822</tt> <tt class="py-line"> <tt class="py-comment"># Create new IP as user may be returning address strings.</tt> </tt>
-<a name="L1823"></a><tt class="py-lineno">1823</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">highest</tt> <tt class="py-op">=</tt> <tt id="link-809" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-809', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">highest</tt><tt class="py-op">.</tt><tt id="link-810" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-810', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt class="py-name">highest</tt><tt class="py-op">.</tt><tt id="link-811" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-811', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1824"></a><tt class="py-lineno">1824</tt> <tt class="py-line"> </tt>
-<a name="L1825"></a><tt class="py-lineno">1825</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">lowest</tt><tt class="py-op">.</tt><tt id="link-812" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-812', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt class="py-name">highest</tt><tt class="py-op">.</tt><tt id="link-813" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-813', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1826"></a><tt class="py-lineno">1826</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'address types are not the same!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L1827"></a><tt class="py-lineno">1827</tt> <tt class="py-line"> </tt>
-<a name="L1828"></a><tt class="py-lineno">1828</tt> <tt class="py-line"> <tt id="link-814" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-814', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt class="py-name">highest</tt><tt class="py-op">.</tt><tt id="link-815" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-815', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1829"></a><tt class="py-lineno">1829</tt> <tt class="py-line"> </tt>
-<a name="L1830"></a><tt class="py-lineno">1830</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt id="link-816" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-816', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-817" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-817', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L1831"></a><tt class="py-lineno">1831</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">highest</tt> <tt class="py-keyword">in</tt> <tt id="link-818" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-818', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">and</tt> <tt class="py-name">lowest</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt id="link-819" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-819', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L1832"></a><tt class="py-lineno">1832</tt> <tt class="py-line"> <tt id="link-820" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-820', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-821" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-821', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1833"></a><tt class="py-lineno">1833</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1834"></a><tt class="py-lineno">1834</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L1835"></a><tt class="py-lineno">1835</tt> <tt class="py-line"> </tt>
-<a name="L1836"></a><tt class="py-lineno">1836</tt> <tt class="py-line"> <tt class="py-comment"># Return address in string format.</tt> </tt>
-<a name="L1837"></a><tt class="py-lineno">1837</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt id="link-822" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-822', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1838"></a><tt class="py-lineno">1838</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-823" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-823', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt id="link-824" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-824', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1839"></a><tt class="py-lineno">1839</tt> <tt class="py-line"> </tt>
-<a name="L1840"></a><tt class="py-lineno">1840</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-825" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-825', 'cidr', 'link-434');">cidr</a></tt> </tt>
-</div><a name="L1841"></a><tt class="py-lineno">1841</tt> <tt class="py-line"> </tt>
-<a name="L1842"></a><tt class="py-lineno">1842</tt> <tt class="py-line"> <tt id="link-826" class="py-name" targets="Static Method netaddr.address.CIDR.abbrev_to_verbose()=netaddr.address.CIDR-class.html#abbrev_to_verbose"><a title="netaddr.address.CIDR.abbrev_to_verbose" class="py-name" href="#" onclick="return doclink('link-826', 'abbrev_to_verbose', 'link-826');">abbrev_to_verbose</a></tt> <tt class="py-op">=</tt> <tt class="py-name">staticmethod</tt><tt class="py-op">(</tt><tt id="link-827" class="py-name"><a title="netaddr.address.CIDR.abbrev_to_verbose" class="py-name" href="#" onclick="return doclink('link-827', 'abbrev_to_verbose', 'link-826');">abbrev_to_verbose</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1843"></a><tt class="py-lineno">1843</tt> <tt class="py-line"> <tt id="link-828" class="py-name"><a title="netaddr.address.CIDR.span" class="py-name" href="#" onclick="return doclink('link-828', 'span', 'link-668');">span</a></tt> <tt class="py-op">=</tt> <tt class="py-name">staticmethod</tt><tt class="py-op">(</tt><tt id="link-829" class="py-name"><a title="netaddr.address.CIDR.span" class="py-name" href="#" onclick="return doclink('link-829', 'span', 'link-668');">span</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1844"></a><tt class="py-lineno">1844</tt> <tt class="py-line"> </tt>
-<a name="CIDR.__init__"></a><div id="CIDR.__init__-def"><a name="L1845"></a><tt class="py-lineno">1845</tt> <a class="py-toggle" href="#" id="CIDR.__init__-toggle" onclick="return toggle('CIDR.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">cidr</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt id="link-830" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-830', 'IP', 'link-76');">IP</a></tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.__init__-expanded"><a name="L1846"></a><tt class="py-lineno">1846</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1847"></a><tt class="py-lineno">1847</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L1848"></a><tt class="py-lineno">1848</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1849"></a><tt class="py-lineno">1849</tt> <tt class="py-line"><tt class="py-docstring"> @param cidr: a valid IPv4/IPv6 CIDR address or abbreviated IPv4</tt> </tt>
-<a name="L1850"></a><tt class="py-lineno">1850</tt> <tt class="py-line"><tt class="py-docstring"> network address.</tt> </tt>
-<a name="L1851"></a><tt class="py-lineno">1851</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1852"></a><tt class="py-lineno">1852</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) callable used on return values.</tt> </tt>
-<a name="L1853"></a><tt class="py-lineno">1853</tt> <tt class="py-line"><tt class="py-docstring"> Default: L{IP} class. See L{nrange()} documentations for</tt> </tt>
-<a name="L1854"></a><tt class="py-lineno">1854</tt> <tt class="py-line"><tt class="py-docstring"> more details on the various options.</tt> </tt>
-<a name="L1855"></a><tt class="py-lineno">1855</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1856"></a><tt class="py-lineno">1856</tt> <tt class="py-line"><tt class="py-docstring"> @param strict: (optional) performs a test to ensure there are no</tt> </tt>
-<a name="L1857"></a><tt class="py-lineno">1857</tt> <tt class="py-line"><tt class="py-docstring"> non-zero bits to the right of the subnet mask or prefix when it is</tt> </tt>
-<a name="L1858"></a><tt class="py-lineno">1858</tt> <tt class="py-line"><tt class="py-docstring"> applied to the base address. (default: True)</tt> </tt>
-<a name="L1859"></a><tt class="py-lineno">1859</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1860"></a><tt class="py-lineno">1860</tt> <tt class="py-line"> <tt class="py-name">cidr_arg</tt> <tt class="py-op">=</tt> <tt id="link-831" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-831', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-comment"># Keep a copy of original argument.</tt> </tt>
-<a name="L1861"></a><tt class="py-lineno">1861</tt> <tt class="py-line"> </tt>
-<a name="L1862"></a><tt class="py-lineno">1862</tt> <tt class="py-line"> <tt class="py-comment"># Replace an abbreviation with a verbose CIDR.</tt> </tt>
-<a name="L1863"></a><tt class="py-lineno">1863</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">verbose_cidr</tt> <tt class="py-op">=</tt> <tt id="link-832" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-832', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">.</tt><tt id="link-833" class="py-name"><a title="netaddr.address.CIDR.abbrev_to_verbose" class="py-name" href="#" onclick="return doclink('link-833', 'abbrev_to_verbose', 'link-826');">abbrev_to_verbose</a></tt><tt class="py-op">(</tt><tt id="link-834" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-834', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1864"></a><tt class="py-lineno">1864</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">verbose_cidr</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L1865"></a><tt class="py-lineno">1865</tt> <tt class="py-line"> <tt id="link-835" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-835', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt class="py-name">verbose_cidr</tt> </tt>
-<a name="L1866"></a><tt class="py-lineno">1866</tt> <tt class="py-line"> </tt>
-<a name="L1867"></a><tt class="py-lineno">1867</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-836" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-836', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L1868"></a><tt class="py-lineno">1868</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid CIDR!'</tt> <tt class="py-op">%</tt> <tt id="link-837" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-837', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1869"></a><tt class="py-lineno">1869</tt> <tt class="py-line"> </tt>
-<a name="L1870"></a><tt class="py-lineno">1870</tt> <tt class="py-line"> <tt class="py-comment"># Check for prefix in address and extract it.</tt> </tt>
-<a name="L1871"></a><tt class="py-lineno">1871</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L1872"></a><tt class="py-lineno">1872</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt id="link-838" class="py-name"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-838', 'network', 'link-351');">network</a></tt><tt class="py-op">,</tt> <tt class="py-name">mask</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-839" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-839', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">,</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L1873"></a><tt class="py-lineno">1873</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L1874"></a><tt class="py-lineno">1874</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-840" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-840', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'CIDR objects %r require a subnet prefix!'</tt> \ </tt>
-<a name="L1875"></a><tt class="py-lineno">1875</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">cidr_arg</tt><tt class="py-op">)</tt> </tt>
-<a name="L1876"></a><tt class="py-lineno">1876</tt> <tt class="py-line"> </tt>
-<a name="L1877"></a><tt class="py-lineno">1877</tt> <tt class="py-line"> <tt class="py-comment">#FIXME: Are IP objects for first and last really necessary?</tt> </tt>
-<a name="L1878"></a><tt class="py-lineno">1878</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#FIXME: Should surely just be integer values.</tt> </tt>
-<a name="L1879"></a><tt class="py-lineno">1879</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-841" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-841', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt id="link-842" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-842', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt id="link-843" class="py-name"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-843', 'network', 'link-351');">network</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1880"></a><tt class="py-lineno">1880</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-844" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-844', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-845" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-845', 'first', 'link-110');">first</a></tt><tt class="py-op">.</tt><tt id="link-846" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-846', 'strategy', 'link-10');">strategy</a></tt> </tt>
-<a name="L1881"></a><tt class="py-lineno">1881</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-847" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-847', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt class="py-name">mask</tt> </tt>
-<a name="L1882"></a><tt class="py-lineno">1882</tt> <tt class="py-line"> </tt>
-<a name="L1883"></a><tt class="py-lineno">1883</tt> <tt class="py-line"> <tt id="link-848" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-848', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-849" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-849', 'first', 'link-110');">first</a></tt><tt class="py-op">.</tt><tt id="link-850" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-850', 'strategy', 'link-10');">strategy</a></tt> </tt>
-<a name="L1884"></a><tt class="py-lineno">1884</tt> <tt class="py-line"> <tt id="link-851" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-851', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-852" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-852', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-853" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-853', 'addr_type', 'link-43');">addr_type</a></tt> </tt>
-<a name="L1885"></a><tt class="py-lineno">1885</tt> <tt class="py-line"> </tt>
-<a name="L1886"></a><tt class="py-lineno">1886</tt> <tt class="py-line"> <tt id="link-854" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-854', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt id="link-855" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-855', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-856" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-856', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1887"></a><tt class="py-lineno">1887</tt> <tt class="py-line"> </tt>
-<a name="L1888"></a><tt class="py-lineno">1888</tt> <tt class="py-line"> <tt id="link-857" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-857', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt id="link-858" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-858', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt id="link-859" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-859', 'first', 'link-110');">first</a></tt><tt class="py-op">.</tt><tt id="link-860" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-860', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt id="link-861" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-861', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">,</tt> <tt id="link-862" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-862', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1889"></a><tt class="py-lineno">1889</tt> <tt class="py-line"> </tt>
-<a name="L1890"></a><tt class="py-lineno">1890</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">strict</tt><tt class="py-op">:</tt> </tt>
-<a name="L1891"></a><tt class="py-lineno">1891</tt> <tt class="py-line"> <tt class="py-comment"># Strict CIDRs enabled.</tt> </tt>
-<a name="L1892"></a><tt class="py-lineno">1892</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-863" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-863', 'netmask', 'link-88');">netmask</a></tt> <tt class="py-op">=</tt> <tt id="link-864" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-864', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">^</tt> <tt id="link-865" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-865', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L1893"></a><tt class="py-lineno">1893</tt> <tt class="py-line"> <tt class="py-name">host</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-866" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-866', 'first', 'link-110');">first</a></tt><tt class="py-op">.</tt><tt id="link-867" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-867', 'value', 'link-30');">value</a></tt> <tt class="py-op">|</tt> <tt id="link-868" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-868', 'netmask', 'link-88');">netmask</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-869" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-869', 'netmask', 'link-88');">netmask</a></tt> </tt>
-<a name="L1894"></a><tt class="py-lineno">1894</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">host</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L1895"></a><tt class="py-lineno">1895</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%s contains non-zero bits right of the '</tt> \ </tt>
-<a name="L1896"></a><tt class="py-lineno">1896</tt> <tt class="py-line"> <tt class="py-string">'%d-bit mask! Did you mean %s instead?'</tt> \ </tt>
-<a name="L1897"></a><tt class="py-lineno">1897</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt id="link-870" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-870', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-871" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-871', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L1898"></a><tt class="py-lineno">1898</tt> <tt class="py-line"> <tt id="link-872" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-872', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-873" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-873', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-874" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-874', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-875" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-875', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1899"></a><tt class="py-lineno">1899</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L1900"></a><tt class="py-lineno">1900</tt> <tt class="py-line"> <tt class="py-comment"># Strict CIDRs disabled.</tt> </tt>
-<a name="L1901"></a><tt class="py-lineno">1901</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-876" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-876', 'first', 'link-110');">first</a></tt><tt class="py-op">.</tt><tt id="link-877" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-877', 'value', 'link-30');">value</a></tt> <tt class="py-op">=</tt> <tt id="link-878" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-878', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-879" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-879', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-880" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-880', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt id="link-881" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-881', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1902"></a><tt class="py-lineno">1902</tt> <tt class="py-line"> </tt>
-<a name="L1903"></a><tt class="py-lineno">1903</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-882" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-882', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-883" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-883', '__init__', 'link-258');">__init__</a></tt><tt class="py-op">(</tt><tt id="link-884" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-884', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt id="link-885" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-885', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt id="link-886" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-886', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1904"></a><tt class="py-lineno">1904</tt> <tt class="py-line"> </tt>
-<a name="CIDR.__sub__"></a><div id="CIDR.__sub__-def"><a name="L1905"></a><tt class="py-lineno">1905</tt> <a class="py-toggle" href="#" id="CIDR.__sub__-toggle" onclick="return toggle('CIDR.__sub__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#__sub__">__sub__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.__sub__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.__sub__-expanded"><a name="L1906"></a><tt class="py-lineno">1906</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1907"></a><tt class="py-lineno">1907</tt> <tt class="py-line"><tt class="py-docstring"> Subtract another CIDR from this one.</tt> </tt>
-<a name="L1908"></a><tt class="py-lineno">1908</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1909"></a><tt class="py-lineno">1909</tt> <tt class="py-line"><tt class="py-docstring"> @param other: a CIDR object that is greater than or equal to C{self}.</tt> </tt>
-<a name="L1910"></a><tt class="py-lineno">1910</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1911"></a><tt class="py-lineno">1911</tt> <tt class="py-line"><tt class="py-docstring"> @return: A list of CIDR objects than remain after subtracting C{other}</tt> </tt>
-<a name="L1912"></a><tt class="py-lineno">1912</tt> <tt class="py-line"><tt class="py-docstring"> from C{self}.</tt> </tt>
-<a name="L1913"></a><tt class="py-lineno">1913</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1914"></a><tt class="py-lineno">1914</tt> <tt class="py-line"> <tt id="link-887" class="py-name" targets="Method netaddr.address.CIDR.cidrs()=netaddr.address.CIDR-class.html#cidrs,Method netaddr.address.IPRange.cidrs()=netaddr.address.IPRange-class.html#cidrs"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-887', 'cidrs', 'link-887');">cidrs</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L1915"></a><tt class="py-lineno">1915</tt> <tt class="py-line"> </tt>
-<a name="L1916"></a><tt class="py-lineno">1916</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-888" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-888', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">==</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-889" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-889', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L1917"></a><tt class="py-lineno">1917</tt> <tt class="py-line"> <tt class="py-comment"># Fail fast. Nothing to do in this case.</tt> </tt>
-<a name="L1918"></a><tt class="py-lineno">1918</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-890" class="py-name"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-890', 'cidrs', 'link-887');">cidrs</a></tt> </tt>
-<a name="L1919"></a><tt class="py-lineno">1919</tt> <tt class="py-line"> </tt>
-<a name="L1920"></a><tt class="py-lineno">1920</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-891" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-891', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">+</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1921"></a><tt class="py-lineno">1921</tt> <tt class="py-line"> <tt class="py-name">i_lower</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-892" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-892', 'first', 'link-110');">first</a></tt> </tt>
-<a name="L1922"></a><tt class="py-lineno">1922</tt> <tt class="py-line"> <tt class="py-name">i_upper</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-893" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-893', 'first', 'link-110');">first</a></tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-894" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-894', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1923"></a><tt class="py-lineno">1923</tt> <tt class="py-line"> </tt>
-<a name="L1924"></a><tt class="py-lineno">1924</tt> <tt class="py-line"> <tt class="py-name">lower</tt> <tt class="py-op">=</tt> <tt id="link-895" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-895', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-896" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-896', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-897" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-897', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">i_lower</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1925"></a><tt class="py-lineno">1925</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1926"></a><tt class="py-lineno">1926</tt> <tt class="py-line"> <tt class="py-name">upper</tt> <tt class="py-op">=</tt> <tt id="link-898" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-898', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-899" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-899', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-900" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-900', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">i_upper</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1927"></a><tt class="py-lineno">1927</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1928"></a><tt class="py-lineno">1928</tt> <tt class="py-line"> </tt>
-<a name="L1929"></a><tt class="py-lineno">1929</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">other</tt><tt class="py-op">.</tt><tt id="link-901" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-901', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">new_prefixlen</tt><tt class="py-op">:</tt> </tt>
-<a name="L1930"></a><tt class="py-lineno">1930</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">in</tt> <tt class="py-name">lower</tt><tt class="py-op">:</tt> </tt>
-<a name="L1931"></a><tt class="py-lineno">1931</tt> <tt class="py-line"> <tt class="py-name">matched</tt> <tt class="py-op">=</tt> <tt class="py-name">i_lower</tt> </tt>
-<a name="L1932"></a><tt class="py-lineno">1932</tt> <tt class="py-line"> <tt class="py-name">unmatched</tt> <tt class="py-op">=</tt> <tt class="py-name">i_upper</tt> </tt>
-<a name="L1933"></a><tt class="py-lineno">1933</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">other</tt> <tt class="py-keyword">in</tt> <tt class="py-name">upper</tt><tt class="py-op">:</tt> </tt>
-<a name="L1934"></a><tt class="py-lineno">1934</tt> <tt class="py-line"> <tt class="py-name">matched</tt> <tt class="py-op">=</tt> <tt class="py-name">i_upper</tt> </tt>
-<a name="L1935"></a><tt class="py-lineno">1935</tt> <tt class="py-line"> <tt class="py-name">unmatched</tt> <tt class="py-op">=</tt> <tt class="py-name">i_lower</tt> </tt>
-<a name="L1936"></a><tt class="py-lineno">1936</tt> <tt class="py-line"> </tt>
-<a name="L1937"></a><tt class="py-lineno">1937</tt> <tt class="py-line"> <tt id="link-902" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-902', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-903" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-903', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-904" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-904', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-905" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-905', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">unmatched</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1938"></a><tt class="py-lineno">1938</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1939"></a><tt class="py-lineno">1939</tt> <tt class="py-line"> </tt>
-<a name="L1940"></a><tt class="py-lineno">1940</tt> <tt class="py-line"> <tt id="link-906" class="py-name"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-906', 'cidrs', 'link-887');">cidrs</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-907" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-907', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1941"></a><tt class="py-lineno">1941</tt> <tt class="py-line"> </tt>
-<a name="L1942"></a><tt class="py-lineno">1942</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1943"></a><tt class="py-lineno">1943</tt> <tt class="py-line"> </tt>
-<a name="L1944"></a><tt class="py-lineno">1944</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_prefixlen</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-908" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-908', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L1945"></a><tt class="py-lineno">1945</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L1946"></a><tt class="py-lineno">1946</tt> <tt class="py-line"> </tt>
-<a name="L1947"></a><tt class="py-lineno">1947</tt> <tt class="py-line"> <tt class="py-name">i_lower</tt> <tt class="py-op">=</tt> <tt class="py-name">matched</tt> </tt>
-<a name="L1948"></a><tt class="py-lineno">1948</tt> <tt class="py-line"> <tt class="py-name">i_upper</tt> <tt class="py-op">=</tt> <tt class="py-name">matched</tt> <tt class="py-op">+</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-909" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-909', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1949"></a><tt class="py-lineno">1949</tt> <tt class="py-line"> </tt>
-<a name="L1950"></a><tt class="py-lineno">1950</tt> <tt class="py-line"> <tt class="py-name">lower</tt> <tt class="py-op">=</tt> <tt id="link-910" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-910', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-911" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-911', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-912" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-912', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">i_lower</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1951"></a><tt class="py-lineno">1951</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1952"></a><tt class="py-lineno">1952</tt> <tt class="py-line"> <tt class="py-name">upper</tt> <tt class="py-op">=</tt> <tt id="link-913" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-913', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-914" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-914', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-915" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-915', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">i_upper</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L1953"></a><tt class="py-lineno">1953</tt> <tt class="py-line"> <tt class="py-name">new_prefixlen</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L1954"></a><tt class="py-lineno">1954</tt> <tt class="py-line"> </tt>
-<a name="L1955"></a><tt class="py-lineno">1955</tt> <tt class="py-line"> <tt id="link-916" class="py-name"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-916', 'cidrs', 'link-887');">cidrs</a></tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L1956"></a><tt class="py-lineno">1956</tt> <tt class="py-line"> </tt>
-<a name="L1957"></a><tt class="py-lineno">1957</tt> <tt class="py-line"> <tt class="py-comment"># Return string based CIDR address values at user's request.</tt> </tt>
-<a name="L1958"></a><tt class="py-lineno">1958</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-917" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-917', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
-<a name="L1959"></a><tt class="py-lineno">1959</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-918" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-918', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-919" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-919', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-keyword">in</tt> <tt id="link-920" class="py-name"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-920', 'cidrs', 'link-887');">cidrs</a></tt><tt class="py-op">]</tt> </tt>
-<a name="L1960"></a><tt class="py-lineno">1960</tt> <tt class="py-line"> </tt>
-<a name="L1961"></a><tt class="py-lineno">1961</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-921" class="py-name"><a title="netaddr.address.CIDR.cidrs
-netaddr.address.IPRange.cidrs" class="py-name" href="#" onclick="return doclink('link-921', 'cidrs', 'link-887');">cidrs</a></tt> </tt>
-</div><a name="L1962"></a><tt class="py-lineno">1962</tt> <tt class="py-line"> </tt>
-<a name="CIDR.__add__"></a><div id="CIDR.__add__-def"><a name="L1963"></a><tt class="py-lineno">1963</tt> <a class="py-toggle" href="#" id="CIDR.__add__-toggle" onclick="return toggle('CIDR.__add__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#__add__">__add__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.__add__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.__add__-expanded"><a name="L1964"></a><tt class="py-lineno">1964</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1965"></a><tt class="py-lineno">1965</tt> <tt class="py-line"><tt class="py-docstring"> Add another CIDR to this one returning a CIDR supernet that will</tt> </tt>
-<a name="L1966"></a><tt class="py-lineno">1966</tt> <tt class="py-line"><tt class="py-docstring"> contain both in the smallest possible sized range.</tt> </tt>
-<a name="L1967"></a><tt class="py-lineno">1967</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1968"></a><tt class="py-lineno">1968</tt> <tt class="py-line"><tt class="py-docstring"> @param other: a CIDR object.</tt> </tt>
-<a name="L1969"></a><tt class="py-lineno">1969</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1970"></a><tt class="py-lineno">1970</tt> <tt class="py-line"><tt class="py-docstring"> @return: A new (potentially larger) CIDR object.</tt> </tt>
-<a name="L1971"></a><tt class="py-lineno">1971</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1972"></a><tt class="py-lineno">1972</tt> <tt class="py-line"> <tt id="link-922" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-922', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-923" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-923', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">.</tt><tt id="link-924" class="py-name"><a title="netaddr.address.CIDR.span" class="py-name" href="#" onclick="return doclink('link-924', 'span', 'link-668');">span</a></tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">,</tt> <tt class="py-name">other</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L1973"></a><tt class="py-lineno">1973</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-925" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-925', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">str</tt><tt class="py-op">:</tt> </tt>
-<a name="L1974"></a><tt class="py-lineno">1974</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-926" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-926', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L1975"></a><tt class="py-lineno">1975</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-927" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-927', 'cidr', 'link-434');">cidr</a></tt> </tt>
-</div><a name="L1976"></a><tt class="py-lineno">1976</tt> <tt class="py-line"> </tt>
-<a name="CIDR.network"></a><div id="CIDR.network-def"><a name="L1977"></a><tt class="py-lineno">1977</tt> <a class="py-toggle" href="#" id="CIDR.network-toggle" onclick="return toggle('CIDR.network');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#network">network</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.network-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.network-expanded"><a name="L1978"></a><tt class="py-lineno">1978</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The network (first) address in this CIDR block."""</tt> </tt>
-<a name="L1979"></a><tt class="py-lineno">1979</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L1980"></a><tt class="py-lineno">1980</tt> <tt class="py-line"> </tt>
-<a name="CIDR.broadcast"></a><div id="CIDR.broadcast-def"><a name="L1981"></a><tt class="py-lineno">1981</tt> <a class="py-toggle" href="#" id="CIDR.broadcast-toggle" onclick="return toggle('CIDR.broadcast');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#broadcast">broadcast</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.broadcast-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.broadcast-expanded"><a name="L1982"></a><tt class="py-lineno">1982</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L1983"></a><tt class="py-lineno">1983</tt> <tt class="py-line"><tt class="py-docstring"> B{Please Note:} although IPv6 doesn't actually recognise the concept of</tt> </tt>
-<a name="L1984"></a><tt class="py-lineno">1984</tt> <tt class="py-line"><tt class="py-docstring"> a 'broadcast' address as the last address in a subnet (as in IPv4) so</tt> </tt>
-<a name="L1985"></a><tt class="py-lineno">1985</tt> <tt class="py-line"><tt class="py-docstring"> many other libraries do this that it isn't worth trying to resist.</tt> </tt>
-<a name="L1986"></a><tt class="py-lineno">1986</tt> <tt class="py-line"><tt class="py-docstring"> This issue raises so many user queries that it is easier to dispense</tt> </tt>
-<a name="L1987"></a><tt class="py-lineno">1987</tt> <tt class="py-line"><tt class="py-docstring"> with the theory and be pragmatic instead.</tt> </tt>
-<a name="L1988"></a><tt class="py-lineno">1988</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L1989"></a><tt class="py-lineno">1989</tt> <tt class="py-line"><tt class="py-docstring"> @return: The broadcast (last) address in this CIDR block.</tt> </tt>
-<a name="L1990"></a><tt class="py-lineno">1990</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L1991"></a><tt class="py-lineno">1991</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L1992"></a><tt class="py-lineno">1992</tt> <tt class="py-line"> </tt>
-<a name="CIDR.netmask"></a><div id="CIDR.netmask-def"><a name="L1993"></a><tt class="py-lineno">1993</tt> <a class="py-toggle" href="#" id="CIDR.netmask-toggle" onclick="return toggle('CIDR.netmask');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#netmask">netmask</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.netmask-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.netmask-expanded"><a name="L1994"></a><tt class="py-lineno">1994</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The subnet mask address of this CIDR block."""</tt> </tt>
-<a name="L1995"></a><tt class="py-lineno">1995</tt> <tt class="py-line"> <tt id="link-928" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-928', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-929" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-929', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-930" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-930', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L1996"></a><tt class="py-lineno">1996</tt> <tt class="py-line"> <tt id="link-931" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-931', 'netmask', 'link-88');">netmask</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-932" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-932', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">^</tt> <tt id="link-933" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-933', 'hostmask', 'link-112');">hostmask</a></tt> </tt>
-<a name="L1997"></a><tt class="py-lineno">1997</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-934" class="py-name"><a title="netaddr.address.IPRange.format" class="py-name" href="#" onclick="return doclink('link-934', 'format', 'link-567');">format</a></tt><tt class="py-op">(</tt><tt id="link-935" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-935', 'netmask', 'link-88');">netmask</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L1998"></a><tt class="py-lineno">1998</tt> <tt class="py-line"> </tt>
-<a name="CIDR.hostmask"></a><div id="CIDR.hostmask-def"><a name="L1999"></a><tt class="py-lineno">1999</tt> <a class="py-toggle" href="#" id="CIDR.hostmask-toggle" onclick="return toggle('CIDR.hostmask');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#hostmask">hostmask</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.hostmask-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.hostmask-expanded"><a name="L2000"></a><tt class="py-lineno">2000</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: The host mask address of this CIDR block."""</tt> </tt>
-<a name="L2001"></a><tt class="py-lineno">2001</tt> <tt class="py-line"> <tt id="link-936" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-936', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">1</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-937" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-937', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-938" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-938', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L2002"></a><tt class="py-lineno">2002</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-939" class="py-name"><a title="netaddr.address.IPRange.format" class="py-name" href="#" onclick="return doclink('link-939', 'format', 'link-567');">format</a></tt><tt class="py-op">(</tt><tt id="link-940" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-940', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2003"></a><tt class="py-lineno">2003</tt> <tt class="py-line"> </tt>
-<a name="L2004"></a><tt class="py-lineno">2004</tt> <tt class="py-line"> <tt id="link-941" class="py-name"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-941', 'network', 'link-351');">network</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-942" class="py-name"><a title="netaddr.address.CIDR.network" class="py-name" href="#" onclick="return doclink('link-942', 'network', 'link-351');">network</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2005"></a><tt class="py-lineno">2005</tt> <tt class="py-line"> <tt id="link-943" class="py-name" targets="Variable netaddr.address.CIDR.broadcast=netaddr.address.CIDR-class.html#broadcast"><a title="netaddr.address.CIDR.broadcast" class="py-name" href="#" onclick="return doclink('link-943', 'broadcast', 'link-943');">broadcast</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-944" class="py-name"><a title="netaddr.address.CIDR.broadcast" class="py-name" href="#" onclick="return doclink('link-944', 'broadcast', 'link-943');">broadcast</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2006"></a><tt class="py-lineno">2006</tt> <tt class="py-line"> <tt id="link-945" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-945', 'netmask', 'link-88');">netmask</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-946" class="py-name"><a title="netaddr.address.CIDR.netmask" class="py-name" href="#" onclick="return doclink('link-946', 'netmask', 'link-88');">netmask</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2007"></a><tt class="py-lineno">2007</tt> <tt class="py-line"> <tt id="link-947" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-947', 'hostmask', 'link-112');">hostmask</a></tt> <tt class="py-op">=</tt> <tt class="py-name">property</tt><tt class="py-op">(</tt><tt id="link-948" class="py-name"><a title="netaddr.address.CIDR.hostmask" class="py-name" href="#" onclick="return doclink('link-948', 'hostmask', 'link-112');">hostmask</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2008"></a><tt class="py-lineno">2008</tt> <tt class="py-line"> </tt>
-<a name="CIDR.iter_host_addrs"></a><div id="CIDR.iter_host_addrs-def"><a name="L2009"></a><tt class="py-lineno">2009</tt> <a class="py-toggle" href="#" id="CIDR.iter_host_addrs-toggle" onclick="return toggle('CIDR.iter_host_addrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#iter_host_addrs">iter_host_addrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.iter_host_addrs-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.iter_host_addrs-expanded"><a name="L2010"></a><tt class="py-lineno">2010</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2011"></a><tt class="py-lineno">2011</tt> <tt class="py-line"><tt class="py-docstring"> @return: An iterator object providing access to all valid host IP</tt> </tt>
-<a name="L2012"></a><tt class="py-lineno">2012</tt> <tt class="py-line"><tt class="py-docstring"> addresses within the specified CIDR block.</tt> </tt>
-<a name="L2013"></a><tt class="py-lineno">2013</tt> <tt class="py-line"><tt class="py-docstring"> - with IPv4 the network and broadcast addresses are always</tt> </tt>
-<a name="L2014"></a><tt class="py-lineno">2014</tt> <tt class="py-line"><tt class="py-docstring"> excluded. Any smaller than 4 hosts yields an emtpy list.</tt> </tt>
-<a name="L2015"></a><tt class="py-lineno">2015</tt> <tt class="py-line"><tt class="py-docstring"> - with IPv6 only the unspecified address '::' is excluded from</tt> </tt>
-<a name="L2016"></a><tt class="py-lineno">2016</tt> <tt class="py-line"><tt class="py-docstring"> the yielded list.</tt> </tt>
-<a name="L2017"></a><tt class="py-lineno">2017</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2018"></a><tt class="py-lineno">2018</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-949" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-949', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-950" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-950', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L2019"></a><tt class="py-lineno">2019</tt> <tt class="py-line"> <tt class="py-comment"># IPv4</tt> </tt>
-<a name="L2020"></a><tt class="py-lineno">2020</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-951" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-951', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> </tt>
-<a name="L2021"></a><tt class="py-lineno">2021</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-952" class="py-name"><a title="netaddr.address.nrange" class="py-name" href="#" onclick="return doclink('link-952', 'nrange', 'link-579');">nrange</a></tt><tt class="py-op">(</tt> <tt id="link-953" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-953', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-954" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-954', 'first', 'link-110');">first</a></tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-955" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-955', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L2022"></a><tt class="py-lineno">2022</tt> <tt class="py-line"> <tt id="link-956" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-956', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-957" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-957', 'last', 'link-372');">last</a></tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-958" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-958', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-959" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-959', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-960" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-960', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2023"></a><tt class="py-lineno">2023</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2024"></a><tt class="py-lineno">2024</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iter</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L2025"></a><tt class="py-lineno">2025</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-961" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-961', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-962" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-962', 'AT_INET6', 'link-5');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L2026"></a><tt class="py-lineno">2026</tt> <tt class="py-line"> <tt class="py-comment"># IPv6</tt> </tt>
-<a name="L2027"></a><tt class="py-lineno">2027</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-963" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-963', 'first', 'link-110');">first</a></tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L2028"></a><tt class="py-lineno">2028</tt> <tt class="py-line"> <tt class="py-comment"># Don't return '::'.</tt> </tt>
-<a name="L2029"></a><tt class="py-lineno">2029</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt id="link-964" class="py-name"><a title="netaddr.address.nrange" class="py-name" href="#" onclick="return doclink('link-964', 'nrange', 'link-579');">nrange</a></tt><tt class="py-op">(</tt><tt id="link-965" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-965', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-966" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-966', 'first', 'link-110');">first</a></tt><tt class="py-op">+</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-967" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-967', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L2030"></a><tt class="py-lineno">2030</tt> <tt class="py-line"> <tt id="link-968" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-968', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-969" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-969', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-970" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-970', 'addr_type', 'link-43');">addr_type</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt id="link-971" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-971', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">=</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-972" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-972', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2031"></a><tt class="py-lineno">2031</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2032"></a><tt class="py-lineno">2032</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iter</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2033"></a><tt class="py-lineno">2033</tt> <tt class="py-line"> </tt>
-<a name="CIDR.subnet"></a><div id="CIDR.subnet-def"><a name="L2034"></a><tt class="py-lineno">2034</tt> <a class="py-toggle" href="#" id="CIDR.subnet-toggle" onclick="return toggle('CIDR.subnet');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#subnet">subnet</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">prefixlen</tt><tt class="py-op">,</tt> <tt class="py-param">count</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.subnet-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.subnet-expanded"><a name="L2035"></a><tt class="py-lineno">2035</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2036"></a><tt class="py-lineno">2036</tt> <tt class="py-line"><tt class="py-docstring"> A generator that returns CIDR subnets based on the current network</tt> </tt>
-<a name="L2037"></a><tt class="py-lineno">2037</tt> <tt class="py-line"><tt class="py-docstring"> base address and provided CIDR prefix and count.</tt> </tt>
-<a name="L2038"></a><tt class="py-lineno">2038</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2039"></a><tt class="py-lineno">2039</tt> <tt class="py-line"><tt class="py-docstring"> @param prefixlen: a CIDR prefix.</tt> </tt>
-<a name="L2040"></a><tt class="py-lineno">2040</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2041"></a><tt class="py-lineno">2041</tt> <tt class="py-line"><tt class="py-docstring"> @param count: number of consecutive CIDRs to be returned.</tt> </tt>
-<a name="L2042"></a><tt class="py-lineno">2042</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2043"></a><tt class="py-lineno">2043</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: callable used on return values.</tt> </tt>
-<a name="L2044"></a><tt class="py-lineno">2044</tt> <tt class="py-line"><tt class="py-docstring"> Default: None - L{CIDR} objects. str() and unicode() supported.</tt> </tt>
-<a name="L2045"></a><tt class="py-lineno">2045</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2046"></a><tt class="py-lineno">2046</tt> <tt class="py-line"><tt class="py-docstring"> @return: an iterator (as lists could potentially be very large)</tt> </tt>
-<a name="L2047"></a><tt class="py-lineno">2047</tt> <tt class="py-line"><tt class="py-docstring"> containing CIDR subnets below this CIDR's base address.</tt> </tt>
-<a name="L2048"></a><tt class="py-lineno">2048</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2049"></a><tt class="py-lineno">2049</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-973" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-973', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-974" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-974', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L2050"></a><tt class="py-lineno">2050</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'prefixlen %d out of bounds for address type!'</tt> \ </tt>
-<a name="L2051"></a><tt class="py-lineno">2051</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt id="link-975" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-975', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2052"></a><tt class="py-lineno">2052</tt> <tt class="py-line"> </tt>
-<a name="L2053"></a><tt class="py-lineno">2053</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-976" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-976', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">&lt;=</tt> <tt id="link-977" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-977', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L2054"></a><tt class="py-lineno">2054</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'prefixlen less than current CIDR prefixlen!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2055"></a><tt class="py-lineno">2055</tt> <tt class="py-line"> </tt>
-<a name="L2056"></a><tt class="py-lineno">2056</tt> <tt class="py-line"> <tt class="py-comment"># Calculate number of subnets to be returned.</tt> </tt>
-<a name="L2057"></a><tt class="py-lineno">2057</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">width</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-978" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-978', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt class="py-name">width</tt> </tt>
-<a name="L2058"></a><tt class="py-lineno">2058</tt> <tt class="py-line"> <tt class="py-name">max_count</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-op">(</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-979" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-979', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> <tt class="py-op">/</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-op">(</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt id="link-980" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-980', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2059"></a><tt class="py-lineno">2059</tt> <tt class="py-line"> </tt>
-<a name="L2060"></a><tt class="py-lineno">2060</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">count</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L2061"></a><tt class="py-lineno">2061</tt> <tt class="py-line"> <tt class="py-name">count</tt> <tt class="py-op">=</tt> <tt class="py-name">max_count</tt> </tt>
-<a name="L2062"></a><tt class="py-lineno">2062</tt> <tt class="py-line"> </tt>
-<a name="L2063"></a><tt class="py-lineno">2063</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">1</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">count</tt> <tt class="py-op">&lt;</tt> <tt class="py-name">max_count</tt><tt class="py-op">:</tt> </tt>
-<a name="L2064"></a><tt class="py-lineno">2064</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'count not within current CIDR boundaries!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2065"></a><tt class="py-lineno">2065</tt> <tt class="py-line"> </tt>
-<a name="L2066"></a><tt class="py-lineno">2066</tt> <tt class="py-line"> <tt class="py-name">base_address</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-981" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-981', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-982" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-982', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-983" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-983', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2067"></a><tt class="py-lineno">2067</tt> <tt class="py-line"> </tt>
-<a name="L2068"></a><tt class="py-lineno">2068</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-984" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-984', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L2069"></a><tt class="py-lineno">2069</tt> <tt class="py-line"> <tt class="py-comment"># Create new CIDR instances for each subnet returned.</tt> </tt>
-<a name="L2070"></a><tt class="py-lineno">2070</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xrange</tt><tt class="py-op">(</tt><tt class="py-name">count</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2071"></a><tt class="py-lineno">2071</tt> <tt class="py-line"> <tt id="link-985" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-985', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-986" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-986', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">base_address</tt><tt class="py-op">,</tt> <tt id="link-987" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-987', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2072"></a><tt class="py-lineno">2072</tt> <tt class="py-line"> <tt id="link-988" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-988', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-989" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-989', 'first', 'link-110');">first</a></tt> <tt class="py-op">+=</tt> <tt id="link-990" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-990', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-991" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-991', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt> </tt>
-<a name="L2073"></a><tt class="py-lineno">2073</tt> <tt class="py-line"> <tt id="link-992" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-992', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-993" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-993', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-994" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-994', 'prefixlen', 'link-73');">prefixlen</a></tt> </tt>
-<a name="L2074"></a><tt class="py-lineno">2074</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-995" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-995', 'cidr', 'link-434');">cidr</a></tt> </tt>
-<a name="L2075"></a><tt class="py-lineno">2075</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt id="link-996" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-996', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2076"></a><tt class="py-lineno">2076</tt> <tt class="py-line"> <tt class="py-comment"># Keep the same CIDR and just modify it.</tt> </tt>
-<a name="L2077"></a><tt class="py-lineno">2077</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-997" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-997', 'cidr', 'link-434');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-998" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-998', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">base_address</tt><tt class="py-op">,</tt> <tt id="link-999" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-999', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2078"></a><tt class="py-lineno">2078</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">xrange</tt><tt class="py-op">(</tt><tt class="py-name">count</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2079"></a><tt class="py-lineno">2079</tt> <tt class="py-line"> <tt id="link-1000" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1000', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-1001" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1001', 'first', 'link-110');">first</a></tt> <tt class="py-op">+=</tt> <tt id="link-1002" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1002', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-1003" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-1003', 'size', 'link-550');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt> </tt>
-<a name="L2080"></a><tt class="py-lineno">2080</tt> <tt class="py-line"> <tt id="link-1004" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1004', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-1005" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-1005', 'prefixlen', 'link-73');">prefixlen</a></tt> <tt class="py-op">=</tt> <tt id="link-1006" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-1006', 'prefixlen', 'link-73');">prefixlen</a></tt> </tt>
-<a name="L2081"></a><tt class="py-lineno">2081</tt> <tt class="py-line"> <tt class="py-keyword">yield</tt> <tt id="link-1007" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1007', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt id="link-1008" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1008', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2082"></a><tt class="py-lineno">2082</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2083"></a><tt class="py-lineno">2083</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported fmt callable %r'</tt> <tt class="py-op">%</tt> <tt id="link-1009" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1009', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2084"></a><tt class="py-lineno">2084</tt> <tt class="py-line"> </tt>
-<a name="CIDR.cidrs"></a><div id="CIDR.cidrs-def"><a name="L2085"></a><tt class="py-lineno">2085</tt> <a class="py-toggle" href="#" id="CIDR.cidrs-toggle" onclick="return toggle('CIDR.cidrs');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#cidrs">cidrs</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.cidrs-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.cidrs-expanded"><a name="L2086"></a><tt class="py-lineno">2086</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2087"></a><tt class="py-lineno">2087</tt> <tt class="py-line"><tt class="py-docstring"> @return: A list of a copy of this L{CIDR} object. This method is here</tt> </tt>
-<a name="L2088"></a><tt class="py-lineno">2088</tt> <tt class="py-line"><tt class="py-docstring"> mainly for compatibility with IPRange interface.</tt> </tt>
-<a name="L2089"></a><tt class="py-lineno">2089</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2090"></a><tt class="py-lineno">2090</tt> <tt class="py-line"> <tt class="py-name">cidr_copy</tt> <tt class="py-op">=</tt> <tt id="link-1010" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-1010', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'%s/%d'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1011" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1011', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-1012" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-1012', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1013" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1013', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L2091"></a><tt class="py-lineno">2091</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1014" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-1014', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2092"></a><tt class="py-lineno">2092</tt> <tt class="py-line"> </tt>
-<a name="L2093"></a><tt class="py-lineno">2093</tt> <tt class="py-line"> <tt class="py-comment"># Respect formatting.</tt> </tt>
-<a name="L2094"></a><tt class="py-lineno">2094</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1015" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1015', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2095"></a><tt class="py-lineno">2095</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1016" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1016', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">(</tt><tt class="py-name">cidr_copy</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L2096"></a><tt class="py-lineno">2096</tt> <tt class="py-line"> </tt>
-<a name="L2097"></a><tt class="py-lineno">2097</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-op">[</tt><tt class="py-name">cidr_copy</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L2098"></a><tt class="py-lineno">2098</tt> <tt class="py-line"> </tt>
-<a name="CIDR.__str__"></a><div id="CIDR.__str__-def"><a name="L2099"></a><tt class="py-lineno">2099</tt> <a class="py-toggle" href="#" id="CIDR.__str__-toggle" onclick="return toggle('CIDR.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.__str__-expanded"><a name="L2100"></a><tt class="py-lineno">2100</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s/%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1017" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1017', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-1018" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-1018', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1019" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1019', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1020" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-1020', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2101"></a><tt class="py-lineno">2101</tt> <tt class="py-line"> </tt>
-<a name="CIDR.__repr__"></a><div id="CIDR.__repr__-def"><a name="L2102"></a><tt class="py-lineno">2102</tt> <a class="py-toggle" href="#" id="CIDR.__repr__-toggle" onclick="return toggle('CIDR.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.CIDR-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="CIDR.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="CIDR.__repr__-expanded"><a name="L2103"></a><tt class="py-lineno">2103</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L2104"></a><tt class="py-lineno">2104</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s('%s/%d')"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> </tt>
-<a name="L2105"></a><tt class="py-lineno">2105</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1021" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1021', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-1022" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-1022', 'int_to_str', 'link-156');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1023" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1023', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1024" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-1024', 'prefixlen', 'link-73');">prefixlen</a></tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L2106"></a><tt class="py-lineno">2106</tt> <tt class="py-line"> </tt>
-<a name="L2107"></a><tt class="py-lineno">2107</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="Wildcard"></a><div id="Wildcard-def"><a name="L2108"></a><tt class="py-lineno">2108</tt> <a class="py-toggle" href="#" id="Wildcard-toggle" onclick="return toggle('Wildcard');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.Wildcard-class.html">Wildcard</a><tt class="py-op">(</tt><tt class="py-base-class">IPRange</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Wildcard-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="Wildcard-expanded"><a name="L2109"></a><tt class="py-lineno">2109</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2110"></a><tt class="py-lineno">2110</tt> <tt class="py-line"><tt class="py-docstring"> Represents blocks of IPv4 addresses using a wildcard or glob style syntax.</tt> </tt>
-<a name="L2111"></a><tt class="py-lineno">2111</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2112"></a><tt class="py-lineno">2112</tt> <tt class="py-line"><tt class="py-docstring"> Individual octets can be represented using the following shortcuts :</tt> </tt>
-<a name="L2113"></a><tt class="py-lineno">2113</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2114"></a><tt class="py-lineno">2114</tt> <tt class="py-line"><tt class="py-docstring"> 1. C{*} - the asterisk octet (represents values 0 through 255)</tt> </tt>
-<a name="L2115"></a><tt class="py-lineno">2115</tt> <tt class="py-line"><tt class="py-docstring"> 2. C{'x-y'} - the hyphenated octet (represents values x through y)</tt> </tt>
-<a name="L2116"></a><tt class="py-lineno">2116</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2117"></a><tt class="py-lineno">2117</tt> <tt class="py-line"><tt class="py-docstring"> A few basic rules also apply :</tt> </tt>
-<a name="L2118"></a><tt class="py-lineno">2118</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2119"></a><tt class="py-lineno">2119</tt> <tt class="py-line"><tt class="py-docstring"> 1. x must always be greater than y, therefore :</tt> </tt>
-<a name="L2120"></a><tt class="py-lineno">2120</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2121"></a><tt class="py-lineno">2121</tt> <tt class="py-line"><tt class="py-docstring"> - x can only be 0 through 254</tt> </tt>
-<a name="L2122"></a><tt class="py-lineno">2122</tt> <tt class="py-line"><tt class="py-docstring"> - y can only be 1 through 255</tt> </tt>
-<a name="L2123"></a><tt class="py-lineno">2123</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2124"></a><tt class="py-lineno">2124</tt> <tt class="py-line"><tt class="py-docstring"> 2. only one hyphenated octet per wildcard is allowed</tt> </tt>
-<a name="L2125"></a><tt class="py-lineno">2125</tt> <tt class="py-line"><tt class="py-docstring"> 3. only asterisks are permitted after a hyphenated octet</tt> </tt>
-<a name="L2126"></a><tt class="py-lineno">2126</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2127"></a><tt class="py-lineno">2127</tt> <tt class="py-line"><tt class="py-docstring"> Example wildcards ::</tt> </tt>
-<a name="L2128"></a><tt class="py-lineno">2128</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2129"></a><tt class="py-lineno">2129</tt> <tt class="py-line"><tt class="py-docstring"> '192.168.0.1' # a single address</tt> </tt>
-<a name="L2130"></a><tt class="py-lineno">2130</tt> <tt class="py-line"><tt class="py-docstring"> '192.168.0.0-31' # 32 addresses</tt> </tt>
-<a name="L2131"></a><tt class="py-lineno">2131</tt> <tt class="py-line"><tt class="py-docstring"> '192.168.0.*' # 256 addresses</tt> </tt>
-<a name="L2132"></a><tt class="py-lineno">2132</tt> <tt class="py-line"><tt class="py-docstring"> '192.168.0-1.*' # 512 addresses</tt> </tt>
-<a name="L2133"></a><tt class="py-lineno">2133</tt> <tt class="py-line"><tt class="py-docstring"> '192.168-169.*.*' # 131,072 addresses</tt> </tt>
-<a name="L2134"></a><tt class="py-lineno">2134</tt> <tt class="py-line"><tt class="py-docstring"> '*.*.*.*' # the whole IPv4 address space</tt> </tt>
-<a name="L2135"></a><tt class="py-lineno">2135</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2136"></a><tt class="py-lineno">2136</tt> <tt class="py-line"><tt class="py-docstring"> Aside</tt> </tt>
-<a name="L2137"></a><tt class="py-lineno">2137</tt> <tt class="py-line"><tt class="py-docstring"> =====</tt> </tt>
-<a name="L2138"></a><tt class="py-lineno">2138</tt> <tt class="py-line"><tt class="py-docstring"> I{Wildcard ranges are not directly equivalent to CIDR blocks as they</tt> </tt>
-<a name="L2139"></a><tt class="py-lineno">2139</tt> <tt class="py-line"><tt class="py-docstring"> can represent address ranges that do not fall on strict bit mask</tt> </tt>
-<a name="L2140"></a><tt class="py-lineno">2140</tt> <tt class="py-line"><tt class="py-docstring"> boundaries. They are very suitable in configuration files being more</tt> </tt>
-<a name="L2141"></a><tt class="py-lineno">2141</tt> <tt class="py-line"><tt class="py-docstring"> obvious and readable than their CIDR equivalents, especially for admins</tt> </tt>
-<a name="L2142"></a><tt class="py-lineno">2142</tt> <tt class="py-line"><tt class="py-docstring"> and users without much networking knowledge or experience.}</tt> </tt>
-<a name="L2143"></a><tt class="py-lineno">2143</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2144"></a><tt class="py-lineno">2144</tt> <tt class="py-line"><tt class="py-docstring"> I{All CIDR blocks can always be represented as wildcard ranges but the</tt> </tt>
-<a name="L2145"></a><tt class="py-lineno">2145</tt> <tt class="py-line"><tt class="py-docstring"> reverse is not true. Wildcards are almost but not quite as flexible</tt> </tt>
-<a name="L2146"></a><tt class="py-lineno">2146</tt> <tt class="py-line"><tt class="py-docstring"> as IPRange objects.}</tt> </tt>
-<a name="L2147"></a><tt class="py-lineno">2147</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2148"></a><tt class="py-lineno">2148</tt> <tt class="py-line"> <tt id="link-1025" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-1025', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-1026" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-1026', 'ST_IPV4', 'link-11');">ST_IPV4</a></tt><tt class="py-op">,</tt><tt class="py-op">)</tt> </tt>
-<a name="L2149"></a><tt class="py-lineno">2149</tt> <tt class="py-line"> <tt id="link-1027" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-1027', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt id="link-1028" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-1028', 'AT_UNSPEC', 'link-3');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-1029" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-1029', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2150"></a><tt class="py-lineno">2150</tt> <tt class="py-line"> </tt>
-<a name="L2151"></a><tt class="py-lineno">2151</tt> <tt class="py-line"> <tt class="py-comment"># Descriptor registrations.</tt> </tt>
-<a name="L2152"></a><tt class="py-lineno">2152</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-1030" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1030', 'strategy', 'link-10');">strategy</a></tt> <tt class="py-op">=</tt> <tt id="link-1031" class="py-name"><a title="netaddr.address.StrategyDescriptor" class="py-name" href="#" onclick="return doclink('link-1031', 'StrategyDescriptor', 'link-142');">StrategyDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-1032" class="py-name"><a title="netaddr.address.Addr.STRATEGIES
-netaddr.address.CIDR.STRATEGIES
-netaddr.address.EUI.STRATEGIES
-netaddr.address.IP.STRATEGIES
-netaddr.address.IPRange.STRATEGIES
-netaddr.address.Wildcard.STRATEGIES" class="py-name" href="#" onclick="return doclink('link-1032', 'STRATEGIES', 'link-46');">STRATEGIES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2153"></a><tt class="py-lineno">2153</tt> <tt class="py-line"> <tt id="link-1033" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-1033', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-1034" class="py-name"><a title="netaddr.address.AddrTypeDescriptor" class="py-name" href="#" onclick="return doclink('link-1034', 'AddrTypeDescriptor', 'link-145');">AddrTypeDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-1035" class="py-name"><a title="netaddr.address.Addr.ADDR_TYPES
-netaddr.address.CIDR.ADDR_TYPES
-netaddr.address.EUI.ADDR_TYPES
-netaddr.address.IP.ADDR_TYPES
-netaddr.address.IPRange.ADDR_TYPES
-netaddr.address.Wildcard.ADDR_TYPES" class="py-name" href="#" onclick="return doclink('link-1035', 'ADDR_TYPES', 'link-133');">ADDR_TYPES</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2154"></a><tt class="py-lineno">2154</tt> <tt class="py-line"> <tt id="link-1036" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1036', 'fmt', 'link-261');">fmt</a></tt> <tt class="py-op">=</tt> <tt id="link-1037" class="py-name"><a title="netaddr.address.FormatDescriptor" class="py-name" href="#" onclick="return doclink('link-1037', 'FormatDescriptor', 'link-534');">FormatDescriptor</a></tt><tt class="py-op">(</tt><tt id="link-1038" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-1038', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2155"></a><tt class="py-lineno">2155</tt> <tt class="py-line"> </tt>
-<a name="Wildcard.is_valid"></a><div id="Wildcard.is_valid-def"><a name="L2156"></a><tt class="py-lineno">2156</tt> <a class="py-toggle" href="#" id="Wildcard.is_valid-toggle" onclick="return toggle('Wildcard.is_valid');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Wildcard-class.html#is_valid">is_valid</a><tt class="py-op">(</tt><tt class="py-param">wildcard</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Wildcard.is_valid-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Wildcard.is_valid-expanded"><a name="L2157"></a><tt class="py-lineno">2157</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2158"></a><tt class="py-lineno">2158</tt> <tt class="py-line"><tt class="py-docstring"> A static method that validates wildcard address ranges.</tt> </tt>
-<a name="L2159"></a><tt class="py-lineno">2159</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2160"></a><tt class="py-lineno">2160</tt> <tt class="py-line"><tt class="py-docstring"> @param wildcard: an IPv4 wildcard address.</tt> </tt>
-<a name="L2161"></a><tt class="py-lineno">2161</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2162"></a><tt class="py-lineno">2162</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if wildcard address is valid, False otherwise.</tt> </tt>
-<a name="L2163"></a><tt class="py-lineno">2163</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2164"></a><tt class="py-lineno">2164</tt> <tt class="py-line"> <tt class="py-comment">#TODO: Add support for abbreviated wildcards</tt> </tt>
-<a name="L2165"></a><tt class="py-lineno">2165</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#TODO: e.g. 192.168.*.* == 192.168.*</tt> </tt>
-<a name="L2166"></a><tt class="py-lineno">2166</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#TODO: *.*.*.* == *</tt> </tt>
-<a name="L2167"></a><tt class="py-lineno">2167</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#TODO: Add strict flag to enable verbose wildcard checking.</tt> </tt>
-<a name="L2168"></a><tt class="py-lineno">2168</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2169"></a><tt class="py-lineno">2169</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2170"></a><tt class="py-lineno">2170</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L2171"></a><tt class="py-lineno">2171</tt> <tt class="py-line"> <tt class="py-name">octets</tt> <tt class="py-op">=</tt> <tt id="link-1039" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1039', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2172"></a><tt class="py-lineno">2172</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">octets</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">4</tt><tt class="py-op">:</tt> </tt>
-<a name="L2173"></a><tt class="py-lineno">2173</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2174"></a><tt class="py-lineno">2174</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">o</tt> <tt class="py-keyword">in</tt> <tt class="py-name">octets</tt><tt class="py-op">:</tt> </tt>
-<a name="L2175"></a><tt class="py-lineno">2175</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'-'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">o</tt><tt class="py-op">:</tt> </tt>
-<a name="L2176"></a><tt class="py-lineno">2176</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">seen_hyphen</tt><tt class="py-op">:</tt> </tt>
-<a name="L2177"></a><tt class="py-lineno">2177</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2178"></a><tt class="py-lineno">2178</tt> <tt class="py-line"> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L2179"></a><tt class="py-lineno">2179</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">seen_asterisk</tt><tt class="py-op">:</tt> </tt>
-<a name="L2180"></a><tt class="py-lineno">2180</tt> <tt class="py-line"> <tt class="py-comment"># Asterisks cannot precede hyphenated octets.</tt> </tt>
-<a name="L2181"></a><tt class="py-lineno">2181</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2182"></a><tt class="py-lineno">2182</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">o1</tt><tt class="py-op">,</tt> <tt class="py-name">o2</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">o</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L2183"></a><tt class="py-lineno">2183</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">o1</tt> <tt class="py-op">&gt;=</tt> <tt class="py-name">o2</tt><tt class="py-op">:</tt> </tt>
-<a name="L2184"></a><tt class="py-lineno">2184</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2185"></a><tt class="py-lineno">2185</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">o1</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">254</tt><tt class="py-op">:</tt> </tt>
-<a name="L2186"></a><tt class="py-lineno">2186</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2187"></a><tt class="py-lineno">2187</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">1</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">o2</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">255</tt><tt class="py-op">:</tt> </tt>
-<a name="L2188"></a><tt class="py-lineno">2188</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2189"></a><tt class="py-lineno">2189</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">o</tt> <tt class="py-op">==</tt> <tt class="py-string">'*'</tt><tt class="py-op">:</tt> </tt>
-<a name="L2190"></a><tt class="py-lineno">2190</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L2191"></a><tt class="py-lineno">2191</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2192"></a><tt class="py-lineno">2192</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">seen_hyphen</tt> <tt class="py-keyword">is</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L2193"></a><tt class="py-lineno">2193</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2194"></a><tt class="py-lineno">2194</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">seen_asterisk</tt> <tt class="py-keyword">is</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L2195"></a><tt class="py-lineno">2195</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2196"></a><tt class="py-lineno">2196</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">o</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">255</tt><tt class="py-op">:</tt> </tt>
-<a name="L2197"></a><tt class="py-lineno">2197</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2198"></a><tt class="py-lineno">2198</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">AttributeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L2199"></a><tt class="py-lineno">2199</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2200"></a><tt class="py-lineno">2200</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L2201"></a><tt class="py-lineno">2201</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2202"></a><tt class="py-lineno">2202</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L2203"></a><tt class="py-lineno">2203</tt> <tt class="py-line"> </tt>
-<a name="L2204"></a><tt class="py-lineno">2204</tt> <tt class="py-line"> <tt id="link-1040" class="py-name" targets="Static Method netaddr.address.Wildcard.is_valid()=netaddr.address.Wildcard-class.html#is_valid"><a title="netaddr.address.Wildcard.is_valid" class="py-name" href="#" onclick="return doclink('link-1040', 'is_valid', 'link-1040');">is_valid</a></tt> <tt class="py-op">=</tt> <tt class="py-name">staticmethod</tt><tt class="py-op">(</tt><tt id="link-1041" class="py-name"><a title="netaddr.address.Wildcard.is_valid" class="py-name" href="#" onclick="return doclink('link-1041', 'is_valid', 'link-1040');">is_valid</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2205"></a><tt class="py-lineno">2205</tt> <tt class="py-line"> </tt>
-<a name="Wildcard.__init__"></a><div id="Wildcard.__init__-def"><a name="L2206"></a><tt class="py-lineno">2206</tt> <a class="py-toggle" href="#" id="Wildcard.__init__-toggle" onclick="return toggle('Wildcard.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Wildcard-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">wildcard</tt><tt class="py-op">,</tt> <tt class="py-param">fmt</tt><tt class="py-op">=</tt><tt id="link-1042" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-1042', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Wildcard.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Wildcard.__init__-expanded"><a name="L2207"></a><tt class="py-lineno">2207</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2208"></a><tt class="py-lineno">2208</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L2209"></a><tt class="py-lineno">2209</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2210"></a><tt class="py-lineno">2210</tt> <tt class="py-line"><tt class="py-docstring"> @param wildcard: a valid IPv4 wildcard address</tt> </tt>
-<a name="L2211"></a><tt class="py-lineno">2211</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2212"></a><tt class="py-lineno">2212</tt> <tt class="py-line"><tt class="py-docstring"> @param fmt: (optional) callable used on return values.</tt> </tt>
-<a name="L2213"></a><tt class="py-lineno">2213</tt> <tt class="py-line"><tt class="py-docstring"> Default: L{IP} objects. See L{nrange()} documentations for</tt> </tt>
-<a name="L2214"></a><tt class="py-lineno">2214</tt> <tt class="py-line"><tt class="py-docstring"> more details on the various options..</tt> </tt>
-<a name="L2215"></a><tt class="py-lineno">2215</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2216"></a><tt class="py-lineno">2216</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt id="link-1043" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-1043', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">.</tt><tt id="link-1044" class="py-name"><a title="netaddr.address.Wildcard.is_valid" class="py-name" href="#" onclick="return doclink('link-1044', 'is_valid', 'link-1040');">is_valid</a></tt><tt class="py-op">(</tt><tt id="link-1045" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1045', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2217"></a><tt class="py-lineno">2217</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-1046" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-1046', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a recognised wildcard address!'</tt> \ </tt>
-<a name="L2218"></a><tt class="py-lineno">2218</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt id="link-1047" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1047', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2219"></a><tt class="py-lineno">2219</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L2220"></a><tt class="py-lineno">2220</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L2221"></a><tt class="py-lineno">2221</tt> <tt class="py-line"> </tt>
-<a name="L2222"></a><tt class="py-lineno">2222</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">octet</tt> <tt class="py-keyword">in</tt> <tt id="link-1048" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1048', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2223"></a><tt class="py-lineno">2223</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'-'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">octet</tt><tt class="py-op">:</tt> </tt>
-<a name="L2224"></a><tt class="py-lineno">2224</tt> <tt class="py-line"> <tt class="py-name">oct_tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">octet</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2225"></a><tt class="py-lineno">2225</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-name">oct_tokens</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L2226"></a><tt class="py-lineno">2226</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-name">oct_tokens</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L2227"></a><tt class="py-lineno">2227</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">octet</tt> <tt class="py-op">==</tt> <tt class="py-string">'*'</tt><tt class="py-op">:</tt> </tt>
-<a name="L2228"></a><tt class="py-lineno">2228</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-string">'0'</tt><tt class="py-op">]</tt> </tt>
-<a name="L2229"></a><tt class="py-lineno">2229</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-string">'255'</tt><tt class="py-op">]</tt> </tt>
-<a name="L2230"></a><tt class="py-lineno">2230</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2231"></a><tt class="py-lineno">2231</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-name">octet</tt><tt class="py-op">]</tt> </tt>
-<a name="L2232"></a><tt class="py-lineno">2232</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-name">octet</tt><tt class="py-op">]</tt> </tt>
-<a name="L2233"></a><tt class="py-lineno">2233</tt> <tt class="py-line"> </tt>
-<a name="L2234"></a><tt class="py-lineno">2234</tt> <tt class="py-line"> <tt id="link-1049" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1049', 'first', 'link-110');">first</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">)</tt> </tt>
-<a name="L2235"></a><tt class="py-lineno">2235</tt> <tt class="py-line"> <tt id="link-1050" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-1050', 'last', 'link-372');">last</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">t2</tt><tt class="py-op">)</tt> </tt>
-<a name="L2236"></a><tt class="py-lineno">2236</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-1051" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-1051', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-1052" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-1052', '__init__', 'link-258');">__init__</a></tt><tt class="py-op">(</tt><tt id="link-1053" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1053', 'first', 'link-110');">first</a></tt><tt class="py-op">,</tt> <tt id="link-1054" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-1054', 'last', 'link-372');">last</a></tt><tt class="py-op">,</tt> <tt id="link-1055" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1055', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">=</tt><tt id="link-1056" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-1056', 'fmt', 'link-261');">fmt</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2237"></a><tt class="py-lineno">2237</tt> <tt class="py-line"> </tt>
-<a name="L2238"></a><tt class="py-lineno">2238</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1057" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-1057', 'addr_type', 'link-43');">addr_type</a></tt> <tt class="py-op">!=</tt> <tt id="link-1058" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-1058', 'AT_INET', 'link-4');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L2239"></a><tt class="py-lineno">2239</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-1059" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-1059', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'Wildcard syntax only supports IPv4!'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2240"></a><tt class="py-lineno">2240</tt> <tt class="py-line"> </tt>
-<a name="Wildcard.__str__"></a><div id="Wildcard.__str__-def"><a name="L2241"></a><tt class="py-lineno">2241</tt> <a class="py-toggle" href="#" id="Wildcard.__str__-toggle" onclick="return toggle('Wildcard.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Wildcard-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Wildcard.__str__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Wildcard.__str__-expanded"><a name="L2242"></a><tt class="py-lineno">2242</tt> <tt class="py-line"> <tt class="py-name">t1</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1060" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1060', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-1061" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-1061', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1062" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-1062', 'first', 'link-110');">first</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2243"></a><tt class="py-lineno">2243</tt> <tt class="py-line"> <tt class="py-name">t2</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1063" class="py-name"><a title="netaddr.address.Addr.strategy
-netaddr.address.CIDR.strategy
-netaddr.address.EUI.strategy
-netaddr.address.IP.strategy
-netaddr.address.IPRange.strategy
-netaddr.address.Wildcard.strategy
-netaddr.strategy" class="py-name" href="#" onclick="return doclink('link-1063', 'strategy', 'link-10');">strategy</a></tt><tt class="py-op">.</tt><tt id="link-1064" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-1064', 'int_to_words', 'link-169');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1065" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-1065', 'last', 'link-372');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2244"></a><tt class="py-lineno">2244</tt> <tt class="py-line"> </tt>
-<a name="L2245"></a><tt class="py-lineno">2245</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L2246"></a><tt class="py-lineno">2246</tt> <tt class="py-line"> </tt>
-<a name="L2247"></a><tt class="py-lineno">2247</tt> <tt class="py-line"> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2248"></a><tt class="py-lineno">2248</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L2249"></a><tt class="py-lineno">2249</tt> <tt class="py-line"> </tt>
-<a name="L2250"></a><tt class="py-lineno">2250</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">4</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2251"></a><tt class="py-lineno">2251</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L2252"></a><tt class="py-lineno">2252</tt> <tt class="py-line"> <tt class="py-comment"># A normal octet.</tt> </tt>
-<a name="L2253"></a><tt class="py-lineno">2253</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2254"></a><tt class="py-lineno">2254</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-op">(</tt><tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-number">255</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2255"></a><tt class="py-lineno">2255</tt> <tt class="py-line"> <tt class="py-comment"># An asterisk octet.</tt> </tt>
-<a name="L2256"></a><tt class="py-lineno">2256</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'*'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2257"></a><tt class="py-lineno">2257</tt> <tt class="py-line"> <tt class="py-name">seen_asterisk</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L2258"></a><tt class="py-lineno">2258</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2259"></a><tt class="py-lineno">2259</tt> <tt class="py-line"> <tt class="py-comment"># Create a hyphenated octet - only one allowed per wildcard.</tt> </tt>
-<a name="L2260"></a><tt class="py-lineno">2260</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">seen_asterisk</tt><tt class="py-op">:</tt> </tt>
-<a name="L2261"></a><tt class="py-lineno">2261</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">seen_hyphen</tt><tt class="py-op">:</tt> </tt>
-<a name="L2262"></a><tt class="py-lineno">2262</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'%s-%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">t1</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">t2</tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2263"></a><tt class="py-lineno">2263</tt> <tt class="py-line"> <tt class="py-name">seen_hyphen</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L2264"></a><tt class="py-lineno">2264</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2265"></a><tt class="py-lineno">2265</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-1066" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-1066', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'only one hyphenated octet '</tt> \ </tt>
-<a name="L2266"></a><tt class="py-lineno">2266</tt> <tt class="py-line"> <tt class="py-string">' per wildcard allowed!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2267"></a><tt class="py-lineno">2267</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2268"></a><tt class="py-lineno">2268</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-1067" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-1067', 'AddrFormatError', 'link-1');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'asterisks not permitted before '</tt> \ </tt>
-<a name="L2269"></a><tt class="py-lineno">2269</tt> <tt class="py-line"> <tt class="py-string">'hyphenated octets!'</tt><tt class="py-op">)</tt> </tt>
-<a name="L2270"></a><tt class="py-lineno">2270</tt> <tt class="py-line"> </tt>
-<a name="L2271"></a><tt class="py-lineno">2271</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2272"></a><tt class="py-lineno">2272</tt> <tt class="py-line"> </tt>
-<a name="Wildcard.__repr__"></a><div id="Wildcard.__repr__-def"><a name="L2273"></a><tt class="py-lineno">2273</tt> <a class="py-toggle" href="#" id="Wildcard.__repr__-toggle" onclick="return toggle('Wildcard.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.Wildcard-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Wildcard.__repr__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="Wildcard.__repr__-expanded"><a name="L2274"></a><tt class="py-lineno">2274</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L2275"></a><tt class="py-lineno">2275</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s(%r)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L2276"></a><tt class="py-lineno">2276</tt> <tt class="py-line"> </tt>
-<a name="L2277"></a><tt class="py-lineno">2277</tt> <tt class="py-line"> </tt>
-<a name="L2278"></a><tt class="py-lineno">2278</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IPRangeSet"></a><div id="IPRangeSet-def"><a name="L2279"></a><tt class="py-lineno">2279</tt> <a class="py-toggle" href="#" id="IPRangeSet-toggle" onclick="return toggle('IPRangeSet');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html">IPRangeSet</a><tt class="py-op">(</tt><tt class="py-base-class">set</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet-collapsed" style="display:none;" pad="++++" indent="++++"></div><div id="IPRangeSet-expanded"><a name="L2280"></a><tt class="py-lineno">2280</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2281"></a><tt class="py-lineno">2281</tt> <tt class="py-line"><tt class="py-docstring"> B{*EXPERIMENTAL*} A customised Python set class that deals with collections</tt> </tt>
-<a name="L2282"></a><tt class="py-lineno">2282</tt> <tt class="py-line"><tt class="py-docstring"> of IPRange class and subclass instances.</tt> </tt>
-<a name="L2283"></a><tt class="py-lineno">2283</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPRangeSet.__init__"></a><div id="IPRangeSet.__init__-def"><a name="L2284"></a><tt class="py-lineno">2284</tt> <a class="py-toggle" href="#" id="IPRangeSet.__init__-toggle" onclick="return toggle('IPRangeSet.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addrs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.__init__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.__init__-expanded"><a name="L2285"></a><tt class="py-lineno">2285</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2286"></a><tt class="py-lineno">2286</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L2287"></a><tt class="py-lineno">2287</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2288"></a><tt class="py-lineno">2288</tt> <tt class="py-line"><tt class="py-docstring"> @param addrs: A sequence of IPRange class/subclass instances used to</tt> </tt>
-<a name="L2289"></a><tt class="py-lineno">2289</tt> <tt class="py-line"><tt class="py-docstring"> pre-populate the set. Individual CIDR objects can be added and</tt> </tt>
-<a name="L2290"></a><tt class="py-lineno">2290</tt> <tt class="py-line"><tt class="py-docstring"> removed after instantiation with the usual set methods, add() and</tt> </tt>
-<a name="L2291"></a><tt class="py-lineno">2291</tt> <tt class="py-line"><tt class="py-docstring"> remove().</tt> </tt>
-<a name="L2292"></a><tt class="py-lineno">2292</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2293"></a><tt class="py-lineno">2293</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">addr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addrs</tt><tt class="py-op">:</tt> </tt>
-<a name="L2294"></a><tt class="py-lineno">2294</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt id="link-1068" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-1068', 'IP', 'link-76');">IP</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2295"></a><tt class="py-lineno">2295</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">.</tt><tt id="link-1069" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1069', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2296"></a><tt class="py-lineno">2296</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L2297"></a><tt class="py-lineno">2297</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L2298"></a><tt class="py-lineno">2298</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt id="link-1070" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-1070', 'CIDR', 'link-354');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2299"></a><tt class="py-lineno">2299</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L2300"></a><tt class="py-lineno">2300</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L2301"></a><tt class="py-lineno">2301</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L2302"></a><tt class="py-lineno">2302</tt> <tt class="py-line"> <tt id="link-1071" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-1071', 'ip', 'link-75');">ip</a></tt> <tt class="py-op">=</tt> <tt id="link-1072" class="py-name"><a title="netaddr.address.IP" class="py-name" href="#" onclick="return doclink('link-1072', 'IP', 'link-76');">IP</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L2303"></a><tt class="py-lineno">2303</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt id="link-1073" class="py-name"><a title="netaddr.ip" class="py-name" href="#" onclick="return doclink('link-1073', 'ip', 'link-75');">ip</a></tt><tt class="py-op">.</tt><tt id="link-1074" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1074', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2304"></a><tt class="py-lineno">2304</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L2305"></a><tt class="py-lineno">2305</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L2306"></a><tt class="py-lineno">2306</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L2307"></a><tt class="py-lineno">2307</tt> <tt class="py-line"> <tt id="link-1075" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1075', 'wildcard', 'link-361');">wildcard</a></tt> <tt class="py-op">=</tt> <tt id="link-1076" class="py-name"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-1076', 'Wildcard', 'link-457');">Wildcard</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L2308"></a><tt class="py-lineno">2308</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L2309"></a><tt class="py-lineno">2309</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt id="link-1077" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1077', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">.</tt><tt id="link-1078" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-1078', 'cidr', 'link-434');">cidr</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L2310"></a><tt class="py-lineno">2310</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L2311"></a><tt class="py-lineno">2311</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt id="link-1079" class="py-name"><a title="netaddr.address.IP.wildcard
-netaddr.address.IPRange.wildcard" class="py-name" href="#" onclick="return doclink('link-1079', 'wildcard', 'link-361');">wildcard</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L2312"></a><tt class="py-lineno">2312</tt> <tt class="py-line"> <tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L2313"></a><tt class="py-lineno">2313</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L2314"></a><tt class="py-lineno">2314</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L2315"></a><tt class="py-lineno">2315</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">add</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L2316"></a><tt class="py-lineno">2316</tt> <tt class="py-line"> </tt>
-<a name="IPRangeSet.__contains__"></a><div id="IPRangeSet.__contains__-def"><a name="L2317"></a><tt class="py-lineno">2317</tt> <a class="py-toggle" href="#" id="IPRangeSet.__contains__-toggle" onclick="return toggle('IPRangeSet.__contains__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#__contains__">__contains__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.__contains__-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.__contains__-expanded"><a name="L2318"></a><tt class="py-lineno">2318</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2319"></a><tt class="py-lineno">2319</tt> <tt class="py-line"><tt class="py-docstring"> @return: True if C{other} IP or IPRange class/subclass instance</tt> </tt>
-<a name="L2320"></a><tt class="py-lineno">2320</tt> <tt class="py-line"><tt class="py-docstring"> matches any of the members in this IPRangeSet, False otherwise.</tt> </tt>
-<a name="L2321"></a><tt class="py-lineno">2321</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2322"></a><tt class="py-lineno">2322</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">addr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> </tt>
-<a name="L2323"></a><tt class="py-lineno">2323</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L2324"></a><tt class="py-lineno">2324</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L2325"></a><tt class="py-lineno">2325</tt> <tt class="py-line"> </tt>
-<a name="IPRangeSet.any_match"></a><div id="IPRangeSet.any_match-def"><a name="L2326"></a><tt class="py-lineno">2326</tt> <a class="py-toggle" href="#" id="IPRangeSet.any_match-toggle" onclick="return toggle('IPRangeSet.any_match');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#any_match">any_match</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.any_match-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.any_match-expanded"><a name="L2327"></a><tt class="py-lineno">2327</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2328"></a><tt class="py-lineno">2328</tt> <tt class="py-line"><tt class="py-docstring"> @param other: An IP or IPRange class/subclass instance.</tt> </tt>
-<a name="L2329"></a><tt class="py-lineno">2329</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2330"></a><tt class="py-lineno">2330</tt> <tt class="py-line"><tt class="py-docstring"> @return: The first IP or IPRange class/subclass instance object that</tt> </tt>
-<a name="L2331"></a><tt class="py-lineno">2331</tt> <tt class="py-line"><tt class="py-docstring"> matches C{other} from any of the members in this IPRangeSet, None</tt> </tt>
-<a name="L2332"></a><tt class="py-lineno">2332</tt> <tt class="py-line"><tt class="py-docstring"> otherwise.</tt> </tt>
-<a name="L2333"></a><tt class="py-lineno">2333</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2334"></a><tt class="py-lineno">2334</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">addr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> </tt>
-<a name="L2335"></a><tt class="py-lineno">2335</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L2336"></a><tt class="py-lineno">2336</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addr</tt> </tt>
-</div><a name="L2337"></a><tt class="py-lineno">2337</tt> <tt class="py-line"> </tt>
-<a name="IPRangeSet.all_matches"></a><div id="IPRangeSet.all_matches-def"><a name="L2338"></a><tt class="py-lineno">2338</tt> <a class="py-toggle" href="#" id="IPRangeSet.all_matches-toggle" onclick="return toggle('IPRangeSet.all_matches');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#all_matches">all_matches</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.all_matches-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.all_matches-expanded"><a name="L2339"></a><tt class="py-lineno">2339</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2340"></a><tt class="py-lineno">2340</tt> <tt class="py-line"><tt class="py-docstring"> @param other: An IP or IPRange class/subclass instance.</tt> </tt>
-<a name="L2341"></a><tt class="py-lineno">2341</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2342"></a><tt class="py-lineno">2342</tt> <tt class="py-line"><tt class="py-docstring"> @return: All IP or IPRange class/subclass instances matching C{other}</tt> </tt>
-<a name="L2343"></a><tt class="py-lineno">2343</tt> <tt class="py-line"><tt class="py-docstring"> from this IPRangeSet, an empty list otherwise.</tt> </tt>
-<a name="L2344"></a><tt class="py-lineno">2344</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2345"></a><tt class="py-lineno">2345</tt> <tt class="py-line"> <tt class="py-name">addrs</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L2346"></a><tt class="py-lineno">2346</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">addr</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">:</tt> </tt>
-<a name="L2347"></a><tt class="py-lineno">2347</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">other</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L2348"></a><tt class="py-lineno">2348</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L2349"></a><tt class="py-lineno">2349</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addrs</tt> </tt>
-</div><a name="L2350"></a><tt class="py-lineno">2350</tt> <tt class="py-line"> </tt>
-<a name="IPRangeSet.min_match"></a><div id="IPRangeSet.min_match-def"><a name="L2351"></a><tt class="py-lineno">2351</tt> <a class="py-toggle" href="#" id="IPRangeSet.min_match-toggle" onclick="return toggle('IPRangeSet.min_match');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#min_match">min_match</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.min_match-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.min_match-expanded"><a name="L2352"></a><tt class="py-lineno">2352</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2353"></a><tt class="py-lineno">2353</tt> <tt class="py-line"><tt class="py-docstring"> @param other: An IP or IPRange class/subclass instance.</tt> </tt>
-<a name="L2354"></a><tt class="py-lineno">2354</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2355"></a><tt class="py-lineno">2355</tt> <tt class="py-line"><tt class="py-docstring"> @return: The smallest IP or IPRange class/subclass instance matching</tt> </tt>
-<a name="L2356"></a><tt class="py-lineno">2356</tt> <tt class="py-line"><tt class="py-docstring"> C{other} from this IPRangeSet, None otherwise.</tt> </tt>
-<a name="L2357"></a><tt class="py-lineno">2357</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2358"></a><tt class="py-lineno">2358</tt> <tt class="py-line"> <tt class="py-name">addrs</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1080" class="py-name" targets="Method netaddr.address.IPRangeSet.all_matches()=netaddr.address.IPRangeSet-class.html#all_matches"><a title="netaddr.address.IPRangeSet.all_matches" class="py-name" href="#" onclick="return doclink('link-1080', 'all_matches', 'link-1080');">all_matches</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L2359"></a><tt class="py-lineno">2359</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L2360"></a><tt class="py-lineno">2360</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L2361"></a><tt class="py-lineno">2361</tt> <tt class="py-line"> </tt>
-<a name="L2362"></a><tt class="py-lineno">2362</tt> <tt class="py-line"> </tt>
-<a name="IPRangeSet.max_match"></a><div id="IPRangeSet.max_match-def"><a name="L2363"></a><tt class="py-lineno">2363</tt> <a class="py-toggle" href="#" id="IPRangeSet.max_match-toggle" onclick="return toggle('IPRangeSet.max_match');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.address.IPRangeSet-class.html#max_match">max_match</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">other</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPRangeSet.max_match-collapsed" style="display:none;" pad="++++" indent="++++++++"></div><div id="IPRangeSet.max_match-expanded"><a name="L2364"></a><tt class="py-lineno">2364</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L2365"></a><tt class="py-lineno">2365</tt> <tt class="py-line"><tt class="py-docstring"> @param other: An IP or IPRange class/subclass instance.</tt> </tt>
-<a name="L2366"></a><tt class="py-lineno">2366</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L2367"></a><tt class="py-lineno">2367</tt> <tt class="py-line"><tt class="py-docstring"> @return: The largest IP or IPRange class/subclass instance matching</tt> </tt>
-<a name="L2368"></a><tt class="py-lineno">2368</tt> <tt class="py-line"><tt class="py-docstring"> C{other} from this IPRangeSet, None otherwise.</tt> </tt>
-<a name="L2369"></a><tt class="py-lineno">2369</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L2370"></a><tt class="py-lineno">2370</tt> <tt class="py-line"> <tt class="py-name">addrs</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-1081" class="py-name"><a title="netaddr.address.IPRangeSet.all_matches" class="py-name" href="#" onclick="return doclink('link-1081', 'all_matches', 'link-1080');">all_matches</a></tt><tt class="py-op">(</tt><tt class="py-name">other</tt><tt class="py-op">)</tt> </tt>
-<a name="L2371"></a><tt class="py-lineno">2371</tt> <tt class="py-line"> <tt class="py-name">addrs</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L2372"></a><tt class="py-lineno">2372</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addrs</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-</div></div><a name="L2373"></a><tt class="py-lineno">2373</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:08 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.Addr-class.html b/docs/api/netaddr.address.Addr-class.html
deleted file mode 100755
index ee345eb..0000000
--- a/docs/api/netaddr.address.Addr-class.html
+++ /dev/null
@@ -1,1537 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.Addr</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;Addr
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.Addr-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Addr</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#Addr">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">Addr</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.address.IP-class.html">IP</a></li><li>, <a href="netaddr.address.EUI-class.html">EUI</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>The base class containing common functionality for all subclasses
- representing various network address types.</p>
- <p>It is a fully functioning class (as opposed to a virtual class) with a
- heuristic constructor that detects the type of address via the first
- argument if it is a string and sets itself up accordingly. If the first
- argument is an integer, then a constant must be provided via the second
- argument indicating the address type explicitly.</p>
- <p>Objects of this class behave differently dependent upon the type of
- address they represent.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>,
- <span class="summary-sig-arg">addr_type</span>=<span class="summary-sig-default">0</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__hash__" class="summary-sig-name">__hash__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- hash of this address suitable for dict keys, sets etc</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__hash__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__int__" class="summary-sig-name">__int__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- value of this address as a network byte order integer</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__int__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__long__" class="summary-sig-name">__long__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- value of this address as a network byte order integer</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__long__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- common string representation of this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#bits" class="summary-sig-name">bits</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- human-readable binary digit string of this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.bits">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#packed" class="summary-sig-name">packed</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- binary packed string of this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.packed">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#bin" class="summary-sig-name">bin</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- standard Python binary representation of this address.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.bin">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__len__" class="summary-sig-name">__len__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The size (width) of this address in bits</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__len__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__iter__" class="summary-sig-name">__iter__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- An iterator over individual words in this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__iter__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>)</span><br />
- Returns:
- The integer value of the word referenced by index (both positive and
- negative).</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__getitem__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__setitem__"></a><span class="summary-sig-name">__setitem__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>,
- <span class="summary-sig-arg">value</span>)</span><br />
- Sets the value of the word referenced by index in this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__setitem__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__hex__" class="summary-sig-name">__hex__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- network byte order hexadecimal string of this address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__hex__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__iadd__" class="summary-sig-name">__iadd__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">num</span>)</span><br />
- Increment value of network address by specified amount.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__iadd__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__isub__" class="summary-sig-name">__isub__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">num</span>)</span><br />
- Decrement value of network address by specified amount.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__isub__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__add__" class="summary-sig-name">__add__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- A new (potentially larger) Addr class/subclass instance.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__add__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__sub__" class="summary-sig-name">__sub__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- A new (potentially smaller) Addr class/subclass instance.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__sub__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__eq__" class="summary-sig-name">__eq__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is numerically the same as other,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__eq__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__ne__" class="summary-sig-name">__ne__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is not numerically the same other,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__ne__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__lt__" class="summary-sig-name">__lt__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is numerically lower in value than
- other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__lt__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__le__" class="summary-sig-name">__le__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is numerically lower or equal in
- value to other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__le__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__gt__" class="summary-sig-name">__gt__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is numerically greater in value
- than other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__gt__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__ge__" class="summary-sig-name">__ge__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if this address is numerically greater or equal in
- value to other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__ge__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__or__" class="summary-sig-name">__or__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- bitwise OR (x | y) of self.value with other.value.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__or__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__and__" class="summary-sig-name">__and__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- bitwise AND (x &amp; y) of self.value with other.value.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__and__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__xor__" class="summary-sig-name">__xor__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- bitwise exclusive OR (x ^ y) of self.value with other.value.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__xor__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__lshift__" class="summary-sig-name">__lshift__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">numbits</span>)</span><br />
- Returns:
- integer value of this IP address shifted left by x bits.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__lshift__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__rshift__" class="summary-sig-name">__rshift__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">numbits</span>)</span><br />
- Returns:
- integer value of this IP address right shifted by x bits.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__rshift__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Addr-class.html#__invert__" class="summary-sig-name">__invert__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- inversion (~x) of self.value.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__invert__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.Addr-class.html#STRATEGIES" class="summary-name">STRATEGIES</a> = <code title="(IPv4StrategyOpt(32, 8, '.', 4, 10, False),
- IPv6Strategy(128, 16, ':', 6, 16, False),
- EUI48Strategy(48, 8, '-', 48, 16, True),
- AddrStrategy(64, 8, '-', 64, 16, True))"><code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">, </code>IPv6S<code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="(0, 4, 6, 48, 64)"><code class="variable-group">(</code>0<code class="variable-op">, </code>4<code class="variable-op">, </code>6<code class="variable-op">, </code>48<code class="variable-op">, </code>64<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="value"></a><span class="summary-name">value</span> = <code title="AddrValueDescriptor('value')">AddrValueDescriptor('value')</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>,
- <span class="sig-arg">addr_type</span>=<span class="sig-default">0</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - the string form of a network address, or a network byte order
- integer within the supported range for the address type.</li>
- <li><strong class="pname"><code>addr_type</code></strong> - (optional) the network address type. If addr is an integer, this
- argument becomes mandatory.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__hash__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Hashing function)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__hash__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>hash(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>hash of this address suitable for dict keys, sets etc</dd>
- <dt>Overrides:
- object.__hash__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__int__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__int__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__int__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>value of this address as a network byte order integer</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__long__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__long__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__long__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>value of this address as a network byte order integer</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>common string representation of this address</dd>
- <dt>Overrides:
- object.__str__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="bits"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">bits</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.bits">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>human-readable binary digit string of this address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="packed"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">packed</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.packed">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>binary packed string of this address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="bin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">bin</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.bin">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>standard Python binary representation of this address. A back
- port of the format provided by the builtin bin() type available
- in Python 2.6.x and higher.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__len__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__len__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Length operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__len__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The size (width) of this address in bits</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__iter__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__iter__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__iter__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>An iterator over individual words in this address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__getitem__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">index</span>)</span>
- <br /><em class="fname">(Indexing operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__getitem__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The integer value of the word referenced by index (both positive
- and negative). Raises <code>IndexError</code> if index is out of
- bounds. Also supports Python list slices for accessing word
- groups.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__hex__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__hex__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__hex__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>network byte order hexadecimal string of this address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__iadd__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__iadd__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">num</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__iadd__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Increment value of network address by specified amount. Behaves like
- an unsigned integer, rolling over to zero when it reaches the maximum
- value threshold.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>num</code></strong> - size of increment</li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__isub__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__isub__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">num</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__isub__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Decrement value of network address by specified amount. Behaves like
- an unsigned integer, rolling over to maximum value when it goes below
- zero.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>num</code></strong> - size of decrement</li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__add__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__add__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Addition operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__add__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A new (potentially larger) Addr class/subclass instance.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__sub__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__sub__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Subtraction operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__sub__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A new (potentially smaller) Addr class/subclass instance.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__eq__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Equality operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__eq__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is numerically the same as
- other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__ne__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__ne__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__ne__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is not numerically the same
- other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__lt__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__lt__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Less-than operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__lt__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is numerically lower in value
- than other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__le__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__le__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Less-than-or-equals operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__le__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is numerically lower or equal
- in value to other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__gt__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__gt__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Greater-than operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__gt__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is numerically greater in value
- than other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__ge__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__ge__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Greater-than-or-equals operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__ge__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is numerically greater or equal
- in value to other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__or__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__or__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Or operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__or__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>bitwise OR (x | y) of self.value with other.value.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__and__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__and__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(And operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__and__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>bitwise AND (x &amp; y) of self.value with other.value.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__xor__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__xor__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Exclusive-Or operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__xor__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>bitwise exclusive OR (x ^ y) of self.value with other.value.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__lshift__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__lshift__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">numbits</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__lshift__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>numbits</code></strong> - size of shift (in bits).</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>integer value of this IP address shifted left by x bits.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__rshift__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__rshift__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">numbits</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__rshift__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>numbits</code></strong> - size of shift (in bits).</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>integer value of this IP address right shifted by x bits.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__invert__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__invert__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Addr.__invert__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an integer or int-like object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>inversion (~x) of self.value.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
-<a name="section-ClassVariableDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variable Details</span></td>
-</tr>
-</table>
-<a name="STRATEGIES"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">STRATEGIES</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">,</code>
- IPv6Strategy(128, 16, ':', 6, 16, False)<code class="variable-op">,</code>
- EUI48Strategy(48, 8, '-', 48, 16, True)<code class="variable-op">,</code>
- AddrStrategy(64, 8, '-', 64, 16, True)<code class="variable-group">)</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.AddrTypeDescriptor-class.html b/docs/api/netaddr.address.AddrTypeDescriptor-class.html
deleted file mode 100644
index 83904e2..0000000
--- a/docs/api/netaddr.address.AddrTypeDescriptor-class.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.AddrTypeDescriptor</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;AddrTypeDescriptor
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.AddrTypeDescriptor-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AddrTypeDescriptor</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#AddrTypeDescriptor">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">AddrTypeDescriptor</strong>
-</pre>
-
-<hr />
-<p>A descriptor that checks addr_type property assignments for validity
- and also keeps the strategy property in sync with any changes made.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.AddrTypeDescriptor-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr_types</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#AddrTypeDescriptor.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__set__"></a><span class="summary-sig-name">__set__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">instance</span>,
- <span class="summary-sig-arg">value</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#AddrTypeDescriptor.__set__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr_types</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#AddrTypeDescriptor.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr_types</code></strong> - a list of address types constants that are acceptable for
- assignment to the addr_type property.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.AddrValueDescriptor-class.html b/docs/api/netaddr.address.AddrValueDescriptor-class.html
deleted file mode 100644
index b3df3f7..0000000
--- a/docs/api/netaddr.address.AddrValueDescriptor-class.html
+++ /dev/null
@@ -1,241 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.AddrValueDescriptor</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;AddrValueDescriptor
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.AddrValueDescriptor-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AddrValueDescriptor</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#AddrValueDescriptor">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">AddrValueDescriptor</strong>
-</pre>
-
-<hr />
-<p>A descriptor that checks assignments to the named parameter passed to
- the constructor. It accepts network addresses in either string format or
- as network byte order integers. String based addresses are converted to
- their integer equivalents before assignment to the named parameter. Also
- ensures that addr_type and strategy are set correctly when parsing string
- based addresses.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.AddrValueDescriptor-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">name</span>)</span><br />
- Descriptor constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#AddrValueDescriptor.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__set__"></a><span class="summary-sig-name">__set__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">instance</span>,
- <span class="summary-sig-arg">value</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#AddrValueDescriptor.__set__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">name</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#AddrValueDescriptor.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Descriptor constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>name</code></strong> - the name of attribute which will be assigned the value.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.CIDR-class.html b/docs/api/netaddr.address.CIDR-class.html
deleted file mode 100755
index 73cba19..0000000
--- a/docs/api/netaddr.address.CIDR-class.html
+++ /dev/null
@@ -1,938 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.CIDR</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;CIDR
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.CIDR-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class CIDR</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <a href="netaddr.address.IPRange-class.html">IPRange</a> --+
- |
- <strong class="uidshort">CIDR</strong>
-</pre>
-
-<hr />
-<p>Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless
- Inter-Domain Routing) notation.</p>
- <p>CIDR is a method of categorising contiguous blocks of both IPv4 and
- IPv6 addresses. It is very scalable allowing for the optimal usage of the
- IP address space. It permits the aggregation of networks via route
- summarisation (supernetting) where adjacent routes can be combined into a
- single route easily. This greatly assists in the reduction of routing
- table sizes and improves network router efficiency.</p>
- <p>CIDR blocks are represented by a base network address and a prefix
- indicating the size of the (variable length) subnet mask. These are
- separated by a single '/' character. Subnet sizes increase in powers of
- base 2 aligning to bit boundaries.</p>
- <p>It is technically invalid to have non-zero bits in a CIDR address to
- the right of the implied netmask. For user convenience this is however
- configurable and can be disabled using a constructor argument.</p>
- <p>The constructor accepts CIDRs expressed in one of 4 different ways
- :-</p>
- <p>A) Standard CIDR format :-</p>
- <p>IPv4:</p>
-<pre class="literalblock">
- x.x.x.x/y -&gt; 192.0.2.0/24
-</pre>
- <p>where the x's represent the network address and y is the netmask
- prefix between 0 and 32.</p>
- <p>IPv6:</p>
-<pre class="literalblock">
- x::/y -&gt; fe80::/10
-</pre>
- <p>where the x's represent the network address and y is the netmask
- prefix between 0 and 128.</p>
- <p>B) Abbreviated CIDR format (IPv4 only):</p>
-<pre class="literalblock">
- x -&gt; 192
- x/y -&gt; 10/8
- x.x/y -&gt; 192.168/16
- x.x.x/y -&gt; 192.168.0/24
-</pre>
- <p>which are equivalent to:</p>
-<pre class="literalblock">
- x.0.0.0/y -&gt; 192.0.0.0/24
- x.0.0.0/y -&gt; 10.0.0.0/8
- x.x.0.0/y -&gt; 192.168.0.0/16
- x.x.x.0/y -&gt; 192.168.0.0/24
-
- - The trailing zeros are implicit.
- - Old classful IP address rules apply if y is omitted.
-</pre>
- <p>C) Hybrid CIDR format (prefix replaced by netmask) :-</p>
- <p>IPv4:</p>
-<pre class="literalblock">
- x.x.x.x/y.y.y.y -&gt; 192.0.2.0/255.255.255.0
-</pre>
- <p>IPv6:</p>
-<pre class="literalblock">
- x::/y:: -&gt; fe80::/ffc0::
-</pre>
- <p>where the y's represent a valid netmask.</p>
- <p>D) ACL-style CIDR format (prefix is replaced by a hostmask) :-</p>
- <p>Akin to Cisco's ACL (Access Control List) bitmasking (reverse
- netmasks).</p>
- <p>IPv4:</p>
-<pre class="literalblock">
- x.x.x.x/y.y.y.y -&gt; 192.0.2.0/0.0.0.255
-</pre>
- <p>IPv6:</p>
-<pre class="literalblock">
- x::/y:: -&gt; fe80::/3f:ffff:ffff:ffff:ffff:ffff:ffff:ffff
-</pre>
- <p>where the y's represent a valid hostmask.</p>
- <p>Reference: RFCs 1338 and 4632.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">cidr</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">&lt;class 'netaddr.address.IP'&gt;</span>,
- <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">True</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#__sub__" class="summary-sig-name">__sub__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Subtract another CIDR from this one.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__sub__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#__add__" class="summary-sig-name">__add__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Add another CIDR to this one returning a CIDR supernet that will
- contain both in the smallest possible sized range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__add__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#iter_host_addrs" class="summary-sig-name">iter_host_addrs</a>(<span class="summary-sig-arg">self</span>)</span><br />
- @return: An iterator object providing access to all valid host IP
- addresses within the specified CIDR block.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.iter_host_addrs">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#subnet" class="summary-sig-name">subnet</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">prefixlen</span>,
- <span class="summary-sig-arg">count</span>=<span class="summary-sig-default">None</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- A generator that returns CIDR subnets based on the current network
- base address and provided CIDR prefix and count.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.subnet">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#cidrs" class="summary-sig-name">cidrs</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A list of a copy of this <a href="netaddr.address.CIDR-class.html"
- class="link">CIDR</a> object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.cidrs">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- str(x)</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.IPRange-class.html">IPRange</a></code></b>:
- <code><a href="netaddr.address.IPRange-class.html#__contains__">__contains__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__eq__">__eq__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__ge__">__ge__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__getitem__">__getitem__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__gt__">__gt__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__hash__">__hash__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__iadd__">__iadd__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__isub__">__isub__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__iter__">__iter__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__le__">__le__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__len__">__len__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__lt__">__lt__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__ne__">__ne__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#adjacent">adjacent</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#format">format</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#iprange">iprange</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#issubnet">issubnet</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#issupernet">issupernet</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#overlaps">overlaps</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#size">size</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#wildcard">wildcard</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== STATIC METHODS ==================== -->
-<a name="section-StaticMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Static Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#abbrev_to_verbose" class="summary-sig-name">abbrev_to_verbose</a>(<span class="summary-sig-arg">abbrev_cidr</span>)</span><br />
- A static method that converts abbreviated IPv4 CIDRs to their more
- verbose equivalent.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.abbrev_to_verbose">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.CIDR-class.html#span" class="summary-sig-name">span</a>(<span class="summary-sig-arg">addrs</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- Static method that accepts a sequence of IP addresses and/or CIDRs,
- Wildcards and IPRanges returning a single CIDR that is large enough
- to span the lowest and highest IP addresses in the sequence (with a
- possible overlap on either end).</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.span">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="STRATEGIES"></a><span class="summary-name">STRATEGIES</span> = <code title="ST_IPV4, ST_IPV6">ST_IPV4, ST_IPV6</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="AT_UNSPEC, AT_INET, AT_INET6">AT_UNSPEC, AT_INET, AT_INET6</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="prefixlen"></a><span class="summary-name">prefixlen</span> = <code title="PrefixLenDescriptor('CIDR')">PrefixLenDescriptor('CIDR')</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="fmt"></a><span class="summary-name">fmt</span> = <code title="FormatDescriptor(IP)">FormatDescriptor(IP)</code>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.IPRange-class.html">IPRange</a></code></b>:
- <code><a href="netaddr.address.IPRange-class.html#first">first</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#last">last</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html#network" class="summary-name">network</a>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html#broadcast" class="summary-name">broadcast</a><br />
- <b>Please Note:</b> although IPv6 doesn't actually recognise the
- concept of a 'broadcast' address as the last address in a subnet (as
- in IPv4) so many other libraries do this that it isn't worth trying
- to resist.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html#netmask" class="summary-name">netmask</a>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.CIDR-class.html#hostmask" class="summary-name">hostmask</a>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="abbrev_to_verbose"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">abbrev_to_verbose</span>(<span class="sig-arg">abbrev_cidr</span>)</span>
- <br /><em class="fname">Static Method</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.abbrev_to_verbose">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>A static method that converts abbreviated IPv4 CIDRs to their more
- verbose equivalent.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>abbrev_cidr</code></strong> - an abbreviated CIDR.
- <p>Uses the old-style classful IP address rules to decide on a
- default subnet prefix if one is not explicitly provided.</p>
- <p>Only supports IPv4 addresses.</p>
- <p>Examples :</p>
-<pre class="literalblock">
- 10 - 10.0.0.0/8
- 10/16 - 10.0.0.0/16
- 128 - 128.0.0.0/16
- 128/8 - 128.0.0.0/8
- 192.168 - 192.168.0.0/16
-</pre></li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A verbose CIDR from an abbreviated CIDR or old-style classful
- network address, <code>None</code> if format provided was not
- recognised or supported.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="span"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">span</span>(<span class="sig-arg">addrs</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">None</span>)</span>
- <br /><em class="fname">Static Method</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.span">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Static method that accepts a sequence of IP addresses and/or CIDRs,
- Wildcards and IPRanges returning a single CIDR that is large enough to
- span the lowest and highest IP addresses in the sequence (with a possible
- overlap on either end).</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addrs</code></strong> - a sequence of IP, CIDR, Wildcard or IPRange objects and/or their
- string representations.</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used on return values. (Default: None - <a
- href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object) Also accepts str() and unicode().</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>a single CIDR object spanning all addresses.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">cidr</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">&lt;class 'netaddr.address.IP'&gt;</span>,
- <span class="sig-arg">strict</span>=<span class="sig-default">True</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>cidr</code></strong> - a valid IPv4/IPv6 CIDR address or abbreviated IPv4 network
- address.</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used on return values. Default: <a
- href="netaddr.address.IP-class.html" class="link">IP</a> class.
- See <a href="netaddr.address-module.html#nrange"
- class="link">nrange()</a> documentations for more details on the
- various options.</li>
- <li><strong class="pname"><code>strict</code></strong> - (optional) performs a test to ensure there are no non-zero bits
- to the right of the subnet mask or prefix when it is applied to
- the base address. (default: True)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__sub__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__sub__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Subtraction operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__sub__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Subtract another CIDR from this one.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - a CIDR object that is greater than or equal to <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A list of CIDR objects than remain after subtracting
- <code>other</code> from <code>self</code>.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__add__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__add__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Addition operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__add__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Add another CIDR to this one returning a CIDR supernet that will
- contain both in the smallest possible sized range.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - a CIDR object.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A new (potentially larger) CIDR object.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="iter_host_addrs"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">iter_host_addrs</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.iter_host_addrs">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <pre class="literalblock">
-
-@return: An iterator object providing access to all valid host IP
- addresses within the specified CIDR block.
- - with IPv4 the network and broadcast addresses are always
- excluded. Any smaller than 4 hosts yields an emtpy list.
- - with IPv6 only the unspecified address '::' is excluded from
- the yielded list.
-
-</pre>
- <dl class="fields">
- </dl>
-</td></tr></table>
-</div>
-<a name="subnet"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">subnet</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">prefixlen</span>,
- <span class="sig-arg">count</span>=<span class="sig-default">None</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.subnet">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>A generator that returns CIDR subnets based on the current network
- base address and provided CIDR prefix and count.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>prefixlen</code></strong> - a CIDR prefix.</li>
- <li><strong class="pname"><code>count</code></strong> - number of consecutive CIDRs to be returned.</li>
- <li><strong class="pname"><code>fmt</code></strong> - callable used on return values. Default: None - <a
- href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- objects. str() and unicode() supported.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>an iterator (as lists could potentially be very large) containing
- CIDR subnets below this CIDR's base address.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="cidrs"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">cidrs</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.cidrs">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A list of a copy of this <a
- href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object. This method is here mainly for compatibility with IPRange
- interface.</dd>
- <dt>Overrides:
- <a href="netaddr.address.IPRange-class.html#cidrs">IPRange.cidrs</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Overrides:
- object.__str__
- <dd><em class="note">(inherited documentation)</em></dd>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#CIDR.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== PROPERTY DETAILS ==================== -->
-<a name="section-PropertyDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Property Details</span></td>
-</tr>
-</table>
-<a name="network"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">network</h3>
-
- <dl class="fields">
- <dt>Get Method:</dt>
- <dd class="value"><span class="summary-sig"><i>unreachable</i>.network(<span class="summary-sig-arg">self</span>)</span>
- - Returns:
-The network (first) address in this CIDR block.
- </dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="broadcast"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">broadcast</h3>
- <p><b>Please Note:</b> although IPv6 doesn't actually recognise the
- concept of a 'broadcast' address as the last address in a subnet (as in
- IPv4) so many other libraries do this that it isn't worth trying to
- resist. This issue raises so many user queries that it is easier to
- dispense with the theory and be pragmatic instead.</p>
- <dl class="fields">
- <dt>Get Method:</dt>
- <dd class="value"><span class="summary-sig"><i>unreachable</i>.broadcast(<span class="summary-sig-arg">self</span>)</span>
- - <b>Please Note:</b> although IPv6 doesn't actually recognise the concept of
-a 'broadcast' address as the last address in a subnet (as in IPv4) so many
-other libraries do this that it isn't worth trying to resist.
- </dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="netmask"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">netmask</h3>
-
- <dl class="fields">
- <dt>Get Method:</dt>
- <dd class="value"><span class="summary-sig"><i>unreachable</i>.netmask(<span class="summary-sig-arg">self</span>)</span>
- - Returns:
-The subnet mask address of this CIDR block.
- </dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="hostmask"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">hostmask</h3>
-
- <dl class="fields">
- <dt>Get Method:</dt>
- <dd class="value"><span class="summary-sig"><i>unreachable</i>.hostmask(<span class="summary-sig-arg">self</span>)</span>
- - Returns:
-The host mask address of this CIDR block.
- </dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.EUI-class.html b/docs/api/netaddr.address.EUI-class.html
deleted file mode 100755
index 9cc059b..0000000
--- a/docs/api/netaddr.address.EUI-class.html
+++ /dev/null
@@ -1,641 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.EUI</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;EUI
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.EUI-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class EUI</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#EUI">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <a href="netaddr.address.Addr-class.html">Addr</a> --+
- |
- <strong class="uidshort">EUI</strong>
-</pre>
-
-<hr />
-<p>Represents an IEEE EUI (Extended Unique Identifier) indentifier.</p>
- <p>Input parser is flexible, supporting EUI-48 (including the many Media
- Access Control variants) and EUI-64.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>,
- <span class="summary-sig-arg">addr_type</span>=<span class="summary-sig-default">0</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#oui" class="summary-sig-name">oui</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">&lt;class 'netaddr.eui.OUI'&gt;</span>)</span><br />
- Returns:
- The OUI (Organisationally Unique Identifier) for this EUI.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.oui">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#ei" class="summary-sig-name">ei</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The EI (Extension Identifier) for this EUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.ei">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#isiab" class="summary-sig-name">isiab</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- True if this EUI is an IAB address, False otherwise</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.isiab">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#iab" class="summary-sig-name">iab</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">&lt;class 'netaddr.eui.IAB'&gt;</span>)</span><br />
- Returns:
- If isiab() is True, the IAB (Individual Address Block) is returned,
- None otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.iab">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#eui64" class="summary-sig-name">eui64</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The value of this EUI object as a new 64-bit EUI object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.eui64">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#ipv6_link_local" class="summary-sig-name">ipv6_link_local</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- new link local IPv6 <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object based on this <a
- href="netaddr.address.EUI-class.html" class="link">EUI</a> using
- technique described in RFC 4291.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.ipv6_link_local">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.EUI-class.html#info" class="summary-sig-name">info</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A record dict containing IEEE registration details for this EUI
- (MAC-48) if available, None otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#EUI.info">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.Addr-class.html">Addr</a></code></b>:
- <code><a href="netaddr.address.Addr-class.html#__add__">__add__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__and__">__and__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__eq__">__eq__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__ge__">__ge__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__getitem__">__getitem__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__gt__">__gt__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__hash__">__hash__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__hex__">__hex__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__iadd__">__iadd__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__int__">__int__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__invert__">__invert__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__isub__">__isub__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__iter__">__iter__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__le__">__le__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__len__">__len__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__long__">__long__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__lshift__">__lshift__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__lt__">__lt__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__ne__">__ne__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__or__">__or__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__repr__">__repr__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__rshift__">__rshift__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__setitem__">__setitem__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__str__">__str__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__sub__">__sub__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__xor__">__xor__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#bin">bin</a></code>,
- <code><a href="netaddr.address.Addr-class.html#bits">bits</a></code>,
- <code><a href="netaddr.address.Addr-class.html#packed">packed</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.EUI-class.html#STRATEGIES" class="summary-name">STRATEGIES</a> = <code title="(EUI48Strategy(48, 8, '-', 48, 16, True),
- AddrStrategy(64, 8, '-', 64, 16, True))"><code class="variable-group">(</code>EUI48Strategy(48, 8, '-', 48, 16, True)<code class="variable-op">, </code>AddrStr<code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="(0, 48, 64)"><code class="variable-group">(</code>0<code class="variable-op">, </code>48<code class="variable-op">, </code>64<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.Addr-class.html">Addr</a></code></b>:
- <code><a href="netaddr.address.Addr-class.html#value">value</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>,
- <span class="sig-arg">addr_type</span>=<span class="sig-default">0</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - an EUI-48 (MAC) or EUI-64 address string or a network byte order
- integer.</li>
- <li><strong class="pname"><code>addr_type</code></strong> - (optional) the specific EUI address type (<code>AT_LINK</code> or
- <code>AT_EUI64</code>). If addr is an integer, this argument is
- mandatory.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="oui"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">oui</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">&lt;class 'netaddr.eui.OUI'&gt;</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.oui">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>fmt</code></strong> - callable used on return values. Default: <a
- href="netaddr.eui.OUI-class.html" class="link">OUI</a> object.
- Also Supports str(), unicode(), int() and long().</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The OUI (Organisationally Unique Identifier) for this EUI.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="ei"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">ei</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.ei">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The EI (Extension Identifier) for this EUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="isiab"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">isiab</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.isiab">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if this EUI is an IAB address, False otherwise</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="iab"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">iab</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">&lt;class 'netaddr.eui.IAB'&gt;</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.iab">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>fmt</code></strong> - callable used on return values. Default: <a
- href="netaddr.eui.IAB-class.html" class="link">IAB</a> object.
- Also Supports str(), unicode(), int() and long().</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>If isiab() is True, the IAB (Individual Address Block) is
- returned, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="eui64"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">eui64</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.eui64">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The value of this EUI object as a new 64-bit EUI object.
- <ul>
- <li>
- If this object represents an EUI-48 it is converted to EUI-64
- as per the standard.
- </li>
- <li>
- If this object is already and EUI-64, it just returns a new,
- numerically equivalent object is returned instead.
- </li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="ipv6_link_local"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">ipv6_link_local</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.ipv6_link_local">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>new link local IPv6 <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object based on this <a
- href="netaddr.address.EUI-class.html" class="link">EUI</a> using
- technique described in RFC 4291. <b>Please Note:</b> this
- technique poses security risks in certain scenarios. Please read
- RFC 4941 for details. Reference: RFCs 4291 and 4941.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="info"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">info</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#EUI.info">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A record dict containing IEEE registration details for this EUI
- (MAC-48) if available, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
-<a name="section-ClassVariableDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variable Details</span></td>
-</tr>
-</table>
-<a name="STRATEGIES"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">STRATEGIES</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">(</code>EUI48Strategy(48, 8, '-', 48, 16, True)<code class="variable-op">,</code>
- AddrStrategy(64, 8, '-', 64, 16, True)<code class="variable-group">)</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.FormatDescriptor-class.html b/docs/api/netaddr.address.FormatDescriptor-class.html
deleted file mode 100644
index ce06d5f..0000000
--- a/docs/api/netaddr.address.FormatDescriptor-class.html
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.FormatDescriptor</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;FormatDescriptor
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.FormatDescriptor-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class FormatDescriptor</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#FormatDescriptor">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">FormatDescriptor</strong>
-</pre>
-
-<hr />
-<p>A descriptor that checks formatter property assignments for
- validity.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.FormatDescriptor-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">default</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#FormatDescriptor.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__set__"></a><span class="summary-sig-name">__set__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">instance</span>,
- <span class="summary-sig-arg">value</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#FormatDescriptor.__set__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">default</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#FormatDescriptor.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>default</code></strong> - the default callable to use if the formatter property is None.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.IP-class.html b/docs/api/netaddr.address.IP-class.html
deleted file mode 100755
index 35add9a..0000000
--- a/docs/api/netaddr.address.IP-class.html
+++ /dev/null
@@ -1,1307 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.IP</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;IP
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.IP-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IP</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#IP">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <a href="netaddr.address.Addr-class.html">Addr</a> --+
- |
- <strong class="uidshort">IP</strong>
-</pre>
-
-<hr />
-<p>Represents <b>individual</b> IPv4 and IPv6 addresses.</p>
- <p><b>Please Note:</b> this class is intended to provide low-level
- functionality to individual IP addresses such as octet/hextet access,
- integer/hex/binary conversions, etc. If you are coming from other
- libraries you may expect to find much higher level networking operations
- here. While the inclusion of a bitmask prefix or netmask to indicate
- subnet membership is permitted by the class constructor they are provided
- only as a convenience to the user.</p>
- <p>All higher level subnet and network operations can be found in objects
- of classes <a href="netaddr.address.CIDR-class.html"
- class="link">CIDR</a>, <a href="netaddr.address.IPRange-class.html"
- class="link">IPRange</a> and <a
- href="netaddr.address.Wildcard-class.html" class="link">Wildcard</a>.
- There are handy helper methods here, (<code>.cidr()</code>,
- <code>.iprange()</code> and <code>.wildcard()</code>) that return
- pre-initialised objects of those classes without you having to call them
- explicitly.</p>
- <p>Example usage :</p>
-<pre class="literalblock">
- &gt;&gt;&gt; ip = IP('10.0.0.1')
- &gt;&gt;&gt; list(ip) == [10, 0, 0, 1]
- True
- &gt;&gt;&gt; ip += 1
- &gt;&gt;&gt; str(ip) == '10.0.0.2'
- True
-
- &gt;&gt;&gt; IP('10.0.0.0/28').iprange()
- IPRange('10.0.0.0', '10.0.0.15')
-
- &gt;&gt;&gt; IP('10.0.0.64/24').cidr()
- CIDR('10.0.0.0/24')
-
- &gt;&gt;&gt; IP('192.168.0.1/255.255.253.0').wildcard()
- Wildcard('192.168.0-1.*')
-
- &gt;&gt;&gt; ipv6 = IP('fe80::20f:1fff:fe12:e733')
- &gt;&gt;&gt; ipv6[0:4]
- [65152, 0, 0, 0]
-
- &gt;&gt;&gt; IP('fe80::20f:1fff:fe12:e733/64').cidr()
- CIDR('fe80::/64')
-</pre>
- <p>See those classes for details on the functionality they provide.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>,
- <span class="summary-sig-arg">addr_type</span>=<span class="summary-sig-default">0</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_netmask" class="summary-sig-name">is_netmask</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this addr is a mask that would return a host id,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_netmask">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#netmask_bits" class="summary-sig-name">netmask_bits</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- If this address is a valid netmask, the number of non-zero bits are
- returned, otherwise it returns the width in bits for based on the
- version, 32 for IPv4 and 128 for IPv6.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.netmask_bits">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#reverse_dns" class="summary-sig-name">reverse_dns</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The reverse DNS lookup string for this IP address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.reverse_dns">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_hostmask" class="summary-sig-name">is_hostmask</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this address is a mask that would return a host
- id, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_hostmask">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#hostname" class="summary-sig-name">hostname</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- Returns the FQDN for this IP address via a DNS query using
- gethostbyaddr() Python's socket module.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.hostname">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#cidr" class="summary-sig-name">cidr</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A <a href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object based on this IP address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.cidr">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#wildcard" class="summary-sig-name">wildcard</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A <a href="netaddr.address.Wildcard-class.html"
- class="link">Wildcard</a> object based on this IP address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.wildcard">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#iprange" class="summary-sig-name">iprange</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A <a href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object based on this IP address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.iprange">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#ipv4" class="summary-sig-name">ipv4</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A new version 4 <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object numerically equivalent this address.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.ipv4">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#ipv6" class="summary-sig-name">ipv6</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">ipv4_compatible</span>=<span class="summary-sig-default">False</span>)</span><br />
- <b>Please Note:</b> the IPv4-Mapped IPv6 address format is now
- considered deprecated.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.ipv6">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_unicast" class="summary-sig-name">is_unicast</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is unicast, <code>False</code> otherwise</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_unicast">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_loopback" class="summary-sig-name">is_loopback</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is loopback address (not for network
- transmission), <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_loopback">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_multicast" class="summary-sig-name">is_multicast</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is multicast, <code>False</code>
- otherwise</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_multicast">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_private" class="summary-sig-name">is_private</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is for internal/private use only (i.e.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_private">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_link_local" class="summary-sig-name">is_link_local</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is link-local address <code>False</code>
- otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_link_local">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_reserved" class="summary-sig-name">is_reserved</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is in IANA reserved range,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_reserved">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_ipv4_mapped" class="summary-sig-name">is_ipv4_mapped</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is IPv4-compatible IPv6 address,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_ipv4_mapped">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#is_ipv4_compat" class="summary-sig-name">is_ipv4_compat</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- <code>True</code> if this IP is IPv4-mapped IPv6 address,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_ipv4_compat">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#info" class="summary-sig-name">info</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A record dict containing IANA registration details for this IP
- address if available, None otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.info">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- common string representation for this IP address</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IP-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IP.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.Addr-class.html">Addr</a></code></b>:
- <code><a href="netaddr.address.Addr-class.html#__add__">__add__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__and__">__and__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__eq__">__eq__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__ge__">__ge__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__getitem__">__getitem__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__gt__">__gt__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__hash__">__hash__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__hex__">__hex__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__iadd__">__iadd__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__int__">__int__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__invert__">__invert__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__isub__">__isub__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__iter__">__iter__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__le__">__le__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__len__">__len__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__long__">__long__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__lshift__">__lshift__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__lt__">__lt__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__ne__">__ne__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__or__">__or__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__rshift__">__rshift__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__setitem__">__setitem__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__sub__">__sub__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#__xor__">__xor__</a></code>,
- <code><a href="netaddr.address.Addr-class.html#bin">bin</a></code>,
- <code><a href="netaddr.address.Addr-class.html#bits">bits</a></code>,
- <code><a href="netaddr.address.Addr-class.html#packed">packed</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IP-class.html#STRATEGIES" class="summary-name">STRATEGIES</a> = <code title="(IPv4StrategyOpt(32, 8, '.', 4, 10, False),
- IPv6Strategy(128, 16, ':', 6, 16, False))"><code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">, </code>IPv6S<code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="(0, 4, 6)"><code class="variable-group">(</code>0<code class="variable-op">, </code>4<code class="variable-op">, </code>6<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IP-class.html#TRANSLATE_STR" class="summary-name">TRANSLATE_STR</a> = <code title="'''\x00\x01\x02\x03\x04\x05\x06\x07\x08\t
-\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\
-\x1d\x1e\x1f !&quot;#$%&amp;\'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWX\
-YZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x8\
-6\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\\
-x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa\
-9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\\
-xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xc\
-..."><code class="variable-quote">'</code><code class="variable-string">\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\</code><code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="prefixlen"></a><span class="summary-name">prefixlen</span> = <code title="PrefixLenDescriptor()">PrefixLenDescriptor()</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="_"></a><span class="summary-name">_</span> = <code title="255">255</code>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.Addr-class.html">Addr</a></code></b>:
- <code><a href="netaddr.address.Addr-class.html#value">value</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>,
- <span class="sig-arg">addr_type</span>=<span class="sig-default">0</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - an IPv4 or IPv6 address string with an optional subnet prefix or
- a network byte order integer.</li>
- <li><strong class="pname"><code>addr_type</code></strong> - (optional) the IP address type (<code>AT_INET</code> or
- <code>AT_INET6</code>). If <code class="link">addr</code> is an
- integer, this argument is mandatory.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_netmask"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_netmask</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_netmask">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this addr is a mask that would return a host
- id, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="netmask_bits"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">netmask_bits</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.netmask_bits">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>If this address is a valid netmask, the number of non-zero bits
- are returned, otherwise it returns the width in bits for based on
- the version, 32 for IPv4 and 128 for IPv6.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="reverse_dns"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">reverse_dns</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.reverse_dns">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The reverse DNS lookup string for this IP address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_hostmask"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_hostmask</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_hostmask">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this address is a mask that would return a
- host id, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="hostname"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">hostname</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.hostname">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>Returns the FQDN for this IP address via a DNS query using
- gethostbyaddr() Python's socket module.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="cidr"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">cidr</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.cidr">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A <a href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object based on this IP address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="wildcard"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">wildcard</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.wildcard">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A <a href="netaddr.address.Wildcard-class.html"
- class="link">Wildcard</a> object based on this IP address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="iprange"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">iprange</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.iprange">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A <a href="netaddr.address.CIDR-class.html" class="link">CIDR</a>
- object based on this IP address</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="ipv4"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">ipv4</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.ipv4">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A new version 4 <a href="netaddr.address.IP-class.html"
- class="link">IP</a> object numerically equivalent this address.
- If this object is already IPv4 then a copy is returned. If this
- object is IPv6 and its value is compatible with IPv4, a new IPv4
- <a href="netaddr.address.IP-class.html" class="link">IP</a>
- object is returned.
- <p>Raises an <a href="netaddr.AddrConversionError-class.html"
- class="link">AddrConversionError</a> is IPv6 address cannot be
- converted.</p></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="ipv6"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">ipv6</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">ipv4_compatible</span>=<span class="sig-default">False</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.ipv6">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p><b>Please Note:</b> the IPv4-Mapped IPv6 address format is now
- considered deprecated. Reference: RFC 4291</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>ipv4_compatible</code></strong> - If <code>True</code> returns an IPv4-Mapped address
- (::ffff:x.x.x.x), an IPv4-Compatible (::x.x.x.x) address
- otherwise. Default: False (IPv4-Mapped).</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A new <a href="netaddr.address.IP-class.html" class="link">IP</a>
- version 6 object that is numerically equivalent this address. If
- this object is already IPv6 then a copy of this object is
- returned. If this object is IPv4, a new version 6 <a
- href="netaddr.address.IP-class.html" class="link">IP</a> object
- is returned.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_unicast"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_unicast</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_unicast">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is unicast, <code>False</code>
- otherwise</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_loopback"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_loopback</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_loopback">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is loopback address (not for network
- transmission), <code>False</code> otherwise. References: RFC 3330
- and 4291.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_multicast"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_multicast</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_multicast">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is multicast, <code>False</code>
- otherwise</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_private"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_private</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_private">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is for internal/private use only
- (i.e. non-public), <code>False</code> otherwise. Reference: RFCs
- 1918, 3330, 4193, 3879 and 2365.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_link_local"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_link_local</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_link_local">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is link-local address
- <code>False</code> otherwise. Reference: RFCs 3927 and 4291.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_reserved"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_reserved</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_reserved">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is in IANA reserved range,
- <code>False</code> otherwise. Reference: RFCs 3330 and 3171.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_ipv4_mapped"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_ipv4_mapped</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_ipv4_mapped">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is IPv4-compatible IPv6 address,
- <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="is_ipv4_compat"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_ipv4_compat</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.is_ipv4_compat">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd><code>True</code> if this IP is IPv4-mapped IPv6 address,
- <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="info"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">info</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.info">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A record dict containing IANA registration details for this IP
- address if available, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>common string representation for this IP address</dd>
- <dt>Overrides:
- object.__str__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IP.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
-<a name="section-ClassVariableDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variable Details</span></td>
-</tr>
-</table>
-<a name="STRATEGIES"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">STRATEGIES</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">,</code>
- IPv6Strategy(128, 16, ':', 6, 16, False)<code class="variable-group">)</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="TRANSLATE_STR"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">TRANSLATE_STR</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'''</code><code class="variable-string">\x00\x01\x02\x03\x04\x05\x06\x07\x08\t</code>
-<code class="variable-string">\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">\x1d\x1e\x1f !&quot;#$%&amp;\'()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWX</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">YZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x8</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">6\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xc</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-ellipsis">...</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.IPRange-class.html b/docs/api/netaddr.address.IPRange-class.html
deleted file mode 100644
index d882b46..0000000
--- a/docs/api/netaddr.address.IPRange-class.html
+++ /dev/null
@@ -1,1415 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.IPRange</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;IPRange
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.IPRange-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPRange</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">IPRange</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.address.CIDR-class.html">CIDR</a></li><li>, <a href="netaddr.address.Wildcard-class.html">Wildcard</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses
- using only a lower and upper bound IP address.</p>
- <p>It is the base class for more specialised block types such as <a
- href="netaddr.address.CIDR-class.html" class="link">CIDR()</a> and <a
- href="netaddr.address.Wildcard-class.html" class="link">Wildcard()</a>.
- There is no requirement that the boundary IP addresses fall on strict
- bitmask boundaries.</p>
- <p>The sort order for sequence of mixed version <a
- href="netaddr.address.IPRange-class.html" class="link">IPRange</a>
- objects is IPv4 followed by IPv6, based on the range's magnitude
- (size).</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">first</span>,
- <span class="summary-sig-arg">last</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">&lt;class 'netaddr.address.IP'&gt;</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__hash__" class="summary-sig-name">__hash__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The hash of this address range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__hash__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__len__" class="summary-sig-name">__len__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The total number of network addresses in this range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__len__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#size" class="summary-sig-name">size</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- The total number of network addresses in this range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.size">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#format" class="summary-sig-name">format</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_addr</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- Returns:
- a network address in the format returned after passing it through
- this object's fmt property callable.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.format">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__getitem__" class="summary-sig-name">__getitem__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>)</span><br />
- Returns:
- The IP address(es) in this address range referenced by index/slice.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__getitem__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__iter__" class="summary-sig-name">__iter__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- An iterator object providing access to all network addresses within
- this range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__iter__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__contains__" class="summary-sig-name">__contains__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- <code>True</code> if given address or range falls within this range,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__contains__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__eq__" class="summary-sig-name">__eq__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are the same as
- other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__eq__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__ne__" class="summary-sig-name">__ne__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are not the same as
- other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__ne__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__lt__" class="summary-sig-name">__lt__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are less than
- other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__lt__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__le__" class="summary-sig-name">__le__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are less or equal
- to other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__le__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__gt__" class="summary-sig-name">__gt__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are greater than
- other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__gt__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__ge__" class="summary-sig-name">__ge__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- <code>True</code> if the boundaries of this range are greater or
- equal to other, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__ge__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__iadd__" class="summary-sig-name">__iadd__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">i</span>)</span><br />
- Increments start and end addresses of this range by the current size.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__iadd__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__isub__" class="summary-sig-name">__isub__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">i</span>)</span><br />
- Decrements start and end addresses of this range by the current size.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__isub__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#iprange" class="summary-sig-name">iprange</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A valid <a href="netaddr.address.IPRange-class.html"
- class="link">IPRange</a> object for this address range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.iprange">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#cidrs" class="summary-sig-name">cidrs</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A list of one or more <a href="netaddr.address.CIDR-class.html"
- class="link">CIDR</a> objects covering this address range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.cidrs">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#wildcard" class="summary-sig-name">wildcard</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- A <a href="netaddr.address.Wildcard-class.html"
- class="link">Wildcard</a> object equivalent to this CIDR.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.wildcard">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#issubnet" class="summary-sig-name">issubnet</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- True if other's boundary is equal to or within this range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.issubnet">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#issupernet" class="summary-sig-name">issupernet</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- True if other's boundary is equal to or contains this range.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.issupernet">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#adjacent" class="summary-sig-name">adjacent</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- True if other's boundary touches the boundary of this address range,
- False otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.adjacent">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#overlaps" class="summary-sig-name">overlaps</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- True if other's boundary crosses the boundary of this address range,
- False otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.overlaps">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- str(x)</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRange-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.address.IPRange-class.html#STRATEGIES" class="summary-name">STRATEGIES</a> = <code title="(IPv4StrategyOpt(32, 8, '.', 4, 10, False),
- IPv6Strategy(128, 16, ':', 6, 16, False))"><code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">, </code>IPv6S<code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="(0, 4, 6)"><code class="variable-group">(</code>0<code class="variable-op">, </code>4<code class="variable-op">, </code>6<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="first"></a><span class="summary-name">first</span> = <code title="AddrValueDescriptor('first')">AddrValueDescriptor('first')</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="last"></a><span class="summary-name">last</span> = <code title="AddrValueDescriptor('last')">AddrValueDescriptor('last')</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="fmt"></a><span class="summary-name">fmt</span> = <code title="FormatDescriptor(IP)">FormatDescriptor(IP)</code>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">first</span>,
- <span class="sig-arg">last</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">&lt;class 'netaddr.address.IP'&gt;</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>first</code></strong> - start address for this IP address range.</li>
- <li><strong class="pname"><code>last</code></strong> - stop address for this IP address range.</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used to create return values. Default: <a
- href="netaddr.address.IP-class.html" class="link">IP()</a>
- objects. See <a href="netaddr.address-module.html#nrange"
- class="link">nrange()</a> documentations for more details on the
- various options.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__hash__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__hash__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Hashing function)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__hash__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>hash(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The hash of this address range. Allow them to be used in sets and
- as keys in dictionaries.</dd>
- <dt>Overrides:
- object.__hash__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__len__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__len__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Length operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__len__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The total number of network addresses in this range.
- <ul>
- <li>
- Use this method only for ranges that contain less than
- <code>2^31</code> addresses or try the <a
- href="netaddr.address.IPRange-class.html#size"
- class="link">size()</a> method. Raises an
- <code>IndexError</code> if size is exceeded.
- </li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="size"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">size</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.size">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The total number of network addresses in this range.
- <ul>
- <li>
- Use this method in preference to <a
- href="netaddr.address.IPRange-class.html#__len__"
- class="link">__len__()</a> when size of ranges potentially
- exceeds <code>2^31</code> addresses.
- </li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="format"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">format</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_addr</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.format">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_addr</code></strong> - a network address integer (network byte order).</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) a callable used on return values. Default: None. If
- set to None, this method uses the self.fmt setting instead. The
- argument is provided as an override option.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>a network address in the format returned after passing it through
- this object's fmt property callable.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__getitem__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__getitem__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">index</span>)</span>
- <br /><em class="fname">(Indexing operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__getitem__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>The IP address(es) in this address range referenced by
- index/slice. Slicing objects can produce large sequences so
- generator objects are returned instead of a list. Wrapping a
- slice with <code>list()</code> or <code>tuple()</code> may be
- required dependent on context in which it is called.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__iter__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__iter__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__iter__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>An iterator object providing access to all network addresses
- within this range.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__contains__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- <br /><em class="fname">(In operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__contains__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - and IP/IPRange class/subclass instance or IP string value to be
- compared.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if given address or range falls within this
- range, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__eq__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__eq__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Equality operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__eq__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are the same as
- other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__ne__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__ne__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__ne__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are not the
- same as other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__lt__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__lt__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Less-than operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__lt__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are less than
- other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__le__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__le__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Less-than-or-equals operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__le__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are less or
- equal to other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__gt__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__gt__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Greater-than operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__gt__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are greater
- than other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__ge__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__ge__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(Greater-than-or-equals operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__ge__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - an address object of the same address type as <code>self</code>.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if the boundaries of this range are greater or
- equal to other, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__iadd__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__iadd__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">i</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__iadd__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Increments start and end addresses of this range by the current
- size.</p>
- <p>Raises IndexError if the result exceeds address range maximum.</p>
- <dl class="fields">
- </dl>
-</td></tr></table>
-</div>
-<a name="__isub__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__isub__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">i</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__isub__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Decrements start and end addresses of this range by the current
- size.</p>
- <p>Raises IndexError if the result is less than zero.</p>
- <dl class="fields">
- </dl>
-</td></tr></table>
-</div>
-<a name="iprange"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">iprange</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.iprange">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A valid <a href="netaddr.address.IPRange-class.html"
- class="link">IPRange</a> object for this address range.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="cidrs"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">cidrs</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.cidrs">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A list of one or more <a href="netaddr.address.CIDR-class.html"
- class="link">CIDR</a> objects covering this address range.
- <b>Please Note:</b> a list is returned even if this range maps to
- a single CIDR because arbitrary ranges may not be aligned with
- base 2 subnet sizes and will therefore return multiple CIDRs.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="wildcard"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">wildcard</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.wildcard">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>A <a href="netaddr.address.Wildcard-class.html"
- class="link">Wildcard</a> object equivalent to this CIDR.
- <ul>
- <li>
- If CIDR was initialised with <code>fmt=str</code>, a wildcard
- string is returned, in all other cases a <a
- href="netaddr.address.Wildcard-class.html"
- class="link">Wildcard</a> object is returned.
- </li>
- <li>
- Only supports IPv4 CIDR addresses.
- </li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="issubnet"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">issubnet</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.issubnet">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if other's boundary is equal to or within this range. False
- otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="issupernet"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">issupernet</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.issupernet">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if other's boundary is equal to or contains this range.
- False otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="adjacent"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">adjacent</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.adjacent">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if other's boundary touches the boundary of this address
- range, False otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="overlaps"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">overlaps</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.overlaps">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if other's boundary crosses the boundary of this address
- range, False otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Overrides:
- object.__str__
- <dd><em class="note">(inherited documentation)</em></dd>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRange.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
-<a name="section-ClassVariableDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variable Details</span></td>
-</tr>
-</table>
-<a name="STRATEGIES"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">STRATEGIES</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-op">,</code>
- IPv6Strategy(128, 16, ':', 6, 16, False)<code class="variable-group">)</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.IPRangeSet-class.html b/docs/api/netaddr.address.IPRangeSet-class.html
deleted file mode 100644
index 3f40cc2..0000000
--- a/docs/api/netaddr.address.IPRangeSet-class.html
+++ /dev/null
@@ -1,500 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.IPRangeSet</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;IPRangeSet
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.IPRangeSet-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPRangeSet</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- set --+
- |
- <strong class="uidshort">IPRangeSet</strong>
-</pre>
-
-<hr />
-<p><b>*EXPERIMENTAL*</b> A customised Python set class that deals with
- collections of IPRange class and subclass instances.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addrs</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#__contains__" class="summary-sig-name">__contains__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- True if <code>other</code> IP or IPRange class/subclass instance
- matches any of the members in this IPRangeSet, False otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.__contains__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#any_match" class="summary-sig-name">any_match</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- The first IP or IPRange class/subclass instance object that matches
- <code>other</code> from any of the members in this IPRangeSet, None
- otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.any_match">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#all_matches" class="summary-sig-name">all_matches</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- All IP or IPRange class/subclass instances matching
- <code>other</code> from this IPRangeSet, an empty list otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.all_matches">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#min_match" class="summary-sig-name">min_match</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- The smallest IP or IPRange class/subclass instance matching
- <code>other</code> from this IPRangeSet, None otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.min_match">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.IPRangeSet-class.html#max_match" class="summary-sig-name">max_match</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">other</span>)</span><br />
- Returns:
- The largest IP or IPRange class/subclass instance matching
- <code>other</code> from this IPRangeSet, None otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.max_match">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>set</code></b>:
- <code>__and__</code>,
- <code>__cmp__</code>,
- <code>__eq__</code>,
- <code>__ge__</code>,
- <code>__getattribute__</code>,
- <code>__gt__</code>,
- <code>__hash__</code>,
- <code>__iand__</code>,
- <code>__ior__</code>,
- <code>__isub__</code>,
- <code>__iter__</code>,
- <code>__ixor__</code>,
- <code>__le__</code>,
- <code>__len__</code>,
- <code>__lt__</code>,
- <code>__ne__</code>,
- <code>__new__</code>,
- <code>__or__</code>,
- <code>__rand__</code>,
- <code>__reduce__</code>,
- <code>__repr__</code>,
- <code>__ror__</code>,
- <code>__rsub__</code>,
- <code>__rxor__</code>,
- <code>__sub__</code>,
- <code>__xor__</code>,
- <code>add</code>,
- <code>clear</code>,
- <code>copy</code>,
- <code>difference</code>,
- <code>difference_update</code>,
- <code>discard</code>,
- <code>intersection</code>,
- <code>intersection_update</code>,
- <code>issubset</code>,
- <code>issuperset</code>,
- <code>pop</code>,
- <code>remove</code>,
- <code>symmetric_difference</code>,
- <code>symmetric_difference_update</code>,
- <code>union</code>,
- <code>update</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addrs</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addrs</code></strong> - A sequence of IPRange class/subclass instances used to
- pre-populate the set. Individual CIDR objects can be added and
- removed after instantiation with the usual set methods, add() and
- remove().</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__contains__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__contains__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- <br /><em class="fname">(In operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.__contains__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>y in x.</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>True if <code>other</code> IP or IPRange class/subclass instance
- matches any of the members in this IPRangeSet, False otherwise.</dd>
- <dt>Overrides:
- set.__contains__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="any_match"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">any_match</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.any_match">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - An IP or IPRange class/subclass instance.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The first IP or IPRange class/subclass instance object that
- matches <code>other</code> from any of the members in this
- IPRangeSet, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="all_matches"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">all_matches</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.all_matches">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - An IP or IPRange class/subclass instance.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>All IP or IPRange class/subclass instances matching
- <code>other</code> from this IPRangeSet, an empty list otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="min_match"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">min_match</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.min_match">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - An IP or IPRange class/subclass instance.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The smallest IP or IPRange class/subclass instance matching
- <code>other</code> from this IPRangeSet, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="max_match"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">max_match</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">other</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#IPRangeSet.max_match">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>other</code></strong> - An IP or IPRange class/subclass instance.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The largest IP or IPRange class/subclass instance matching
- <code>other</code> from this IPRangeSet, None otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.PrefixLenDescriptor-class.html b/docs/api/netaddr.address.PrefixLenDescriptor-class.html
deleted file mode 100644
index 192647e..0000000
--- a/docs/api/netaddr.address.PrefixLenDescriptor-class.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.PrefixLenDescriptor</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;PrefixLenDescriptor
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.PrefixLenDescriptor-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PrefixLenDescriptor</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#PrefixLenDescriptor">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">PrefixLenDescriptor</strong>
-</pre>
-
-<hr />
-<p>A descriptor that checks prefixlen property assignments for validity
- based on address type. Also accepts netmasks and hostmasks which can
- easily be converted to the equivalent prefixlen integer.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.PrefixLenDescriptor-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">class_id</span>=<span class="summary-sig-default">None</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#PrefixLenDescriptor.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__set__"></a><span class="summary-sig-name">__set__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">instance</span>,
- <span class="summary-sig-arg">value</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#PrefixLenDescriptor.__set__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">class_id</span>=<span class="sig-default">None</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#PrefixLenDescriptor.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>class_id</code></strong> - (optional) the name of the class that uses this descriptor.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.StrategyDescriptor-class.html b/docs/api/netaddr.address.StrategyDescriptor-class.html
deleted file mode 100644
index 72b7c33..0000000
--- a/docs/api/netaddr.address.StrategyDescriptor-class.html
+++ /dev/null
@@ -1,238 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.StrategyDescriptor</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;StrategyDescriptor
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.StrategyDescriptor-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class StrategyDescriptor</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#StrategyDescriptor">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">StrategyDescriptor</strong>
-</pre>
-
-<hr />
-<p>A descriptor that checks strategy property assignments for validity
- and also keeps the addr_type property in sync with any changes made.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.StrategyDescriptor-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">strategies</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#StrategyDescriptor.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="__set__"></a><span class="summary-sig-name">__set__</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">instance</span>,
- <span class="summary-sig-arg">value</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#StrategyDescriptor.__set__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">strategies</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#StrategyDescriptor.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>strategies</code></strong> - a list of strategy objects that are acceptable for assignment to
- the strategy property.</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.address.Wildcard-class.html b/docs/api/netaddr.address.Wildcard-class.html
deleted file mode 100755
index cf00d7a..0000000
--- a/docs/api/netaddr.address.Wildcard-class.html
+++ /dev/null
@@ -1,486 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.address.Wildcard</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.address-module.html" onclick="show_private();">Module&nbsp;address</a> ::
- Class&nbsp;Wildcard
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.address.Wildcard-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Wildcard</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <a href="netaddr.address.IPRange-class.html">IPRange</a> --+
- |
- <strong class="uidshort">Wildcard</strong>
-</pre>
-
-<hr />
-<p>Represents blocks of IPv4 addresses using a wildcard or glob style
- syntax.</p>
- <p>Individual octets can be represented using the following shortcuts
- :</p>
- <ol start="1">
- <li>
- <code>*</code> - the asterisk octet (represents values 0 through 255)
- </li>
- <li>
- <code>'x-y'</code> - the hyphenated octet (represents values x
- through y)
- </li>
- </ol>
- <p>A few basic rules also apply :</p>
- <ol start="1">
- <li>
- x must always be greater than y, therefore :
- <ul>
- <li>
- x can only be 0 through 254
- </li>
- <li>
- y can only be 1 through 255
- </li>
- </ul>
- </li>
- <li>
- only one hyphenated octet per wildcard is allowed
- </li>
- <li>
- only asterisks are permitted after a hyphenated octet
- </li>
- </ol>
- <p>Example wildcards :</p>
-<pre class="literalblock">
- '192.168.0.1' # a single address
- '192.168.0.0-31' # 32 addresses
- '192.168.0.*' # 256 addresses
- '192.168.0-1.*' # 512 addresses
- '192.168-169.*.*' # 131,072 addresses
- '*.*.*.*' # the whole IPv4 address space
-</pre>
- <h1 class="heading">Aside</h1>
- <p><i>Wildcard ranges are not directly equivalent to CIDR blocks as
- they can represent address ranges that do not fall on strict bit mask
- boundaries. They are very suitable in configuration files being more
- obvious and readable than their CIDR equivalents, especially for admins
- and users without much networking knowledge or experience.</i></p>
- <p><i>All CIDR blocks can always be represented as wildcard ranges but
- the reverse is not true. Wildcards are almost but not quite as flexible
- as IPRange objects.</i></p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Wildcard-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">wildcard</span>,
- <span class="summary-sig-arg">fmt</span>=<span class="summary-sig-default">&lt;class 'netaddr.address.IP'&gt;</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Wildcard-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- str(x)</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Wildcard-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.IPRange-class.html">IPRange</a></code></b>:
- <code><a href="netaddr.address.IPRange-class.html#__contains__">__contains__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__eq__">__eq__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__ge__">__ge__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__getitem__">__getitem__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__gt__">__gt__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__hash__">__hash__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__iadd__">__iadd__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__isub__">__isub__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__iter__">__iter__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__le__">__le__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__len__">__len__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__lt__">__lt__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#__ne__">__ne__</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#adjacent">adjacent</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#cidrs">cidrs</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#format">format</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#iprange">iprange</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#issubnet">issubnet</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#issupernet">issupernet</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#overlaps">overlaps</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#size">size</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#wildcard">wildcard</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== STATIC METHODS ==================== -->
-<a name="section-StaticMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Static Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.address.Wildcard-class.html#is_valid" class="summary-sig-name">is_valid</a>(<span class="summary-sig-arg">wildcard</span>)</span><br />
- A static method that validates wildcard address ranges.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.is_valid">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="STRATEGIES"></a><span class="summary-name">STRATEGIES</span> = <code title="(IPv4StrategyOpt(32, 8, '.', 4, 10, False))"><code class="variable-group">(</code>IPv4StrategyOpt(32, 8, '.', 4, 10, False)<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ADDR_TYPES"></a><span class="summary-name">ADDR_TYPES</span> = <code title="(0, 4)"><code class="variable-group">(</code>0<code class="variable-op">, </code>4<code class="variable-group">)</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="strategy"></a><span class="summary-name">strategy</span> = <code title="StrategyDescriptor(STRATEGIES)">StrategyDescriptor(STRATEGIES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="addr_type"></a><span class="summary-name">addr_type</span> = <code title="AddrTypeDescriptor(ADDR_TYPES)">AddrTypeDescriptor(ADDR_TYPES)</code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="fmt"></a><span class="summary-name">fmt</span> = <code title="FormatDescriptor(IP)">FormatDescriptor(IP)</code>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.address.IPRange-class.html">IPRange</a></code></b>:
- <code><a href="netaddr.address.IPRange-class.html#first">first</a></code>,
- <code><a href="netaddr.address.IPRange-class.html#last">last</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="is_valid"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">is_valid</span>(<span class="sig-arg">wildcard</span>)</span>
- <br /><em class="fname">Static Method</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.is_valid">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>A static method that validates wildcard address ranges.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>wildcard</code></strong> - an IPv4 wildcard address.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>True if wildcard address is valid, False otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">wildcard</span>,
- <span class="sig-arg">fmt</span>=<span class="sig-default">&lt;class 'netaddr.address.IP'&gt;</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>wildcard</code></strong> - a valid IPv4 wildcard address</li>
- <li><strong class="pname"><code>fmt</code></strong> - (optional) callable used on return values. Default: <a
- href="netaddr.address.IP-class.html" class="link">IP</a> objects.
- See <a href="netaddr.address-module.html#nrange"
- class="link">nrange()</a> documentations for more details on the
- various options..</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Overrides:
- object.__str__
- <dd><em class="note">(inherited documentation)</em></dd>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.address-pysrc.html#Wildcard.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.core-module.html b/docs/api/netaddr.core-module.html
deleted file mode 100644
index 45396ae..0000000
--- a/docs/api/netaddr.core-module.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.core</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;core
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.core-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module core</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.core-pysrc.html">source&nbsp;code</a></span></p>
-<p>Classes and routines that are common to various netaddr sub
- modules.</p>
-
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.core.Subscriber-class.html" class="summary-name">Subscriber</a><br />
- Abstract class defining interface expected by a Publisher that
- concrete subclass instances register with to receive updates from.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.core.PrettyPrinter-class.html" class="summary-name">PrettyPrinter</a><br />
- Concrete Subscriber that uses the pprint module to format all data
- from updates received writing them to any file-like object.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.core.Publisher-class.html" class="summary-name">Publisher</a><br />
- A 'push' publisher that maintains a list of Subscriber objects
- notifying them of state changes when its subclasses encounter
- events of interest.
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.core-pysrc.html b/docs/api/netaddr.core-pysrc.html
deleted file mode 100644
index fb2c042..0000000
--- a/docs/api/netaddr.core-pysrc.html
+++ /dev/null
@@ -1,203 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.core</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;core
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.core-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.core-module.html" onclick="show_private();">Module netaddr.core</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python </tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved. </tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># </tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details. </tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">""" </tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Classes and routines that are common to various netaddr sub modules. </tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_sys</tt> </tt>
-<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">pprint</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_pprint</tt> </tt>
-<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> </tt>
-<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="Subscriber"></a><div id="Subscriber-def"><a name="L14"></a><tt class="py-lineno">14</tt> <a class="py-toggle" href="#" id="Subscriber-toggle" onclick="return toggle('Subscriber');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.core.Subscriber-class.html">Subscriber</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Subscriber-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="Subscriber-expanded"><a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L16"></a><tt class="py-lineno">16</tt> <tt class="py-line"><tt class="py-docstring"> Abstract class defining interface expected by a Publisher that concrete </tt> </tt>
-<a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"><tt class="py-docstring"> subclass instances register with to receive updates from. </tt> </tt>
-<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="Subscriber.update"></a><div id="Subscriber.update-def"><a name="L19"></a><tt class="py-lineno">19</tt> <a class="py-toggle" href="#" id="Subscriber.update-toggle" onclick="return toggle('Subscriber.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.Subscriber-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Subscriber.update-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="Subscriber.update-expanded"><a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"><tt class="py-docstring"> Callback function used by Publisher to notify this Subscriber about </tt> </tt>
-<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"><tt class="py-docstring"> an update. </tt> </tt>
-<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">NotImplementedError</tt><tt class="py-op">(</tt><tt class="py-string">'cannot invoke virtual method!'</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> </tt>
-<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="PrettyPrinter"></a><div id="PrettyPrinter-def"><a name="L27"></a><tt class="py-lineno">27</tt> <a class="py-toggle" href="#" id="PrettyPrinter-toggle" onclick="return toggle('PrettyPrinter');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.core.PrettyPrinter-class.html">PrettyPrinter</a><tt class="py-op">(</tt><tt class="py-base-class">Subscriber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrettyPrinter-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="PrettyPrinter-expanded"><a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"><tt class="py-docstring"> Concrete Subscriber that uses the pprint module to format all data from </tt> </tt>
-<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-docstring"> updates received writing them to any file-like object. Useful for </tt> </tt>
-<a name="L31"></a><tt class="py-lineno">31</tt> <tt class="py-line"><tt class="py-docstring"> debugging. </tt> </tt>
-<a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="PrettyPrinter.__init__"></a><div id="PrettyPrinter.__init__-def"><a name="L33"></a><tt class="py-lineno">33</tt> <a class="py-toggle" href="#" id="PrettyPrinter.__init__-toggle" onclick="return toggle('PrettyPrinter.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.PrettyPrinter-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fh</tt><tt class="py-op">=</tt><tt class="py-name">_sys</tt><tt class="py-op">.</tt><tt class="py-name">stdout</tt><tt class="py-op">,</tt> <tt class="py-param">write_eol</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrettyPrinter.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PrettyPrinter.__init__-expanded"><a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-docstring"> Constructor. </tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"><tt class="py-docstring"> fh - file or file like object to write to. Default: sys.stdout. </tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">fh</tt> </tt>
-<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_eol</tt> <tt class="py-op">=</tt> <tt class="py-name">write_eol</tt> </tt>
-</div><a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> </tt>
-<a name="PrettyPrinter.update"></a><div id="PrettyPrinter.update-def"><a name="L42"></a><tt class="py-lineno">42</tt> <a class="py-toggle" href="#" id="PrettyPrinter.update-toggle" onclick="return toggle('PrettyPrinter.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.PrettyPrinter-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="PrettyPrinter.update-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="PrettyPrinter.update-expanded"><a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"><tt class="py-docstring"> Callback function used by Publisher to notify this Subscriber about </tt> </tt>
-<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"><tt class="py-docstring"> an update. </tt> </tt>
-<a name="L46"></a><tt class="py-lineno">46</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-name">_pprint</tt><tt class="py-op">.</tt><tt class="py-name">pformat</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">write_eol</tt><tt class="py-op">:</tt> </tt>
-<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">write</tt><tt class="py-op">(</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"> </tt>
-<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="Publisher"></a><div id="Publisher-def"><a name="L52"></a><tt class="py-lineno">52</tt> <a class="py-toggle" href="#" id="Publisher-toggle" onclick="return toggle('Publisher');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.core.Publisher-class.html">Publisher</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Publisher-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="Publisher-expanded"><a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"><tt class="py-docstring"> A 'push' publisher that maintains a list of Subscriber objects notifying </tt> </tt>
-<a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"><tt class="py-docstring"> them of state changes when its subclasses encounter events of interest. </tt> </tt>
-<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="Publisher.__init__"></a><div id="Publisher.__init__-def"><a name="L57"></a><tt class="py-lineno">57</tt> <a class="py-toggle" href="#" id="Publisher.__init__-toggle" onclick="return toggle('Publisher.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.Publisher-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Publisher.__init__-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="Publisher.__init__-expanded"><a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor"""</tt> </tt>
-<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">subscribers</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"> </tt>
-<a name="Publisher.attach"></a><div id="Publisher.attach-def"><a name="L61"></a><tt class="py-lineno">61</tt> <a class="py-toggle" href="#" id="Publisher.attach-toggle" onclick="return toggle('Publisher.attach');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.Publisher-class.html#attach">attach</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">subscriber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Publisher.attach-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="Publisher.attach-expanded"><a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt class="py-docstring">"""Add a new subscriber"""</tt> </tt>
-<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">subscriber</tt><tt class="py-op">,</tt> <tt class="py-string">'update'</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> \ </tt>
-<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt class="py-name">callable</tt><tt class="py-op">(</tt><tt class="py-name">eval</tt><tt class="py-op">(</tt><tt class="py-string">'subscriber.update'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">subscriber</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">subscribers</tt><tt class="py-op">:</tt> </tt>
-<a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">subscribers</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">subscriber</tt><tt class="py-op">)</tt> </tt>
-<a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r does not support required interface!'</tt> \ </tt>
-<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">subscriber</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"> </tt>
-<a name="Publisher.detach"></a><div id="Publisher.detach-def"><a name="L71"></a><tt class="py-lineno">71</tt> <a class="py-toggle" href="#" id="Publisher.detach-toggle" onclick="return toggle('Publisher.detach');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.Publisher-class.html#detach">detach</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">subscriber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Publisher.detach-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="Publisher.detach-expanded"><a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt class="py-docstring">"""Remove an existing subscriber"""</tt> </tt>
-<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">subscribers</tt><tt class="py-op">.</tt><tt class="py-name">remove</tt><tt class="py-op">(</tt><tt class="py-name">subscriber</tt><tt class="py-op">)</tt> </tt>
-<a name="L75"></a><tt class="py-lineno">75</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L76"></a><tt class="py-lineno">76</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L77"></a><tt class="py-lineno">77</tt> <tt class="py-line"> </tt>
-<a name="Publisher.notify"></a><div id="Publisher.notify-def"><a name="L78"></a><tt class="py-lineno">78</tt> <a class="py-toggle" href="#" id="Publisher.notify-toggle" onclick="return toggle('Publisher.notify');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.core.Publisher-class.html#notify">notify</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="Publisher.notify-collapsed" style="display:none;" pad="++" indent="++++++++"></div><div id="Publisher.notify-expanded"><a name="L79"></a><tt class="py-lineno">79</tt> <tt class="py-line"> <tt class="py-docstring">"""Send notification message to all registered subscribers"""</tt> </tt>
-<a name="L80"></a><tt class="py-lineno">80</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">subscriber</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">subscribers</tt><tt class="py-op">:</tt> </tt>
-<a name="L81"></a><tt class="py-lineno">81</tt> <tt class="py-line"> <tt class="py-name">subscriber</tt><tt class="py-op">.</tt><tt id="link-0" class="py-name" targets="Method netaddr.core.PrettyPrinter.update()=netaddr.core.PrettyPrinter-class.html#update,Method netaddr.core.Subscriber.update()=netaddr.core.Subscriber-class.html#update,Method netaddr.eui.FileIndexer.update()=netaddr.eui.FileIndexer-class.html#update,Method netaddr.ip.DictUpdater.update()=netaddr.ip.DictUpdater-class.html#update"><a title="netaddr.core.PrettyPrinter.update
-netaddr.core.Subscriber.update
-netaddr.eui.FileIndexer.update
-netaddr.ip.DictUpdater.update" class="py-name" href="#" onclick="return doclink('link-0', 'update', 'link-0');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L82"></a><tt class="py-lineno">82</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.core.PrettyPrinter-class.html b/docs/api/netaddr.core.PrettyPrinter-class.html
deleted file mode 100644
index 0cf6154..0000000
--- a/docs/api/netaddr.core.PrettyPrinter-class.html
+++ /dev/null
@@ -1,264 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.core.PrettyPrinter</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.core-module.html" onclick="show_private();">Module&nbsp;core</a> ::
- Class&nbsp;PrettyPrinter
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.core.PrettyPrinter-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PrettyPrinter</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.core-pysrc.html#PrettyPrinter">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
-<a href="netaddr.core.Subscriber-class.html">Subscriber</a> --+
- |
- <strong class="uidshort">PrettyPrinter</strong>
-</pre>
-
-<hr />
-<p>Concrete Subscriber that uses the pprint module to format all data
- from updates received writing them to any file-like object. Useful for
- debugging.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.core.PrettyPrinter-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fh</span>=<span class="summary-sig-default">_sys.stdout</span>,
- <span class="summary-sig-arg">write_eol</span>=<span class="summary-sig-default">True</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#PrettyPrinter.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.core.PrettyPrinter-class.html#update" class="summary-sig-name">update</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">data</span>)</span><br />
- Callback function used by Publisher to notify this Subscriber about
- an update.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#PrettyPrinter.update">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fh</span>=<span class="sig-default">_sys.stdout</span>,
- <span class="sig-arg">write_eol</span>=<span class="sig-default">True</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.core-pysrc.html#PrettyPrinter.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>fh - file or file like object to write to. Default: sys.stdout.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="update"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">update</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">data</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.core-pysrc.html#PrettyPrinter.update">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Callback function used by Publisher to notify this Subscriber about an
- update.</p>
- <dl class="fields">
- <dt>Overrides:
- <a href="netaddr.core.Subscriber-class.html#update">Subscriber.update</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.core.Publisher-class.html b/docs/api/netaddr.core.Publisher-class.html
deleted file mode 100644
index 7d43ed8..0000000
--- a/docs/api/netaddr.core.Publisher-class.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.core.Publisher</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.core-module.html" onclick="show_private();">Module&nbsp;core</a> ::
- Class&nbsp;Publisher
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.core.Publisher-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Publisher</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.core-pysrc.html#Publisher">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">Publisher</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.eui.IABIndexParser-class.html">eui.IABIndexParser</a></li><li>, <a href="netaddr.eui.OUIIndexParser-class.html">eui.OUIIndexParser</a></li><li>, <a href="netaddr.ip.LineRecordParser-class.html">ip.LineRecordParser</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>A 'push' publisher that maintains a list of Subscriber objects
- notifying them of state changes when its subclasses encounter events of
- interest.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.core.Publisher-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Constructor</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#Publisher.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="attach"></a><span class="summary-sig-name">attach</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">subscriber</span>)</span><br />
- Add a new subscriber</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#Publisher.attach">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="detach"></a><span class="summary-sig-name">detach</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">subscriber</span>)</span><br />
- Remove an existing subscriber</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#Publisher.detach">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="notify"></a><span class="summary-sig-name">notify</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">data</span>)</span><br />
- Send notification message to all registered subscribers</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#Publisher.notify">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.core-pysrc.html#Publisher.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.core.Subscriber-class.html b/docs/api/netaddr.core.Subscriber-class.html
deleted file mode 100644
index af21f77..0000000
--- a/docs/api/netaddr.core.Subscriber-class.html
+++ /dev/null
@@ -1,189 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.core.Subscriber</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.core-module.html" onclick="show_private();">Module&nbsp;core</a> ::
- Class&nbsp;Subscriber
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.core.Subscriber-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Subscriber</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.core-pysrc.html#Subscriber">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">Subscriber</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.core.PrettyPrinter-class.html">PrettyPrinter</a></li><li>, <a href="netaddr.eui.FileIndexer-class.html">eui.FileIndexer</a></li><li>, <a href="netaddr.ip.DictUpdater-class.html">ip.DictUpdater</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>Abstract class defining interface expected by a Publisher that
- concrete subclass instances register with to receive updates from.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="update"></a><span class="summary-sig-name">update</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">data</span>)</span><br />
- Callback function used by Publisher to notify this Subscriber about
- an update.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.core-pysrc.html#Subscriber.update">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__init__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui-module.html b/docs/api/netaddr.eui-module.html
deleted file mode 100644
index 6c4f0b4..0000000
--- a/docs/api/netaddr.eui-module.html
+++ /dev/null
@@ -1,437 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Package&nbsp;eui
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== PACKAGE DESCRIPTION ==================== -->
-<h1 class="epydoc">Package eui</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html">source&nbsp;code</a></span></p>
-<p>Provides access to public network address information published by the
- IEEE.</p>
- <p>More details can be found at the following URLs :-</p>
- <p>Institute of Electrical and Electronics Engineers (IEEE)</p>
- <ul>
- <li>
- http://www.ieee.org/
- </li>
- <li>
- http://standards.ieee.org/regauth/oui/
- </li>
- </ul>
-
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.NotRegisteredError-class.html" class="summary-name">NotRegisteredError</a><br />
- An Exception indicating that an OUI or IAB was not found in the
- IEEE Registry.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.FileIndexer-class.html" class="summary-name">FileIndexer</a><br />
- Stores index data found by a parser in a CSV file
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.OUIIndexParser-class.html" class="summary-name">OUIIndexParser</a><br />
- A parser that processes OUI (Organisationally Unique Identifier)
- registration file data published by the IEEE.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.IABIndexParser-class.html" class="summary-name">IABIndexParser</a><br />
- A parser that processes IAB (Individual Address Block) registration
- file data published by the IEEE.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.OUI-class.html" class="summary-name">OUI</a><br />
- Represents an individual IEEE OUI (Organisationally Unique
- Identifier) identifier.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui.IAB-class.html" class="summary-name">IAB</a><br />
- Represents an individual IEEE IAB (Individual Address Block)
- identifier.
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Functions</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="create_ieee_indices"></a><span class="summary-sig-name">create_ieee_indices</span>()</span><br />
- Create indices for OUI and IAB file based lookups</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#create_ieee_indices">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="load_ieee_indices"></a><span class="summary-sig-name">load_ieee_indices</span>()</span><br />
- Load OUI and IAB indices into memory</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#load_ieee_indices">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES ==================== -->
-<a name="section-Variables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_OUI_REGISTRY" class="summary-name">IEEE_OUI_REGISTRY</a> = <code title="'/cygdrive/z/netaddr/trunk/netaddr/eui/oui.txt'"><code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/oui</code><code class="variable-ellipsis">...</code></code><br />
- Path to local copy of IEEE OUI Registry data file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_OUI_METADATA" class="summary-name">IEEE_OUI_METADATA</a> = <code title="'/cygdrive/z/netaddr/trunk/netaddr/eui/oui.idx'"><code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/oui</code><code class="variable-ellipsis">...</code></code><br />
- Path to netaddr OUI index file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_OUI_INDEX" class="summary-name">IEEE_OUI_INDEX</a> = <code title="{0: [(61, 154)],
- 1: [(215, 178)],
- 2: [(393, 178)],
- 3: [(571, 187)],
- 4: [(758, 179)],
- 5: [(937, 178)],
- 6: [(1115, 179)],
- 7: [(1294, 178)],
-..."><code class="variable-group">{</code>0<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>61<code class="variable-op">, </code>154<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">, </code>1<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>215<code class="variable-op">, </code>178<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">, </code>2<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>393<code class="variable-op">, </code>1<code class="variable-ellipsis">...</code></code><br />
- OUI index lookup dictionary.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_IAB_REGISTRY" class="summary-name">IEEE_IAB_REGISTRY</a> = <code title="'/cygdrive/z/netaddr/trunk/netaddr/eui/iab.txt'"><code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/iab</code><code class="variable-ellipsis">...</code></code><br />
- Path to local copy of IEEE IAB Registry data file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_IAB_METADATA" class="summary-name">IEEE_IAB_METADATA</a> = <code title="'/cygdrive/z/netaddr/trunk/netaddr/eui/iab.idx'"><code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/iab</code><code class="variable-ellipsis">...</code></code><br />
- Path to netaddr IAB index file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.eui-module.html#IEEE_IAB_INDEX" class="summary-name">IEEE_IAB_INDEX</a> = <code title="{84680704: [(68, 133)],
- 84680705: [(201, 140)],
- 84680706: [(341, 172)],
- 84680707: [(513, 139)],
- 84680708: [(652, 141)],
- 84680709: [(793, 144)],
- 84680710: [(937, 195)],
- 84680711: [(1132, 166)],
-..."><code class="variable-group">{</code>84680704<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>68<code class="variable-op">, </code>133<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">, </code>84680705<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>201<code class="variable-op">, </code>140<code class="variable-group">)</code><code class="variable-ellipsis">...</code></code><br />
- IAB index lookup dictionary.
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES DETAILS ==================== -->
-<a name="section-VariablesDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables Details</span></td>
-</tr>
-</table>
-<a name="IEEE_OUI_REGISTRY"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_OUI_REGISTRY</h3>
- <p>Path to local copy of IEEE OUI Registry data file.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/oui.txt</code><code class="variable-quote">'</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="IEEE_OUI_METADATA"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_OUI_METADATA</h3>
- <p>Path to netaddr OUI index file.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/oui.idx</code><code class="variable-quote">'</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="IEEE_OUI_INDEX"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_OUI_INDEX</h3>
- <p>OUI index lookup dictionary.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code>0<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>61<code class="variable-op">, </code>154<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 1<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>215<code class="variable-op">, </code>178<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 2<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>393<code class="variable-op">, </code>178<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 3<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>571<code class="variable-op">, </code>187<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 4<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>758<code class="variable-op">, </code>179<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 5<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>937<code class="variable-op">, </code>178<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 6<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>1115<code class="variable-op">, </code>179<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 7<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>1294<code class="variable-op">, </code>178<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
-<code class="variable-ellipsis">...</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="IEEE_IAB_REGISTRY"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_IAB_REGISTRY</h3>
- <p>Path to local copy of IEEE IAB Registry data file.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/iab.txt</code><code class="variable-quote">'</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="IEEE_IAB_METADATA"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_IAB_METADATA</h3>
- <p>Path to netaddr IAB index file.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'</code><code class="variable-string">/cygdrive/z/netaddr/trunk/netaddr/eui/iab.idx</code><code class="variable-quote">'</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="IEEE_IAB_INDEX"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IEEE_IAB_INDEX</h3>
- <p>IAB index lookup dictionary.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code>84680704<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>68<code class="variable-op">, </code>133<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680705<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>201<code class="variable-op">, </code>140<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680706<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>341<code class="variable-op">, </code>172<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680707<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>513<code class="variable-op">, </code>139<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680708<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>652<code class="variable-op">, </code>141<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680709<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>793<code class="variable-op">, </code>144<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680710<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>937<code class="variable-op">, </code>195<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
- 84680711<code class="variable-op">: </code><code class="variable-group">[</code><code class="variable-group">(</code>1132<code class="variable-op">, </code>166<code class="variable-group">)</code><code class="variable-group">]</code><code class="variable-op">,</code>
-<code class="variable-ellipsis">...</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:05 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui-pysrc.html b/docs/api/netaddr.eui-pysrc.html
deleted file mode 100644
index dc39835..0000000
--- a/docs/api/netaddr.eui-pysrc.html
+++ /dev/null
@@ -1,690 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Package&nbsp;eui
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.eui-module.html" onclick="show_private();">Package netaddr.eui</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved.</tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details.</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">"""</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Provides access to public network address information published by the IEEE.</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-docstring">More details can be found at the following URLs :-</tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-docstring">Institute of Electrical and Electronics Engineers (IEEE)</tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-docstring"> - http://www.ieee.org/</tt> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-docstring"> - http://standards.ieee.org/regauth/oui/</tt> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">sys</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_sys</tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_os</tt> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_path</tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">csv</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_csv</tt> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">pprint</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_pprint</tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-0', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module netaddr.core=netaddr.core-module.html"><a title="netaddr.core" class="py-name" href="#" onclick="return doclink('link-1', 'core', 'link-1');">core</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Class netaddr.core.Subscriber=netaddr.core.Subscriber-class.html"><a title="netaddr.core.Subscriber" class="py-name" href="#" onclick="return doclink('link-2', 'Subscriber', 'link-2');">Subscriber</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Class netaddr.core.Publisher=netaddr.core.Publisher-class.html"><a title="netaddr.core.Publisher" class="py-name" href="#" onclick="return doclink('link-3', 'Publisher', 'link-3');">Publisher</a></tt> </tt>
-<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"> </tt>
-<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Constants.</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"><tt class="py-comment">#: Path to local copy of IEEE OUI Registry data file.</tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-4" class="py-name" targets="Variable netaddr.eui.IEEE_OUI_REGISTRY=netaddr.eui-module.html#IEEE_OUI_REGISTRY"><a title="netaddr.eui.IEEE_OUI_REGISTRY" class="py-name" href="#" onclick="return doclink('link-4', 'IEEE_OUI_REGISTRY', 'link-4');">IEEE_OUI_REGISTRY</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">dirname</tt><tt class="py-op">(</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'oui.txt'</tt><tt class="py-op">)</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-comment">#: Path to netaddr OUI index file.</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-5" class="py-name" targets="Variable netaddr.eui.IEEE_OUI_METADATA=netaddr.eui-module.html#IEEE_OUI_METADATA"><a title="netaddr.eui.IEEE_OUI_METADATA" class="py-name" href="#" onclick="return doclink('link-5', 'IEEE_OUI_METADATA', 'link-5');">IEEE_OUI_METADATA</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">dirname</tt><tt class="py-op">(</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'oui.idx'</tt><tt class="py-op">)</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"><tt class="py-comment">#: OUI index lookup dictionary.</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-6" class="py-name" targets="Variable netaddr.eui.IEEE_OUI_INDEX=netaddr.eui-module.html#IEEE_OUI_INDEX"><a title="netaddr.eui.IEEE_OUI_INDEX" class="py-name" href="#" onclick="return doclink('link-6', 'IEEE_OUI_INDEX', 'link-6');">IEEE_OUI_INDEX</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-comment">#: Path to local copy of IEEE IAB Registry data file.</tt> </tt>
-<a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-7" class="py-name" targets="Variable netaddr.eui.IEEE_IAB_REGISTRY=netaddr.eui-module.html#IEEE_IAB_REGISTRY"><a title="netaddr.eui.IEEE_IAB_REGISTRY" class="py-name" href="#" onclick="return doclink('link-7', 'IEEE_IAB_REGISTRY', 'link-7');">IEEE_IAB_REGISTRY</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">dirname</tt><tt class="py-op">(</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'iab.txt'</tt><tt class="py-op">)</tt> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-comment">#: Path to netaddr IAB index file.</tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-8" class="py-name" targets="Variable netaddr.eui.IEEE_IAB_METADATA=netaddr.eui-module.html#IEEE_IAB_METADATA"><a title="netaddr.eui.IEEE_IAB_METADATA" class="py-name" href="#" onclick="return doclink('link-8', 'IEEE_IAB_METADATA', 'link-8');">IEEE_IAB_METADATA</a></tt> <tt class="py-op">=</tt> <tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">dirname</tt><tt class="py-op">(</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-string">'iab.idx'</tt><tt class="py-op">)</tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-comment">#: IAB index lookup dictionary.</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-9" class="py-name" targets="Variable netaddr.eui.IEEE_IAB_INDEX=netaddr.eui-module.html#IEEE_IAB_INDEX"><a title="netaddr.eui.IEEE_IAB_INDEX" class="py-name" href="#" onclick="return doclink('link-9', 'IEEE_IAB_INDEX', 'link-9');">IEEE_IAB_INDEX</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> </tt>
-<a name="NotRegisteredError"></a><div id="NotRegisteredError-def"><a name="L48"></a><tt class="py-lineno"> 48</tt> <a class="py-toggle" href="#" id="NotRegisteredError-toggle" onclick="return toggle('NotRegisteredError');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.NotRegisteredError-class.html">NotRegisteredError</a><tt class="py-op">(</tt><tt class="py-base-class">Exception</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="NotRegisteredError-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="NotRegisteredError-expanded"><a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"><tt class="py-docstring"> An Exception indicating that an OUI or IAB was not found in the IEEE</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"><tt class="py-docstring"> Registry.</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-</div><a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="FileIndexer"></a><div id="FileIndexer-def"><a name="L56"></a><tt class="py-lineno"> 56</tt> <a class="py-toggle" href="#" id="FileIndexer-toggle" onclick="return toggle('FileIndexer');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.FileIndexer-class.html">FileIndexer</a><tt class="py-op">(</tt><tt class="py-base-class">Subscriber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FileIndexer-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="FileIndexer-expanded"><a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-docstring">"""Stores index data found by a parser in a CSV file"""</tt> </tt>
-<a name="FileIndexer.__init__"></a><div id="FileIndexer.__init__-def"><a name="L58"></a><tt class="py-lineno"> 58</tt> <a class="py-toggle" href="#" id="FileIndexer.__init__-toggle" onclick="return toggle('FileIndexer.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.FileIndexer-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FileIndexer.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="FileIndexer.__init__-expanded"><a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> filename - location of CSV index file.</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">'w'</tt><tt class="py-op">)</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">writer</tt> <tt class="py-op">=</tt> <tt class="py-name">_csv</tt><tt class="py-op">.</tt><tt class="py-name">writer</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">,</tt> <tt class="py-name">lineterminator</tt><tt class="py-op">=</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
-<a name="FileIndexer.update"></a><div id="FileIndexer.update-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="FileIndexer.update-toggle" onclick="return toggle('FileIndexer.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.FileIndexer-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="FileIndexer.update-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="FileIndexer.update-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> Write received record to a CSV file</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> @param data: record containing offset record information.</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">writer</tt><tt class="py-op">.</tt><tt class="py-name">writerow</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="OUIIndexParser"></a><div id="OUIIndexParser-def"><a name="L76"></a><tt class="py-lineno"> 76</tt> <a class="py-toggle" href="#" id="OUIIndexParser-toggle" onclick="return toggle('OUIIndexParser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.OUIIndexParser-class.html">OUIIndexParser</a><tt class="py-op">(</tt><tt class="py-base-class">Publisher</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUIIndexParser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OUIIndexParser-expanded"><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> A parser that processes OUI (Organisationally Unique Identifier)</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> registration file data published by the IEEE.</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> It sends out notifications to registered subscribers for each record it</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> encounters, passing on the record's position relative to file start</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"><tt class="py-docstring"> (offset) and the size of the record (in bytes).</tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"><tt class="py-docstring"> The file is available online here :-</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"><tt class="py-docstring"> http://standards.ieee.org/regauth/oui/oui.txt</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"><tt class="py-docstring"> Sample record::</tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-docstring"> 00-CA-FE (hex) ACME CORPORATION</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"><tt class="py-docstring"> 00CAFE (base 16) ACME CORPORATION</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"><tt class="py-docstring"> 1 MAIN STREET</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"><tt class="py-docstring"> SPRINGFIELD</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-docstring"> UNITED STATES</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="OUIIndexParser.__init__"></a><div id="OUIIndexParser.__init__-def"><a name="L97"></a><tt class="py-lineno"> 97</tt> <a class="py-toggle" href="#" id="OUIIndexParser.__init__-toggle" onclick="return toggle('OUIIndexParser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUIIndexParser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUIIndexParser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUIIndexParser.__init__-expanded"><a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"><tt class="py-docstring"> filename - location of file containing OUI records.</tt> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-10" class="py-name" targets="Class netaddr.eui.OUIIndexParser=netaddr.eui.OUIIndexParser-class.html"><a title="netaddr.eui.OUIIndexParser" class="py-name" href="#" onclick="return doclink('link-10', 'OUIIndexParser', 'link-10');">OUIIndexParser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-11" class="py-name" targets="Method netaddr.address.Addr.__init__()=netaddr.address.Addr-class.html#__init__,Method netaddr.address.AddrTypeDescriptor.__init__()=netaddr.address.AddrTypeDescriptor-class.html#__init__,Method netaddr.address.AddrValueDescriptor.__init__()=netaddr.address.AddrValueDescriptor-class.html#__init__,Method netaddr.address.CIDR.__init__()=netaddr.address.CIDR-class.html#__init__,Method netaddr.address.EUI.__init__()=netaddr.address.EUI-class.html#__init__,Method netaddr.address.FormatDescriptor.__init__()=netaddr.address.FormatDescriptor-class.html#__init__,Method netaddr.address.IP.__init__()=netaddr.address.IP-class.html#__init__,Method netaddr.address.IPRange.__init__()=netaddr.address.IPRange-class.html#__init__,Method netaddr.address.IPRangeSet.__init__()=netaddr.address.IPRangeSet-class.html#__init__,Method netaddr.address.PrefixLenDescriptor.__init__()=netaddr.address.PrefixLenDescriptor-class.html#__init__,Method netaddr.address.StrategyDescriptor.__init__()=netaddr.address.StrategyDescriptor-class.html#__init__,Method netaddr.address.Wildcard.__init__()=netaddr.address.Wildcard-class.html#__init__,Method netaddr.core.PrettyPrinter.__init__()=netaddr.core.PrettyPrinter-class.html#__init__,Method netaddr.core.Publisher.__init__()=netaddr.core.Publisher-class.html#__init__,Method netaddr.eui.FileIndexer.__init__()=netaddr.eui.FileIndexer-class.html#__init__,Method netaddr.eui.IAB.__init__()=netaddr.eui.IAB-class.html#__init__,Method netaddr.eui.IABIndexParser.__init__()=netaddr.eui.IABIndexParser-class.html#__init__,Method netaddr.eui.OUI.__init__()=netaddr.eui.OUI-class.html#__init__,Method netaddr.eui.OUIIndexParser.__init__()=netaddr.eui.OUIIndexParser-class.html#__init__,Method netaddr.ip.DictUpdater.__init__()=netaddr.ip.DictUpdater-class.html#__init__,Method netaddr.ip.IPv4Parser.__init__()=netaddr.ip.IPv4Parser-class.html#__init__,Method netaddr.ip.IPv6Parser.__init__()=netaddr.ip.IPv6Parser-class.html#__init__,Method netaddr.ip.LineRecordParser.__init__()=netaddr.ip.LineRecordParser-class.html#__init__,Method netaddr.ip.MulticastParser.__init__()=netaddr.ip.MulticastParser-class.html#__init__,Method netaddr.strategy.AddrStrategy.__init__()=netaddr.strategy.AddrStrategy-class.html#__init__,Method netaddr.strategy.EUI48Strategy.__init__()=netaddr.strategy.EUI48Strategy-class.html#__init__,Method netaddr.strategy.IPv4StrategyOpt.__init__()=netaddr.strategy.IPv4StrategyOpt-class.html#__init__,Method netaddr.strategy.IPv4StrategyStd.__init__()=netaddr.strategy.IPv4StrategyStd-class.html#__init__,Method netaddr.strategy.IPv6Strategy.__init__()=netaddr.strategy.IPv6Strategy-class.html#__init__"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-11', '__init__', 'link-11');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
-<a name="OUIIndexParser.parse"></a><div id="OUIIndexParser.parse-def"><a name="L106"></a><tt class="py-lineno">106</tt> <a class="py-toggle" href="#" id="OUIIndexParser.parse-toggle" onclick="return toggle('OUIIndexParser.parse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUIIndexParser-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUIIndexParser.parse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUIIndexParser.parse-expanded"><a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"> <tt class="py-docstring">"""Parse an OUI registration file for records notifying subscribers"""</tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-name">skip_header</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt id="link-12" class="py-name" targets="Method netaddr.address.IPRange.size()=netaddr.address.IPRange-class.html#size"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-12', 'size', 'link-12');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">readline</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># unbuffered to obtain correct offsets</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> <tt class="py-comment"># EOF, we're done</tt> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">skip_header</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-name">skip_header</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">skip_header</tt><tt class="py-op">:</tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-comment"># ignoring header section</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">continue</tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-comment"># record start</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">record</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> <tt class="py-comment"># a complete record.</tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">record</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-13" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-13', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method netaddr.core.Publisher.notify()=netaddr.core.Publisher-class.html#notify"><a title="netaddr.core.Publisher.notify" class="py-name" href="#" onclick="return doclink('link-14', 'notify', 'link-14');">notify</a></tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"> <tt id="link-15" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-15', 'size', 'link-12');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"> <tt class="py-name">offset</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"> <tt id="link-16" class="py-name" targets="Method netaddr.address.EUI.oui()=netaddr.address.EUI-class.html#oui"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-16', 'oui', 'link-16');">oui</a></tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-17" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-17', 'oui', 'link-16');">oui</a></tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">]</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-comment"># within record</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-18" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-18', 'size', 'link-12');">size</a></tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-comment"># process final record on loop exit</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">record</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-19" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-19', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-20" class="py-name"><a title="netaddr.core.Publisher.notify" class="py-name" href="#" onclick="return doclink('link-20', 'notify', 'link-14');">notify</a></tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IABIndexParser"></a><div id="IABIndexParser-def"><a name="L146"></a><tt class="py-lineno">146</tt> <a class="py-toggle" href="#" id="IABIndexParser-toggle" onclick="return toggle('IABIndexParser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.IABIndexParser-class.html">IABIndexParser</a><tt class="py-op">(</tt><tt class="py-base-class">Publisher</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IABIndexParser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IABIndexParser-expanded"><a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"><tt class="py-docstring"> A parser that processes IAB (Individual Address Block) registration file</tt> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"><tt class="py-docstring"> data published by the IEEE.</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"><tt class="py-docstring"> It sends out notifications to registered Subscriber objects for each</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"><tt class="py-docstring"> record it encounters, passing on the record's position relative to file</tt> </tt>
-<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-docstring"> start (offset) and the size of the record (in bytes).</tt> </tt>
-<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> The file is available online here :-</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> http://standards.ieee.org/regauth/iab/iab.txt</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> Sample record::</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"><tt class="py-docstring"> 00-50-C2 (hex) ACME CORPORATION</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"><tt class="py-docstring"> ABC000-ABCFFF (base 16) ACME CORPORATION</tt> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-docstring"> 1 MAIN STREET</tt> </tt>
-<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"><tt class="py-docstring"> SPRINGFIELD</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"><tt class="py-docstring"> UNITED STATES</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IABIndexParser.__init__"></a><div id="IABIndexParser.__init__-def"><a name="L167"></a><tt class="py-lineno">167</tt> <a class="py-toggle" href="#" id="IABIndexParser.__init__-toggle" onclick="return toggle('IABIndexParser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IABIndexParser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">filename</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IABIndexParser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IABIndexParser.__init__-expanded"><a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> filename - location of file containing IAB records.</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-21" class="py-name" targets="Class netaddr.eui.IABIndexParser=netaddr.eui.IABIndexParser-class.html"><a title="netaddr.eui.IABIndexParser" class="py-name" href="#" onclick="return doclink('link-21', 'IABIndexParser', 'link-21');">IABIndexParser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-22" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-22', '__init__', 'link-11');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">filename</tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
-<a name="IABIndexParser.parse"></a><div id="IABIndexParser.parse-def"><a name="L176"></a><tt class="py-lineno">176</tt> <a class="py-toggle" href="#" id="IABIndexParser.parse-toggle" onclick="return toggle('IABIndexParser.parse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IABIndexParser-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IABIndexParser.parse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IABIndexParser.parse-expanded"><a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-docstring">"""Parse an IAB registration file for records notifying subscribers"""</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> <tt class="py-name">skip_header</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> <tt id="link-23" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-23', 'size', 'link-12');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L181"></a><tt class="py-lineno">181</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">readline</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-comment"># unbuffered</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> <tt class="py-comment"># EOF, we're done</tt> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">skip_header</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">skip_header</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">skip_header</tt><tt class="py-op">:</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-comment"># ignoring header section</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">continue</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt class="py-comment"># record start</tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">record</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-24" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-24', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-25" class="py-name"><a title="netaddr.core.Publisher.notify" class="py-name" href="#" onclick="return doclink('link-25', 'notify', 'link-14');">notify</a></tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-name">offset</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">tell</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> <tt class="py-name">iab_prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">=</tt> <tt class="py-name">iab_prefix</tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">]</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-26', 'size', 'link-12');">size</a></tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'(base 16)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"> <tt class="py-comment"># within record</tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-27" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-27', 'size', 'link-12');">size</a></tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">suffix</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">prefix</tt> <tt class="py-op">+</tt> <tt class="py-name">suffix</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">12</tt> </tt>
-<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># within record</tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-28" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-28', 'size', 'link-12');">size</a></tt> <tt class="py-op">+=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-comment"># process final record on loop exit</tt> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">record</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-29', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name"><a title="netaddr.core.Publisher.notify" class="py-name" href="#" onclick="return doclink('link-30', 'notify', 'link-14');">notify</a></tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="OUI"></a><div id="OUI-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="OUI-toggle" onclick="return toggle('OUI');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html">OUI</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="OUI-expanded"><a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> Represents an individual IEEE OUI (Organisationally Unique Identifier)</tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> identifier.</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt class="py-docstring"> For online details see - http://standards.ieee.org/regauth/oui/</tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="OUI.__init__"></a><div id="OUI.__init__-def"><a name="L228"></a><tt class="py-lineno">228</tt> <a class="py-toggle" href="#" id="OUI.__init__-toggle" onclick="return toggle('OUI.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">oui</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.__init__-expanded"><a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"> Constructor</tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> @param oui: an OUI string C{XX-XX-XX} or a network byte order integer.</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"><tt class="py-docstring"> Also accepts and parses full MAC/EUI-48 address strings (but not</tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> MAC/EUI-48 integers)!</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-31" class="py-name" targets="Variable netaddr.address.Addr.value=netaddr.address.Addr-class.html#value"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-31', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-32" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-32', 'oui', 'link-16');">oui</a></tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"><tt class="py-comment">#FIXME: Improve string parsing here. Accept full MAC/EUI-48 addressse as</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#FIXME: well as XX-XX-XX and just take /16 (see IAB for details)!</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-33" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-33', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-34" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-34', 'oui', 'link-16');">oui</a></tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-35" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-35', 'oui', 'link-16');">oui</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt id="link-36" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-36', 'oui', 'link-16');">oui</a></tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">0xffffff</tt><tt class="py-op">:</tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-37', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt id="link-38" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-38', 'oui', 'link-16');">oui</a></tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'OUI int outside expected range: %r'</tt> <tt class="py-op">%</tt> <tt id="link-39" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-39', 'oui', 'link-16');">oui</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unexpected OUI format: %r'</tt> <tt class="py-op">%</tt> <tt id="link-40" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-40', 'oui', 'link-16');">oui</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-comment"># Discover offsets.</tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-41" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-41', 'value', 'link-31');">value</a></tt> <tt class="py-keyword">in</tt> <tt id="link-42" class="py-name"><a title="netaddr.eui.IEEE_OUI_INDEX" class="py-name" href="#" onclick="return doclink('link-42', 'IEEE_OUI_INDEX', 'link-6');">IEEE_OUI_INDEX</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt id="link-43" class="py-name"><a title="netaddr.eui.IEEE_OUI_REGISTRY" class="py-name" href="#" onclick="return doclink('link-43', 'IEEE_OUI_REGISTRY', 'link-4');">IEEE_OUI_REGISTRY</a></tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-44" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-44', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt id="link-45" class="py-name"><a title="netaddr.eui.IEEE_OUI_INDEX" class="py-name" href="#" onclick="return doclink('link-45', 'IEEE_OUI_INDEX', 'link-6');">IEEE_OUI_INDEX</a></tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-46" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-46', 'value', 'link-31');">value</a></tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">)</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt id="link-47" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-47', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parse_data</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-48" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-48', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-49" class="py-name" targets="Class netaddr.eui.NotRegisteredError=netaddr.eui.NotRegisteredError-class.html"><a title="netaddr.eui.NotRegisteredError" class="py-name" href="#" onclick="return doclink('link-49', 'NotRegisteredError', 'link-49');">NotRegisteredError</a></tt><tt class="py-op">(</tt><tt class="py-string">'OUI %r not registered!'</tt> <tt class="py-op">%</tt> <tt id="link-50" class="py-name"><a title="netaddr.address.EUI.oui" class="py-name" href="#" onclick="return doclink('link-50', 'oui', 'link-16');">oui</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> </tt>
-<a name="OUI._parse_data"></a><div id="OUI._parse_data-def"><a name="L262"></a><tt class="py-lineno">262</tt> <a class="py-toggle" href="#" id="OUI._parse_data-toggle" onclick="return toggle('OUI._parse_data');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#_parse_data">_parse_data</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">offset</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI._parse_data-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI._parse_data-expanded"><a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> <tt class="py-docstring">"""Returns a dict record from raw OUI record data"""</tt> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-string">'idx'</tt><tt class="py-op">:</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-string">'oui'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-string">'org'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-string">'address'</tt> <tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-string">'offset'</tt><tt class="py-op">:</tt> <tt class="py-name">offset</tt><tt class="py-op">,</tt> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-string">'size'</tt><tt class="py-op">:</tt> <tt id="link-51" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-51', 'size', 'link-12');">size</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'idx'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-52" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-52', 'value', 'link-31');">value</a></tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'org'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'oui'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'(base 16)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'address'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> </tt>
-<a name="OUI.org_count"></a><div id="OUI.org_count-def"><a name="L289"></a><tt class="py-lineno">289</tt> <a class="py-toggle" href="#" id="OUI.org_count-toggle" onclick="return toggle('OUI.org_count');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#org_count">org_count</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.org_count-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.org_count-expanded"><a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: number of organisations with this OUI"""</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> </tt>
-<a name="OUI.address"></a><div id="OUI.address-def"><a name="L293"></a><tt class="py-lineno">293</tt> <a class="py-toggle" href="#" id="OUI.address-toggle" onclick="return toggle('OUI.address');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#address">address</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.address-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.address-expanded"><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"><tt class="py-docstring"> @param index: the index of record (multiple registrations)</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"><tt class="py-docstring"> (Default: 0 - first registration)</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> @return: registered address of organisation linked to OUI</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt><tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'address'</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> </tt>
-<a name="OUI.org"></a><div id="OUI.org-def"><a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="OUI.org-toggle" onclick="return toggle('OUI.org');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#org">org</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">index</tt><tt class="py-op">=</tt><tt class="py-number">0</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.org-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.org-expanded"><a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"><tt class="py-docstring"> @param index: the index of record (multiple registrations)</tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"><tt class="py-docstring"> (Default: 0 - first registration)</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"><tt class="py-docstring"> @return: the name of organisation linked to OUI</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt><tt class="py-op">[</tt><tt class="py-name">index</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-string">'org'</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-name">organisation</tt> <tt class="py-op">=</tt> <tt id="link-53" class="py-name" targets="Method netaddr.eui.IAB.org()=netaddr.eui.IAB-class.html#org,Method netaddr.eui.OUI.org()=netaddr.eui.OUI-class.html#org"><a title="netaddr.eui.IAB.org
-netaddr.eui.OUI.org" class="py-name" href="#" onclick="return doclink('link-53', 'org', 'link-53');">org</a></tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> </tt>
-<a name="OUI.__int__"></a><div id="OUI.__int__-def"><a name="L313"></a><tt class="py-lineno">313</tt> <a class="py-toggle" href="#" id="OUI.__int__-toggle" onclick="return toggle('OUI.__int__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#__int__">__int__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.__int__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.__int__-expanded"><a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: integer representation of this OUI"""</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-54" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-54', 'value', 'link-31');">value</a></tt> </tt>
-</div><a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> </tt>
-<a name="OUI.__hex__"></a><div id="OUI.__hex__-def"><a name="L317"></a><tt class="py-lineno">317</tt> <a class="py-toggle" href="#" id="OUI.__hex__-toggle" onclick="return toggle('OUI.__hex__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#__hex__">__hex__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.__hex__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.__hex__-expanded"><a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: network byte order hexadecimal string of this OUI"""</tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-55', 'value', 'link-31');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'L'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> </tt>
-<a name="OUI.__str__"></a><div id="OUI.__str__-def"><a name="L321"></a><tt class="py-lineno">321</tt> <a class="py-toggle" href="#" id="OUI.__str__-toggle" onclick="return toggle('OUI.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.__str__-expanded"><a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: string representation of this OUI"""</tt> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-56" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-56', 'value', 'link-31');">value</a></tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-57" class="py-name" targets="Variable netaddr.address.IP._=netaddr.address.IP-class.html#_,Variable netaddr.strategy.EUI48Strategy._=netaddr.strategy.EUI48Strategy-class.html#_"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-57', '_', 'link-57');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-number">0xff</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'%02x'</tt> <tt class="py-op">%</tt> <tt class="py-name">word</tt><tt class="py-op">)</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-number">8</tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> </tt>
-<a name="OUI.registration"></a><div id="OUI.registration-def"><a name="L332"></a><tt class="py-lineno">332</tt> <a class="py-toggle" href="#" id="OUI.registration-toggle" onclick="return toggle('OUI.registration');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#registration">registration</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.registration-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.registration-expanded"><a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: registration details for this IAB"""</tt> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">records</tt> </tt>
-</div><a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> </tt>
-<a name="OUI.__repr__"></a><div id="OUI.__repr__-def"><a name="L336"></a><tt class="py-lineno">336</tt> <a class="py-toggle" href="#" id="OUI.__repr__-toggle" onclick="return toggle('OUI.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.OUI-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="OUI.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="OUI.__repr__-expanded"><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'%s(%r)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IAB"></a><div id="IAB-def"><a name="L341"></a><tt class="py-lineno">341</tt> <a class="py-toggle" href="#" id="IAB-toggle" onclick="return toggle('IAB');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html">IAB</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IAB-expanded"><a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"><tt class="py-docstring"> Represents an individual IEEE IAB (Individual Address Block) identifier.</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"><tt class="py-docstring"> For online details see - http://standards.ieee.org/regauth/oui/</tt> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IAB.split_iab_mac"></a><div id="IAB.split_iab_mac-def"><a name="L347"></a><tt class="py-lineno">347</tt> <a class="py-toggle" href="#" id="IAB.split_iab_mac-toggle" onclick="return toggle('IAB.split_iab_mac');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#split_iab_mac">split_iab_mac</a><tt class="py-op">(</tt><tt class="py-param">eui_int</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.split_iab_mac-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.split_iab_mac-expanded"><a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"><tt class="py-docstring"> @param eui_int: a MAC IAB integer value in network byte order.</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"><tt class="py-docstring"> @param strict: If True, raises a ValueError if the last 12 bits of</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"><tt class="py-docstring"> IAB MAC/EUI-48 address are non-zero, ignores them otherwise.</tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"><tt class="py-docstring"> (Default: False)</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">0x50c2000</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">eui_int</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">0x50c2fff</tt><tt class="py-op">:</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">eui_int</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-name">user_mask</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">12</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-name">iab_mask</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-number">48</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> <tt class="py-op">^</tt> <tt class="py-name">user_mask</tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt class="py-name">iab_bits</tt> <tt class="py-op">=</tt> <tt class="py-name">eui_int</tt> <tt class="py-op">&gt;&gt;</tt> <tt class="py-number">12</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-name">user_bits</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">eui_int</tt> <tt class="py-op">|</tt> <tt class="py-name">iab_mask</tt><tt class="py-op">)</tt> <tt class="py-op">-</tt> <tt class="py-name">iab_mask</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">0x50c2000</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">iab_bits</tt> <tt class="py-op">&lt;=</tt> <tt class="py-number">0x50c2fff</tt><tt class="py-op">:</tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">strict</tt> <tt class="py-keyword">and</tt> <tt class="py-name">user_bits</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a strict IAB!'</tt> <tt class="py-op">%</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">user_bits</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not an IAB address!'</tt> <tt class="py-op">%</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">eui_int</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">iab_bits</tt><tt class="py-op">,</tt> <tt class="py-name">user_bits</tt> </tt>
-</div><a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> </tt>
-<a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> <tt id="link-58" class="py-name" targets="Static Method netaddr.eui.IAB.split_iab_mac()=netaddr.eui.IAB-class.html#split_iab_mac"><a title="netaddr.eui.IAB.split_iab_mac" class="py-name" href="#" onclick="return doclink('link-58', 'split_iab_mac', 'link-58');">split_iab_mac</a></tt> <tt class="py-op">=</tt> <tt class="py-name">staticmethod</tt><tt class="py-op">(</tt><tt id="link-59" class="py-name"><a title="netaddr.eui.IAB.split_iab_mac" class="py-name" href="#" onclick="return doclink('link-59', 'split_iab_mac', 'link-58');">split_iab_mac</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt> <tt class="py-line"> </tt>
-<a name="IAB.__init__"></a><div id="IAB.__init__-def"><a name="L373"></a><tt class="py-lineno">373</tt> <a class="py-toggle" href="#" id="IAB.__init__-toggle" onclick="return toggle('IAB.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">iab</tt><tt class="py-op">,</tt> <tt class="py-param">strict</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.__init__-expanded"><a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"><tt class="py-docstring"> Constructor</tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"><tt class="py-docstring"> @param iab: an IAB string C{00-50-C2-XX-X0-00} or a network byte order</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"><tt class="py-docstring"> integer. This address looks like an EUI-48 but it should not have</tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"><tt class="py-docstring"> any non-zero bits in the last 3 bytes.</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"><tt class="py-docstring"> @param strict: If True, raises a ValueError if the last 12 bits of</tt> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"><tt class="py-docstring"> IAB MAC/EUI-48 address are non-zero, ignores them otherwise.</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"><tt class="py-docstring"> (Default: False)</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-60" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-60', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> <tt class="py-string">'idx'</tt><tt class="py-op">:</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-string">'iab'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-string">'org'</tt><tt class="py-op">:</tt> <tt class="py-string">''</tt><tt class="py-op">,</tt> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-string">'address'</tt> <tt class="py-op">:</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-string">'offset'</tt><tt class="py-op">:</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> </tt>
-<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-string">'size'</tt><tt class="py-op">:</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> </tt>
-<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> </tt>
-<a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-61" class="py-name" targets="Method netaddr.address.EUI.iab()=netaddr.address.EUI-class.html#iab"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-61', 'iab', 'link-61');">iab</a></tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"><tt class="py-comment">#FIXME: Improve string parsing here !!! '00-50-C2' is actually invalid.</tt> </tt>
-<a name="L397"></a><tt class="py-lineno">397</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#FIXME: Should be '00-50-C2-00-00-00' (i.e. a full MAC/EUI-48)</tt> </tt>
-<a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-62" class="py-name"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-62', 'iab', 'link-61');">iab</a></tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">iab_int</tt><tt class="py-op">,</tt> <tt class="py-name">user_int</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-63" class="py-name" targets="Class netaddr.eui.IAB=netaddr.eui.IAB-class.html"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-63', 'IAB', 'link-63');">IAB</a></tt><tt class="py-op">.</tt><tt id="link-64" class="py-name"><a title="netaddr.eui.IAB.split_iab_mac" class="py-name" href="#" onclick="return doclink('link-64', 'split_iab_mac', 'link-58');">split_iab_mac</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">,</tt> <tt class="py-name">strict</tt><tt class="py-op">)</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-65', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">iab_int</tt> </tt>
-<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-66" class="py-name"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-66', 'iab', 'link-61');">iab</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">iab_int</tt><tt class="py-op">,</tt> <tt class="py-name">user_int</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-67" class="py-name"><a title="netaddr.eui.IAB" class="py-name" href="#" onclick="return doclink('link-67', 'IAB', 'link-63');">IAB</a></tt><tt class="py-op">.</tt><tt id="link-68" class="py-name"><a title="netaddr.eui.IAB.split_iab_mac" class="py-name" href="#" onclick="return doclink('link-68', 'split_iab_mac', 'link-58');">split_iab_mac</a></tt><tt class="py-op">(</tt><tt id="link-69" class="py-name"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-69', 'iab', 'link-61');">iab</a></tt><tt class="py-op">,</tt> <tt class="py-name">strict</tt><tt class="py-op">)</tt> </tt>
-<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-70" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-70', 'value', 'link-31');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">iab_int</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'unexpected IAB format: %r!'</tt> <tt class="py-op">%</tt> <tt id="link-71" class="py-name"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-71', 'iab', 'link-61');">iab</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"> </tt>
-<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"> <tt class="py-comment"># Discover offsets.</tt> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-72" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-72', 'value', 'link-31');">value</a></tt> <tt class="py-keyword">in</tt> <tt id="link-73" class="py-name"><a title="netaddr.eui.IEEE_IAB_INDEX" class="py-name" href="#" onclick="return doclink('link-73', 'IEEE_IAB_INDEX', 'link-9');">IEEE_IAB_INDEX</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"> <tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">open</tt><tt class="py-op">(</tt><tt id="link-74" class="py-name"><a title="netaddr.eui.IEEE_IAB_REGISTRY" class="py-name" href="#" onclick="return doclink('link-74', 'IEEE_IAB_REGISTRY', 'link-7');">IEEE_IAB_REGISTRY</a></tt><tt class="py-op">,</tt> <tt class="py-string">'rb'</tt><tt class="py-op">)</tt> </tt>
-<a name="L410"></a><tt class="py-lineno">410</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-75" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-75', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt id="link-76" class="py-name"><a title="netaddr.eui.IEEE_IAB_INDEX" class="py-name" href="#" onclick="return doclink('link-76', 'IEEE_IAB_INDEX', 'link-9');">IEEE_IAB_INDEX</a></tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-77', 'value', 'link-31');">value</a></tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'offset'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">offset</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'size'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-78" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-78', 'size', 'link-12');">size</a></tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">)</tt> </tt>
-<a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> <tt class="py-name">data</tt> <tt class="py-op">=</tt> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">read</tt><tt class="py-op">(</tt><tt id="link-79" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-79', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L415"></a><tt class="py-lineno">415</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_parse_data</tt><tt class="py-op">(</tt><tt class="py-name">data</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-80" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-80', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-name">fh</tt><tt class="py-op">.</tt><tt class="py-name">close</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-81" class="py-name"><a title="netaddr.eui.NotRegisteredError" class="py-name" href="#" onclick="return doclink('link-81', 'NotRegisteredError', 'link-49');">NotRegisteredError</a></tt><tt class="py-op">(</tt><tt class="py-string">'IAB %r not unregistered!'</tt> <tt class="py-op">%</tt> <tt id="link-82" class="py-name"><a title="netaddr.address.EUI.iab" class="py-name" href="#" onclick="return doclink('link-82', 'iab', 'link-61');">iab</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"> </tt>
-<a name="IAB._parse_data"></a><div id="IAB._parse_data-def"><a name="L420"></a><tt class="py-lineno">420</tt> <a class="py-toggle" href="#" id="IAB._parse_data-toggle" onclick="return toggle('IAB._parse_data');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#_parse_data">_parse_data</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">,</tt> <tt class="py-param">offset</tt><tt class="py-op">,</tt> <tt class="py-param">size</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB._parse_data-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB._parse_data-expanded"><a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"> <tt class="py-docstring">"""Returns a dict record from raw IAB record data"""</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">"\n"</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">line</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> </tt>
-<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'(hex)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L428"></a><tt class="py-lineno">428</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'idx'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-83" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-83', 'value', 'link-31');">value</a></tt> </tt>
-<a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'org'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'iab'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'(base 16)'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">line</tt><tt class="py-op">:</tt> </tt>
-<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'address'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"> </tt>
-<a name="IAB.address"></a><div id="IAB.address-def"><a name="L436"></a><tt class="py-lineno">436</tt> <a class="py-toggle" href="#" id="IAB.address-toggle" onclick="return toggle('IAB.address');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#address">address</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.address-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.address-expanded"><a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: registered address of organisation"""</tt> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'address'</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"> </tt>
-<a name="IAB.org"></a><div id="IAB.org-def"><a name="L440"></a><tt class="py-lineno">440</tt> <a class="py-toggle" href="#" id="IAB.org-toggle" onclick="return toggle('IAB.org');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#org">org</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.org-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.org-expanded"><a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: the name of organisation"""</tt> </tt>
-<a name="L442"></a><tt class="py-lineno">442</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'org'</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">organisation</tt> <tt class="py-op">=</tt> <tt id="link-84" class="py-name"><a title="netaddr.eui.IAB.org
-netaddr.eui.OUI.org" class="py-name" href="#" onclick="return doclink('link-84', 'org', 'link-53');">org</a></tt> </tt>
-<a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> </tt>
-<a name="IAB.__int__"></a><div id="IAB.__int__-def"><a name="L446"></a><tt class="py-lineno">446</tt> <a class="py-toggle" href="#" id="IAB.__int__-toggle" onclick="return toggle('IAB.__int__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#__int__">__int__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.__int__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.__int__-expanded"><a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: integer representation of this IAB"""</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-85" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-85', 'value', 'link-31');">value</a></tt> </tt>
-</div><a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"> </tt>
-<a name="IAB.__hex__"></a><div id="IAB.__hex__-def"><a name="L450"></a><tt class="py-lineno">450</tt> <a class="py-toggle" href="#" id="IAB.__hex__-toggle" onclick="return toggle('IAB.__hex__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#__hex__">__hex__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.__hex__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.__hex__-expanded"><a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: network byte order hexadecimal string of this IAB"""</tt> </tt>
-<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-86', 'value', 'link-31');">value</a></tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">'L'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> </tt>
-<a name="IAB.__str__"></a><div id="IAB.__str__-def"><a name="L454"></a><tt class="py-lineno">454</tt> <a class="py-toggle" href="#" id="IAB.__str__-toggle" onclick="return toggle('IAB.__str__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#__str__">__str__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.__str__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.__str__-expanded"><a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: string representation of this IAB"""</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-87" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-87', 'value', 'link-31');">value</a></tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-number">12</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-88" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-88', '_', 'link-57');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">6</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-number">0xff</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">'%02x'</tt> <tt class="py-op">%</tt> <tt class="py-name">word</tt><tt class="py-op">)</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-number">8</tt> </tt>
-<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> </tt>
-<a name="IAB.registration"></a><div id="IAB.registration-def"><a name="L465"></a><tt class="py-lineno">465</tt> <a class="py-toggle" href="#" id="IAB.registration-toggle" onclick="return toggle('IAB.registration');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#registration">registration</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.registration-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.registration-expanded"><a name="L466"></a><tt class="py-lineno">466</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: registration details for this IAB"""</tt> </tt>
-<a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record</tt> </tt>
-</div><a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"> </tt>
-<a name="IAB.__repr__"></a><div id="IAB.__repr__-def"><a name="L469"></a><tt class="py-lineno">469</tt> <a class="py-toggle" href="#" id="IAB.__repr__-toggle" onclick="return toggle('IAB.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui.IAB-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IAB.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IAB.__repr__-expanded"><a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object."""</tt> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'%s(%r)'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> <tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="create_ieee_indices"></a><div id="create_ieee_indices-def"><a name="L474"></a><tt class="py-lineno">474</tt> <a class="py-toggle" href="#" id="create_ieee_indices-toggle" onclick="return toggle('create_ieee_indices');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui-module.html#create_ieee_indices">create_ieee_indices</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="create_ieee_indices-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="create_ieee_indices-expanded"><a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-docstring">"""Create indices for OUI and IAB file based lookups"""</tt> </tt>
-<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-name">oui_parser</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="netaddr.eui.OUIIndexParser" class="py-name" href="#" onclick="return doclink('link-89', 'OUIIndexParser', 'link-10');">OUIIndexParser</a></tt><tt class="py-op">(</tt><tt id="link-90" class="py-name"><a title="netaddr.eui.IEEE_OUI_REGISTRY" class="py-name" href="#" onclick="return doclink('link-90', 'IEEE_OUI_REGISTRY', 'link-4');">IEEE_OUI_REGISTRY</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> <tt class="py-name">oui_parser</tt><tt class="py-op">.</tt><tt id="link-91" class="py-name" targets="Method netaddr.core.Publisher.attach()=netaddr.core.Publisher-class.html#attach"><a title="netaddr.core.Publisher.attach" class="py-name" href="#" onclick="return doclink('link-91', 'attach', 'link-91');">attach</a></tt><tt class="py-op">(</tt><tt id="link-92" class="py-name" targets="Class netaddr.eui.FileIndexer=netaddr.eui.FileIndexer-class.html"><a title="netaddr.eui.FileIndexer" class="py-name" href="#" onclick="return doclink('link-92', 'FileIndexer', 'link-92');">FileIndexer</a></tt><tt class="py-op">(</tt><tt id="link-93" class="py-name"><a title="netaddr.eui.IEEE_OUI_METADATA" class="py-name" href="#" onclick="return doclink('link-93', 'IEEE_OUI_METADATA', 'link-5');">IEEE_OUI_METADATA</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L478"></a><tt class="py-lineno">478</tt> <tt class="py-line"> <tt class="py-name">oui_parser</tt><tt class="py-op">.</tt><tt id="link-94" class="py-name" targets="Method netaddr.eui.IABIndexParser.parse()=netaddr.eui.IABIndexParser-class.html#parse,Method netaddr.eui.OUIIndexParser.parse()=netaddr.eui.OUIIndexParser-class.html#parse,Method netaddr.ip.LineRecordParser.parse()=netaddr.ip.LineRecordParser-class.html#parse"><a title="netaddr.eui.IABIndexParser.parse
-netaddr.eui.OUIIndexParser.parse
-netaddr.ip.LineRecordParser.parse" class="py-name" href="#" onclick="return doclink('link-94', 'parse', 'link-94');">parse</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> </tt>
-<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"> <tt class="py-name">iab_parser</tt> <tt class="py-op">=</tt> <tt id="link-95" class="py-name"><a title="netaddr.eui.IABIndexParser" class="py-name" href="#" onclick="return doclink('link-95', 'IABIndexParser', 'link-21');">IABIndexParser</a></tt><tt class="py-op">(</tt><tt id="link-96" class="py-name"><a title="netaddr.eui.IEEE_IAB_REGISTRY" class="py-name" href="#" onclick="return doclink('link-96', 'IEEE_IAB_REGISTRY', 'link-7');">IEEE_IAB_REGISTRY</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"> <tt class="py-name">iab_parser</tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="netaddr.core.Publisher.attach" class="py-name" href="#" onclick="return doclink('link-97', 'attach', 'link-91');">attach</a></tt><tt class="py-op">(</tt><tt id="link-98" class="py-name"><a title="netaddr.eui.FileIndexer" class="py-name" href="#" onclick="return doclink('link-98', 'FileIndexer', 'link-92');">FileIndexer</a></tt><tt class="py-op">(</tt><tt id="link-99" class="py-name"><a title="netaddr.eui.IEEE_IAB_METADATA" class="py-name" href="#" onclick="return doclink('link-99', 'IEEE_IAB_METADATA', 'link-8');">IEEE_IAB_METADATA</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"> <tt class="py-name">iab_parser</tt><tt class="py-op">.</tt><tt id="link-100" class="py-name"><a title="netaddr.eui.IABIndexParser.parse
-netaddr.eui.OUIIndexParser.parse
-netaddr.ip.LineRecordParser.parse" class="py-name" href="#" onclick="return doclink('link-100', 'parse', 'link-94');">parse</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"> </tt>
-<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="load_ieee_indices"></a><div id="load_ieee_indices-def"><a name="L485"></a><tt class="py-lineno">485</tt> <a class="py-toggle" href="#" id="load_ieee_indices-toggle" onclick="return toggle('load_ieee_indices');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.eui-module.html#load_ieee_indices">load_ieee_indices</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="load_ieee_indices-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="load_ieee_indices-expanded"><a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-docstring">"""Load OUI and IAB indices into memory"""</tt> </tt>
-<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">row</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_csv</tt><tt class="py-op">.</tt><tt class="py-name">reader</tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt id="link-101" class="py-name"><a title="netaddr.eui.IEEE_OUI_METADATA" class="py-name" href="#" onclick="return doclink('link-101', 'IEEE_OUI_METADATA', 'link-5');">IEEE_OUI_METADATA</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-102" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-102', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-103" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-103', '_', 'link-57');">_</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-104" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-104', '_', 'link-57');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">row</tt><tt class="py-op">]</tt> </tt>
-<a name="L489"></a><tt class="py-lineno">489</tt> <tt class="py-line"> <tt id="link-105" class="py-name"><a title="netaddr.eui.IEEE_OUI_INDEX" class="py-name" href="#" onclick="return doclink('link-105', 'IEEE_OUI_INDEX', 'link-6');">IEEE_OUI_INDEX</a></tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt id="link-106" class="py-name"><a title="netaddr.eui.IEEE_OUI_INDEX" class="py-name" href="#" onclick="return doclink('link-106', 'IEEE_OUI_INDEX', 'link-6');">IEEE_OUI_INDEX</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-107" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-107', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"> </tt>
-<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">row</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_csv</tt><tt class="py-op">.</tt><tt class="py-name">reader</tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt id="link-108" class="py-name"><a title="netaddr.eui.IEEE_IAB_METADATA" class="py-name" href="#" onclick="return doclink('link-108', 'IEEE_IAB_METADATA', 'link-8');">IEEE_IAB_METADATA</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-109" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-109', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-110" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-110', '_', 'link-57');">_</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-111" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-111', '_', 'link-57');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">row</tt><tt class="py-op">]</tt> </tt>
-<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"> <tt id="link-112" class="py-name"><a title="netaddr.eui.IEEE_IAB_INDEX" class="py-name" href="#" onclick="return doclink('link-112', 'IEEE_IAB_INDEX', 'link-9');">IEEE_IAB_INDEX</a></tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"> <tt id="link-113" class="py-name"><a title="netaddr.eui.IEEE_IAB_INDEX" class="py-name" href="#" onclick="return doclink('link-113', 'IEEE_IAB_INDEX', 'link-9');">IEEE_IAB_INDEX</a></tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">offset</tt><tt class="py-op">,</tt> <tt id="link-114" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-114', 'size', 'link-12');">size</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"> </tt>
-<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"> <tt class="py-comment"># Generate indices when module is executed as a script.</tt> </tt>
-<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-115" class="py-name" targets="Function netaddr.eui.create_ieee_indices()=netaddr.eui-module.html#create_ieee_indices"><a title="netaddr.eui.create_ieee_indices" class="py-name" href="#" onclick="return doclink('link-115', 'create_ieee_indices', 'link-115');">create_ieee_indices</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"><tt class="py-comment"># On module load read indices in memory to enable lookups.</tt> </tt>
-<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-116" class="py-name" targets="Function netaddr.eui.load_ieee_indices()=netaddr.eui-module.html#load_ieee_indices"><a title="netaddr.eui.load_ieee_indices" class="py-name" href="#" onclick="return doclink('link-116', 'load_ieee_indices', 'link-116');">load_ieee_indices</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:07 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.FileIndexer-class.html b/docs/api/netaddr.eui.FileIndexer-class.html
deleted file mode 100644
index a0425e7..0000000
--- a/docs/api/netaddr.eui.FileIndexer-class.html
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.FileIndexer</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;FileIndexer
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.FileIndexer-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class FileIndexer</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#FileIndexer">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Subscriber-class.html">core.Subscriber</a> --+
- |
- <strong class="uidshort">FileIndexer</strong>
-</pre>
-
-<hr />
-<p>Stores index data found by a parser in a CSV file</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.FileIndexer-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">filename</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#FileIndexer.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.FileIndexer-class.html#update" class="summary-sig-name">update</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">data</span>)</span><br />
- Write received record to a CSV file</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#FileIndexer.update">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">filename</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#FileIndexer.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>filename - location of CSV index file.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="update"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">update</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">data</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#FileIndexer.update">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Write received record to a CSV file</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>data</code></strong> - record containing offset record information.</li>
- </ul></dd>
- <dt>Overrides:
- <a href="netaddr.core.Subscriber-class.html#update">core.Subscriber.update</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.IAB-class.html b/docs/api/netaddr.eui.IAB-class.html
deleted file mode 100644
index ae6b7d3..0000000
--- a/docs/api/netaddr.eui.IAB-class.html
+++ /dev/null
@@ -1,599 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.IAB</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;IAB
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.IAB-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IAB</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">IAB</strong>
-</pre>
-
-<hr />
-<p>Represents an individual IEEE IAB (Individual Address Block)
- identifier.</p>
- <p>For online details see - http://standards.ieee.org/regauth/oui/</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">iab</span>,
- <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">False</span>)</span><br />
- Constructor</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#address" class="summary-sig-name">address</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- registered address of organisation</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.address">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#org" class="summary-sig-name">org</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- the name of organisation</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.org">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#organisation" class="summary-sig-name">organisation</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- the name of organisation</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.org">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#__int__" class="summary-sig-name">__int__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- integer representation of this IAB</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__int__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#__hex__" class="summary-sig-name">__hex__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- network byte order hexadecimal string of this IAB</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__hex__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- string representation of this IAB</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#registration" class="summary-sig-name">registration</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- registration details for this IAB</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.registration">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== STATIC METHODS ==================== -->
-<a name="section-StaticMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Static Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IAB-class.html#split_iab_mac" class="summary-sig-name">split_iab_mac</a>(<span class="summary-sig-arg">eui_int</span>,
- <span class="summary-sig-arg">strict</span>=<span class="summary-sig-default">False</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.split_iab_mac">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="split_iab_mac"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">split_iab_mac</span>(<span class="sig-arg">eui_int</span>,
- <span class="sig-arg">strict</span>=<span class="sig-default">False</span>)</span>
- <br /><em class="fname">Static Method</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.split_iab_mac">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>eui_int</code></strong> - a MAC IAB integer value in network byte order.</li>
- <li><strong class="pname"><code>strict</code></strong> - If True, raises a ValueError if the last 12 bits of IAB
- MAC/EUI-48 address are non-zero, ignores them otherwise.
- (Default: False)</li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">iab</span>,
- <span class="sig-arg">strict</span>=<span class="sig-default">False</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>iab</code></strong> - an IAB string <code>00-50-C2-XX-X0-00</code> or a network byte
- order integer. This address looks like an EUI-48 but it should
- not have any non-zero bits in the last 3 bytes.</li>
- <li><strong class="pname"><code>strict</code></strong> - If True, raises a ValueError if the last 12 bits of IAB
- MAC/EUI-48 address are non-zero, ignores them otherwise.
- (Default: False)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="address"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">address</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.address">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>registered address of organisation</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="org"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">org</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.org">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>the name of organisation</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="organisation"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">organisation</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.org">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>the name of organisation</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__int__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__int__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__int__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>integer representation of this IAB</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__hex__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__hex__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__hex__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>network byte order hexadecimal string of this IAB</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>string representation of this IAB</dd>
- <dt>Overrides:
- object.__str__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="registration"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">registration</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.registration">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>registration details for this IAB</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IAB.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.IABIndexParser-class.html b/docs/api/netaddr.eui.IABIndexParser-class.html
deleted file mode 100644
index 47da86e..0000000
--- a/docs/api/netaddr.eui.IABIndexParser-class.html
+++ /dev/null
@@ -1,253 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.IABIndexParser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;IABIndexParser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.IABIndexParser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IABIndexParser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#IABIndexParser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <strong class="uidshort">IABIndexParser</strong>
-</pre>
-
-<hr />
-<p>A parser that processes IAB (Individual Address Block) registration
- file data published by the IEEE.</p>
- <p>It sends out notifications to registered Subscriber objects for each
- record it encounters, passing on the record's position relative to file
- start (offset) and the size of the record (in bytes).</p>
- <p>The file is available online here :-</p>
- <p>http://standards.ieee.org/regauth/iab/iab.txt</p>
- <p>Sample record:</p>
-<pre class="literalblock">
- 00-50-C2 (hex) ACME CORPORATION
- ABC000-ABCFFF (base 16) ACME CORPORATION
- 1 MAIN STREET
- SPRINGFIELD
- UNITED STATES
-</pre>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.IABIndexParser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">filename</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IABIndexParser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="parse"></a><span class="summary-sig-name">parse</span>(<span class="summary-sig-arg">self</span>)</span><br />
- Parse an IAB registration file for records notifying subscribers</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#IABIndexParser.parse">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">filename</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#IABIndexParser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>filename - location of file containing IAB records.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.NotRegisteredError-class.html b/docs/api/netaddr.eui.NotRegisteredError-class.html
deleted file mode 100644
index 4106b9c..0000000
--- a/docs/api/netaddr.eui.NotRegisteredError-class.html
+++ /dev/null
@@ -1,179 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.NotRegisteredError</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;NotRegisteredError
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.NotRegisteredError-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class NotRegisteredError</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#NotRegisteredError">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-exceptions.BaseException --+
- |
- exceptions.Exception --+
- |
- <strong class="uidshort">NotRegisteredError</strong>
-</pre>
-
-<hr />
-<p>An Exception indicating that an OUI or IAB was not found in the IEEE
- Registry.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.Exception</code></b>:
- <code>__init__</code>,
- <code>__new__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__getitem__</code>,
- <code>__getslice__</code>,
- <code>__reduce__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__setstate__</code>,
- <code>__str__</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__hash__</code>,
- <code>__reduce_ex__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>exceptions.BaseException</code></b>:
- <code>args</code>,
- <code>message</code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.OUI-class.html b/docs/api/netaddr.eui.OUI-class.html
deleted file mode 100644
index c2a7aa2..0000000
--- a/docs/api/netaddr.eui.OUI-class.html
+++ /dev/null
@@ -1,600 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.OUI</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;OUI
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.OUI-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class OUI</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">OUI</strong>
-</pre>
-
-<hr />
-<p>Represents an individual IEEE OUI (Organisationally Unique Identifier)
- identifier.</p>
- <p>For online details see - http://standards.ieee.org/regauth/oui/</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">oui</span>)</span><br />
- Constructor</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#org_count" class="summary-sig-name">org_count</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- number of organisations with this OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org_count">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#address" class="summary-sig-name">address</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>=<span class="summary-sig-default">0</span>)</span><br />
- Returns:
- registered address of organisation linked to OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.address">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#org" class="summary-sig-name">org</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>=<span class="summary-sig-default">0</span>)</span><br />
- Returns:
- the name of organisation linked to OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#organisation" class="summary-sig-name">organisation</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">index</span>=<span class="summary-sig-default">0</span>)</span><br />
- Returns:
- the name of organisation linked to OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#__int__" class="summary-sig-name">__int__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- integer representation of this OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__int__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#__hex__" class="summary-sig-name">__hex__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- network byte order hexadecimal string of this OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__hex__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#__str__" class="summary-sig-name">__str__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- string representation of this OUI</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__str__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#registration" class="summary-sig-name">registration</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- registration details for this IAB</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.registration">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUI-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">oui</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>oui</code></strong> - an OUI string <code>XX-XX-XX</code> or a network byte order
- integer. Also accepts and parses full MAC/EUI-48 address strings
- (but not MAC/EUI-48 integers)!</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="org_count"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">org_count</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org_count">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>number of organisations with this OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="address"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">address</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">index</span>=<span class="sig-default">0</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.address">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>index</code></strong> - the index of record (multiple registrations) (Default: 0 - first
- registration)</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>registered address of organisation linked to OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="org"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">org</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">index</span>=<span class="sig-default">0</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>index</code></strong> - the index of record (multiple registrations) (Default: 0 - first
- registration)</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>the name of organisation linked to OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="organisation"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">organisation</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">index</span>=<span class="sig-default">0</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.org">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>index</code></strong> - the index of record (multiple registrations) (Default: 0 - first
- registration)</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>the name of organisation linked to OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__int__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__int__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__int__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>integer representation of this OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__hex__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__hex__</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__hex__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>network byte order hexadecimal string of this OUI</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__str__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__str__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Informal representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__str__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>str(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>string representation of this OUI</dd>
- <dt>Overrides:
- object.__str__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="registration"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">registration</span>(<span class="sig-arg">self</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.registration">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>registration details for this IAB</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUI.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object.</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.eui.OUIIndexParser-class.html b/docs/api/netaddr.eui.OUIIndexParser-class.html
deleted file mode 100644
index 9101e1f..0000000
--- a/docs/api/netaddr.eui.OUIIndexParser-class.html
+++ /dev/null
@@ -1,253 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.eui.OUIIndexParser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.eui-module.html" onclick="show_private();">Package&nbsp;eui</a> ::
- Class&nbsp;OUIIndexParser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.eui.OUIIndexParser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class OUIIndexParser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.eui-pysrc.html#OUIIndexParser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <strong class="uidshort">OUIIndexParser</strong>
-</pre>
-
-<hr />
-<p>A parser that processes OUI (Organisationally Unique Identifier)
- registration file data published by the IEEE.</p>
- <p>It sends out notifications to registered subscribers for each record
- it encounters, passing on the record's position relative to file start
- (offset) and the size of the record (in bytes).</p>
- <p>The file is available online here :-</p>
- <p>http://standards.ieee.org/regauth/oui/oui.txt</p>
- <p>Sample record:</p>
-<pre class="literalblock">
- 00-CA-FE (hex) ACME CORPORATION
- 00CAFE (base 16) ACME CORPORATION
- 1 MAIN STREET
- SPRINGFIELD
- UNITED STATES
-</pre>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.eui.OUIIndexParser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">filename</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUIIndexParser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="parse"></a><span class="summary-sig-name">parse</span>(<span class="summary-sig-arg">self</span>)</span><br />
- Parse an OUI registration file for records notifying subscribers</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.eui-pysrc.html#OUIIndexParser.parse">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">filename</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.eui-pysrc.html#OUIIndexParser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>filename - location of file containing OUI records.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip-module.html b/docs/api/netaddr.ip-module.html
deleted file mode 100644
index baf1c1b..0000000
--- a/docs/api/netaddr.ip-module.html
+++ /dev/null
@@ -1,284 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Package&nbsp;ip
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== PACKAGE DESCRIPTION ==================== -->
-<h1 class="epydoc">Package ip</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html">source&nbsp;code</a></span></p>
-<p>Provides access to public network address information published by
- IANA.</p>
- <p>More details can be found at the following URLs :-</p>
- <p>Internet Assigned Numbers Authority (IANA)</p>
- <ul>
- <li>
- http://www.iana.org/
- </li>
- <li>
- http://www.iana.org/protocols/
- </li>
- </ul>
-
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip.LineRecordParser-class.html" class="summary-name">LineRecordParser</a><br />
- A configurable Parser that understands how to parse line based
- records.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip.IPv4Parser-class.html" class="summary-name">IPv4Parser</a><br />
- A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv4 address space file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip.IPv6Parser-class.html" class="summary-name">IPv6Parser</a><br />
- A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv6 address space file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip.MulticastParser-class.html" class="summary-name">MulticastParser</a><br />
- A LineParser that knows how to process the IANA IPv4 multicast
- address allocation file.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip.DictUpdater-class.html" class="summary-name">DictUpdater</a><br />
- Concrete Subscriber that inserts records received from a Publisher
- into a dictionary.
- </td>
- </tr>
-</table>
-<!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Functions</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="load_iana_info"></a><span class="summary-sig-name">load_iana_info</span>()</span><br />
- Parse and load internal IANA data lookups with the latest information
- from data files.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#load_iana_info">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="query"></a><span class="summary-sig-name">query</span>(<span class="summary-sig-arg">ip_addr</span>)</span><br />
- Returns informational data specific to this IP address.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#query">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES ==================== -->
-<a name="section-Variables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.ip-module.html#IANA_INFO" class="summary-name">IANA_INFO</a> = <code title="{'IPv4': {CIDR('0.0.0.0/8'): {'date': '1981-09',
- 'designation': 'IANA - Local Identificat\
-ion',
- 'prefix': '0/8',
- 'status': 'Reserved',
- 'whois': ''},
- CIDR('1.0.0.0/8'): {'date': '',
- 'designation': 'IANA',
-..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">IPv4</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code>CIDR('0.0.0.0/8')<code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">date</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">1981-09</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-ellipsis">...</code></code><br />
- Topic based lookup dictionary for IANA information.
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES DETAILS ==================== -->
-<a name="section-VariablesDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables Details</span></td>
-</tr>
-</table>
-<a name="IANA_INFO"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">IANA_INFO</h3>
- <p>Topic based lookup dictionary for IANA information.</p>
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">IPv4</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-group">{</code>CIDR('0.0.0.0/8')<code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">date</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">1981-09</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">designation</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">IANA - Local Identificat</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">ion</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">prefix</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">0/8</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">status</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">Reserved</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">whois</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-group">}</code><code class="variable-op">,</code>
- CIDR('1.0.0.0/8')<code class="variable-op">: </code><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">date</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string"></code><code class="variable-quote">'</code><code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">designation</code><code class="variable-quote">'</code><code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">IANA</code><code class="variable-quote">'</code><code class="variable-op">,</code>
-<code class="variable-ellipsis">...</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip-pysrc.html b/docs/api/netaddr.ip-pysrc.html
deleted file mode 100644
index b751a3d..0000000
--- a/docs/api/netaddr.ip-pysrc.html
+++ /dev/null
@@ -1,637 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Package&nbsp;ip
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.ip-module.html">Package netaddr.ip</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python </tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved. </tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># </tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details. </tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">""" </tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Provides access to public network address information published by IANA. </tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-docstring">More details can be found at the following URLs :- </tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-docstring">Internet Assigned Numbers Authority (IANA) </tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt class="py-docstring"> - http://www.iana.org/ </tt> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"><tt class="py-docstring"> - http://www.iana.org/protocols/</tt> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_os</tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">path</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_path</tt> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_re</tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-0', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-1" class="py-name" targets="Module netaddr.core=netaddr.core-module.html"><a title="netaddr.core" class="py-name" href="#" onclick="return doclink('link-1', 'core', 'link-1');">core</a></tt> <tt class="py-keyword">import</tt> <tt id="link-2" class="py-name" targets="Class netaddr.core.Publisher=netaddr.core.Publisher-class.html"><a title="netaddr.core.Publisher" class="py-name" href="#" onclick="return doclink('link-2', 'Publisher', 'link-2');">Publisher</a></tt><tt class="py-op">,</tt> <tt id="link-3" class="py-name" targets="Class netaddr.core.Subscriber=netaddr.core.Subscriber-class.html"><a title="netaddr.core.Subscriber" class="py-name" href="#" onclick="return doclink('link-3', 'Subscriber', 'link-3');">Subscriber</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Class netaddr.core.PrettyPrinter=netaddr.core.PrettyPrinter-class.html"><a title="netaddr.core.PrettyPrinter" class="py-name" href="#" onclick="return doclink('link-4', 'PrettyPrinter', 'link-4');">PrettyPrinter</a></tt> </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-5" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-5', 'netaddr', 'link-0');">netaddr</a></tt> <tt class="py-keyword">import</tt> <tt id="link-6" class="py-name" targets="Variable netaddr.AT_INET=netaddr-module.html#AT_INET"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-6', 'AT_INET', 'link-6');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-7" class="py-name" targets="Variable netaddr.AT_INET6=netaddr-module.html#AT_INET6"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-7', 'AT_INET6', 'link-7');">AT_INET6</a></tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-8" class="py-name"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-8', 'netaddr', 'link-0');">netaddr</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Module netaddr.address=netaddr.address-module.html,Method netaddr.eui.IAB.address()=netaddr.eui.IAB-class.html#address,Method netaddr.eui.OUI.address()=netaddr.eui.OUI-class.html#address"><a title="netaddr.address
-netaddr.eui.IAB.address
-netaddr.eui.OUI.address" class="py-name" href="#" onclick="return doclink('link-9', 'address', 'link-9');">address</a></tt> <tt class="py-keyword">import</tt> <tt id="link-10" class="py-name" targets="Class netaddr.address.CIDR=netaddr.address.CIDR-class.html"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-10', 'CIDR', 'link-10');">CIDR</a></tt><tt class="py-op">,</tt> <tt id="link-11" class="py-name" targets="Class netaddr.address.IPRange=netaddr.address.IPRange-class.html"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-11', 'IPRange', 'link-11');">IPRange</a></tt> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"> </tt>
-<a name="L26"></a><tt class="py-lineno"> 26</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-comment">#: Topic based lookup dictionary for IANA information.</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-12" class="py-name" targets="Variable netaddr.ip.IANA_INFO=netaddr.ip-module.html#IANA_INFO"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-12', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"> <tt class="py-string">'IPv4'</tt> <tt class="py-op">:</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-string">'IPv6'</tt> <tt class="py-op">:</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-string">'multicast'</tt> <tt class="py-op">:</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt><tt class="py-op">,</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"><tt class="py-op">}</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="LineRecordParser"></a><div id="LineRecordParser-def"><a name="L36"></a><tt class="py-lineno"> 36</tt> <a class="py-toggle" href="#" id="LineRecordParser-toggle" onclick="return toggle('LineRecordParser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a><tt class="py-op">(</tt><tt class="py-base-class">Publisher</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="LineRecordParser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="LineRecordParser-expanded"><a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"><tt class="py-docstring"> A configurable Parser that understands how to parse line based records. </tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="LineRecordParser.__init__"></a><div id="LineRecordParser.__init__-def"><a name="L40"></a><tt class="py-lineno"> 40</tt> <a class="py-toggle" href="#" id="LineRecordParser.__init__-toggle" onclick="return toggle('LineRecordParser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.LineRecordParser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fh</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="LineRecordParser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LineRecordParser.__init__-expanded"><a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"><tt class="py-docstring"> Constructor. </tt> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L44"></a><tt class="py-lineno"> 44</tt> <tt class="py-line"><tt class="py-docstring"> fh - a valid, open file handle to line based record data. </tt> </tt>
-<a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-13" class="py-name" targets="Class netaddr.ip.LineRecordParser=netaddr.ip.LineRecordParser-class.html"><a title="netaddr.ip.LineRecordParser" class="py-name" href="#" onclick="return doclink('link-13', 'LineRecordParser', 'link-13');">LineRecordParser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-14" class="py-name" targets="Method netaddr.address.Addr.__init__()=netaddr.address.Addr-class.html#__init__,Method netaddr.address.AddrTypeDescriptor.__init__()=netaddr.address.AddrTypeDescriptor-class.html#__init__,Method netaddr.address.AddrValueDescriptor.__init__()=netaddr.address.AddrValueDescriptor-class.html#__init__,Method netaddr.address.CIDR.__init__()=netaddr.address.CIDR-class.html#__init__,Method netaddr.address.EUI.__init__()=netaddr.address.EUI-class.html#__init__,Method netaddr.address.FormatDescriptor.__init__()=netaddr.address.FormatDescriptor-class.html#__init__,Method netaddr.address.IP.__init__()=netaddr.address.IP-class.html#__init__,Method netaddr.address.IPRange.__init__()=netaddr.address.IPRange-class.html#__init__,Method netaddr.address.IPRangeSet.__init__()=netaddr.address.IPRangeSet-class.html#__init__,Method netaddr.address.PrefixLenDescriptor.__init__()=netaddr.address.PrefixLenDescriptor-class.html#__init__,Method netaddr.address.StrategyDescriptor.__init__()=netaddr.address.StrategyDescriptor-class.html#__init__,Method netaddr.address.Wildcard.__init__()=netaddr.address.Wildcard-class.html#__init__,Method netaddr.core.PrettyPrinter.__init__()=netaddr.core.PrettyPrinter-class.html#__init__,Method netaddr.core.Publisher.__init__()=netaddr.core.Publisher-class.html#__init__,Method netaddr.eui.FileIndexer.__init__()=netaddr.eui.FileIndexer-class.html#__init__,Method netaddr.eui.IAB.__init__()=netaddr.eui.IAB-class.html#__init__,Method netaddr.eui.IABIndexParser.__init__()=netaddr.eui.IABIndexParser-class.html#__init__,Method netaddr.eui.OUI.__init__()=netaddr.eui.OUI-class.html#__init__,Method netaddr.eui.OUIIndexParser.__init__()=netaddr.eui.OUIIndexParser-class.html#__init__,Method netaddr.ip.DictUpdater.__init__()=netaddr.ip.DictUpdater-class.html#__init__,Method netaddr.ip.IPv4Parser.__init__()=netaddr.ip.IPv4Parser-class.html#__init__,Method netaddr.ip.IPv6Parser.__init__()=netaddr.ip.IPv6Parser-class.html#__init__,Method netaddr.ip.LineRecordParser.__init__()=netaddr.ip.LineRecordParser-class.html#__init__,Method netaddr.ip.MulticastParser.__init__()=netaddr.ip.MulticastParser-class.html#__init__,Method netaddr.strategy.AddrStrategy.__init__()=netaddr.strategy.AddrStrategy-class.html#__init__,Method netaddr.strategy.EUI48Strategy.__init__()=netaddr.strategy.EUI48Strategy-class.html#__init__,Method netaddr.strategy.IPv4StrategyOpt.__init__()=netaddr.strategy.IPv4StrategyOpt-class.html#__init__,Method netaddr.strategy.IPv4StrategyStd.__init__()=netaddr.strategy.IPv4StrategyStd-class.html#__init__,Method netaddr.strategy.IPv6Strategy.__init__()=netaddr.strategy.IPv6Strategy-class.html#__init__"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-14', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt> <tt class="py-op">=</tt> <tt class="py-name">fh</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">.</tt><tt id="link-15" class="py-name" targets="Method netaddr.core.PrettyPrinter.update()=netaddr.core.PrettyPrinter-class.html#update,Method netaddr.core.Subscriber.update()=netaddr.core.Subscriber-class.html#update,Method netaddr.eui.FileIndexer.update()=netaddr.eui.FileIndexer-class.html#update,Method netaddr.ip.DictUpdater.update()=netaddr.ip.DictUpdater-class.html#update"><a title="netaddr.core.PrettyPrinter.update
-netaddr.core.Subscriber.update
-netaddr.eui.FileIndexer.update
-netaddr.ip.DictUpdater.update" class="py-name" href="#" onclick="return doclink('link-15', 'update', 'link-15');">update</a></tt><tt class="py-op">(</tt><tt class="py-name">kwargs</tt><tt class="py-op">)</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-comment"># Regex used to identify start of lines of interest. </tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'re_start'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_start</tt> <tt class="py-op">=</tt> <tt class="py-string">r'^.*$'</tt> </tt>
-<a name="L54"></a><tt class="py-lineno"> 54</tt> <tt class="py-line"> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-comment"># Regex used to identify line to be parsed within block of interest. </tt> </tt>
-<a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'re_parse_line'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_parse_line</tt> <tt class="py-op">=</tt> <tt class="py-string">r'^.*$'</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"> <tt class="py-comment"># Regex used to identify end of lines of interest. </tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'re_stop'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_stop</tt> <tt class="py-op">=</tt> <tt class="py-string">r'^.*$'</tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"> <tt class="py-comment"># If enabled, skips blank lines after being stripped. </tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'skip_blank_lines'</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__dict__</tt><tt class="py-op">:</tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">skip_blank_lines</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"> </tt>
-<a name="LineRecordParser.parse_line"></a><div id="LineRecordParser.parse_line-def"><a name="L67"></a><tt class="py-lineno"> 67</tt> <a class="py-toggle" href="#" id="LineRecordParser.parse_line-toggle" onclick="return toggle('LineRecordParser.parse_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.LineRecordParser-class.html#parse_line">parse_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="LineRecordParser.parse_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LineRecordParser.parse_line-expanded"><a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> This is the callback method invoked for every line considered valid by </tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"> the line parser's settings. It is usually over-ridden by base classes </tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> to provide specific line parsing and line skipping logic. </tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"> Any line can be vetoed (not passed to registered Subscriber objects) </tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> by simply returning None. </tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">line</tt> </tt>
-</div><a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"> </tt>
-<a name="LineRecordParser.parse"></a><div id="LineRecordParser.parse-def"><a name="L78"></a><tt class="py-lineno"> 78</tt> <a class="py-toggle" href="#" id="LineRecordParser.parse-toggle" onclick="return toggle('LineRecordParser.parse');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.LineRecordParser-class.html#parse">parse</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="LineRecordParser.parse-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="LineRecordParser.parse-expanded"><a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"><tt class="py-docstring"> Parse and normalises records, notifying registered subscribers with </tt> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"><tt class="py-docstring"> record data as it is encountered. </tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">section_start</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">section_end</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">line</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">fh</tt><tt class="py-op">:</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-comment"># Skip blank lines if required. </tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">skip_blank_lines</tt> <tt class="py-keyword">and</tt> <tt class="py-name">line</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-comment"># Entered record section. </tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">section_start</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_start</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> <tt class="py-name">section_start</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L97"></a><tt class="py-lineno"> 97</tt> <tt class="py-line"> </tt>
-<a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-comment"># Exited record section. </tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">section_start</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_stop</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">section_end</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> </tt>
-<a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> <tt class="py-comment"># Stop parsing. </tt> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">section_end</tt><tt class="py-op">:</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"> <tt class="py-comment"># Is this a line of interest? </tt> </tt>
-<a name="L107"></a><tt class="py-lineno">107</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">section_start</tt> <tt class="py-keyword">and</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">re_parse_line</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-keyword">continue</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">section_start</tt><tt class="py-op">:</tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-16" class="py-name" targets="Method netaddr.ip.IPv4Parser.parse_line()=netaddr.ip.IPv4Parser-class.html#parse_line,Method netaddr.ip.IPv6Parser.parse_line()=netaddr.ip.IPv6Parser-class.html#parse_line,Method netaddr.ip.LineRecordParser.parse_line()=netaddr.ip.LineRecordParser-class.html#parse_line,Method netaddr.ip.MulticastParser.parse_line()=netaddr.ip.MulticastParser-class.html#parse_line"><a title="netaddr.ip.IPv4Parser.parse_line
-netaddr.ip.IPv6Parser.parse_line
-netaddr.ip.LineRecordParser.parse_line
-netaddr.ip.MulticastParser.parse_line" class="py-name" href="#" onclick="return doclink('link-16', 'parse_line', 'link-16');">parse_line</a></tt><tt class="py-op">(</tt><tt class="py-name">line</tt><tt class="py-op">)</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"> <tt class="py-comment"># notify subscribers of final record details. </tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-17" class="py-name" targets="Method netaddr.core.Publisher.notify()=netaddr.core.Publisher-class.html#notify"><a title="netaddr.core.Publisher.notify" class="py-name" href="#" onclick="return doclink('link-17', 'notify', 'link-17');">notify</a></tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="IPv4Parser"></a><div id="IPv4Parser-def"><a name="L117"></a><tt class="py-lineno">117</tt> <a class="py-toggle" href="#" id="IPv4Parser-toggle" onclick="return toggle('IPv4Parser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.ip.IPv4Parser-class.html">IPv4Parser</a><tt class="py-op">(</tt><tt class="py-base-class">LineRecordParser</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4Parser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IPv4Parser-expanded"><a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"><tt class="py-docstring"> A LineRecordParser that understands how to parse and retrieve data records </tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"><tt class="py-docstring"> from the IANA IPv4 address space file. </tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"><tt class="py-docstring"> It can be found online here :- </tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"><tt class="py-docstring"> http://www.iana.org/assignments/ipv4-address-space </tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPv4Parser.__init__"></a><div id="IPv4Parser.__init__-def"><a name="L126"></a><tt class="py-lineno">126</tt> <a class="py-toggle" href="#" id="IPv4Parser.__init__-toggle" onclick="return toggle('IPv4Parser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.IPv4Parser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fh</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4Parser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4Parser.__init__-expanded"><a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"><tt class="py-docstring"> Constructor. </tt> </tt>
-<a name="L129"></a><tt class="py-lineno">129</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"><tt class="py-docstring"> fh - a valid, open file handle to an OUI Registry data file. </tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"> kwargs - additional parser options. </tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-18" class="py-name" targets="Class netaddr.ip.IPv4Parser=netaddr.ip.IPv4Parser-class.html"><a title="netaddr.ip.IPv4Parser" class="py-name" href="#" onclick="return doclink('link-18', 'IPv4Parser', 'link-18');">IPv4Parser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-19" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-19', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fh</tt><tt class="py-op">,</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-name">re_start</tt><tt class="py-op">=</tt><tt class="py-string">r'^Prefix'</tt><tt class="py-op">,</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-name">re_parse_line</tt><tt class="py-op">=</tt><tt class="py-string">r'^\d{3}\/\d'</tt><tt class="py-op">,</tt> </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-name">re_stop</tt><tt class="py-op">=</tt><tt class="py-string">r'^Notes\s*$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> <tt class="py-name">skip_blank_lines</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-op">)</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record_widths</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'prefix'</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">8</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'designation'</tt><tt class="py-op">,</tt> <tt class="py-number">8</tt><tt class="py-op">,</tt> <tt class="py-number">37</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'date'</tt><tt class="py-op">,</tt> <tt class="py-number">45</tt><tt class="py-op">,</tt> <tt class="py-number">10</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'whois'</tt><tt class="py-op">,</tt> <tt class="py-number">55</tt><tt class="py-op">,</tt> <tt class="py-number">20</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'status'</tt><tt class="py-op">,</tt> <tt class="py-number">75</tt><tt class="py-op">,</tt> <tt class="py-number">19</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> <tt class="py-op">)</tt> </tt>
-</div><a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> </tt>
-<a name="IPv4Parser.parse_line"></a><div id="IPv4Parser.parse_line-def"><a name="L150"></a><tt class="py-lineno">150</tt> <a class="py-toggle" href="#" id="IPv4Parser.parse_line-toggle" onclick="return toggle('IPv4Parser.parse_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.IPv4Parser-class.html#parse_line">parse_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4Parser.parse_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4Parser.parse_line-expanded"><a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"><tt class="py-docstring"> Callback method invoked for every line considered valid by the line </tt> </tt>
-<a name="L153"></a><tt class="py-lineno">153</tt> <tt class="py-line"><tt class="py-docstring"> parser's settings. </tt> </tt>
-<a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> See base class method for more details. </tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record_widths</tt><tt class="py-op">:</tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"> <tt id="link-20" class="py-name" targets="Variable netaddr.address.Addr.value=netaddr.address.Addr-class.html#value"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-20', 'value', 'link-20');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-name">start</tt><tt class="py-op">:</tt><tt class="py-name">start</tt><tt class="py-op">+</tt><tt class="py-name">width</tt><tt class="py-op">]</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-21" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-21', 'value', 'link-20');">value</a></tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> <tt class="py-comment"># Strip leading zeros from octet. </tt> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'/'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'prefix'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">octet</tt><tt class="py-op">,</tt> <tt class="py-name">prefix</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'prefix'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'/'</tt><tt class="py-op">)</tt> </tt>
-<a name="L165"></a><tt class="py-lineno">165</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'prefix'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">"%d/%d"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">octet</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-string">'status'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">capitalize</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">record</tt> </tt>
-</div></div><a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="IPv6Parser"></a><div id="IPv6Parser-def"><a name="L172"></a><tt class="py-lineno">172</tt> <a class="py-toggle" href="#" id="IPv6Parser-toggle" onclick="return toggle('IPv6Parser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.ip.IPv6Parser-class.html">IPv6Parser</a><tt class="py-op">(</tt><tt class="py-base-class">LineRecordParser</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Parser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IPv6Parser-expanded"><a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"><tt class="py-docstring"> A LineRecordParser that understands how to parse and retrieve data records </tt> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"><tt class="py-docstring"> from the IANA IPv6 address space file. </tt> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"><tt class="py-docstring"> It can be found online here :- </tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"><tt class="py-docstring"> http://www.iana.org/assignments/ipv6-address-space </tt> </tt>
-<a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPv6Parser.__init__"></a><div id="IPv6Parser.__init__-def"><a name="L181"></a><tt class="py-lineno">181</tt> <a class="py-toggle" href="#" id="IPv6Parser.__init__-toggle" onclick="return toggle('IPv6Parser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.IPv6Parser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fh</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Parser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Parser.__init__-expanded"><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"><tt class="py-docstring"> Constructor. </tt> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> fh - a valid, open file handle to an OUI Registry data file. </tt> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"><tt class="py-docstring"> kwargs - additional parser options. </tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-22" class="py-name" targets="Class netaddr.ip.IPv6Parser=netaddr.ip.IPv6Parser-class.html"><a title="netaddr.ip.IPv6Parser" class="py-name" href="#" onclick="return doclink('link-22', 'IPv6Parser', 'link-22');">IPv6Parser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-23" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-23', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fh</tt><tt class="py-op">,</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt class="py-name">re_start</tt><tt class="py-op">=</tt><tt class="py-string">r'^IPv6 Prefix'</tt><tt class="py-op">,</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-name">re_parse_line</tt><tt class="py-op">=</tt><tt class="py-string">r'^[A-F0-9]+::\/\d+'</tt><tt class="py-op">,</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt class="py-name">re_stop</tt><tt class="py-op">=</tt><tt class="py-string">r'^Notes:\s*$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">skip_blank_lines</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record_widths</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'prefix'</tt><tt class="py-op">,</tt> <tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-number">22</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'allocation'</tt><tt class="py-op">,</tt> <tt class="py-number">22</tt><tt class="py-op">,</tt> <tt class="py-number">24</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-string">'reference'</tt><tt class="py-op">,</tt> <tt class="py-number">46</tt><tt class="py-op">,</tt> <tt class="py-number">15</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> </tt>
-<a name="IPv6Parser.parse_line"></a><div id="IPv6Parser.parse_line-def"><a name="L201"></a><tt class="py-lineno">201</tt> <a class="py-toggle" href="#" id="IPv6Parser.parse_line-toggle" onclick="return toggle('IPv6Parser.parse_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.IPv6Parser-class.html#parse_line">parse_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Parser.parse_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Parser.parse_line-expanded"><a name="L202"></a><tt class="py-lineno">202</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"><tt class="py-docstring"> Callback method invoked for every line considered valid by the line </tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"><tt class="py-docstring"> parser's settings. </tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"><tt class="py-docstring"> See base class method for more details. </tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"> <tt class="py-name">record</tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">key</tt><tt class="py-op">,</tt> <tt class="py-name">start</tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">record_widths</tt><tt class="py-op">:</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt id="link-24" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-24', 'value', 'link-20');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-name">start</tt><tt class="py-op">:</tt><tt class="py-name">start</tt><tt class="py-op">+</tt><tt class="py-name">width</tt><tt class="py-op">]</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt id="link-25" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-25', 'value', 'link-20');">value</a></tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt class="py-comment"># Remove square brackets from reference field. </tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">lstrip</tt><tt class="py-op">(</tt><tt class="py-string">'['</tt><tt class="py-op">)</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">record</tt><tt class="py-op">[</tt><tt class="py-name">key</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-string">']'</tt><tt class="py-op">)</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">record</tt> </tt>
-</div></div><a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"><tt class="py-comment">#----------------------------------------------------------------------------- </tt> </tt>
-<a name="MulticastParser"></a><div id="MulticastParser-def"><a name="L219"></a><tt class="py-lineno">219</tt> <a class="py-toggle" href="#" id="MulticastParser-toggle" onclick="return toggle('MulticastParser');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.ip.MulticastParser-class.html">MulticastParser</a><tt class="py-op">(</tt><tt class="py-base-class">LineRecordParser</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MulticastParser-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="MulticastParser-expanded"><a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"><tt class="py-docstring"> A LineParser that knows how to process the IANA IPv4 multicast address </tt> </tt>
-<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"><tt class="py-docstring"> allocation file. </tt> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt> <tt class="py-line"><tt class="py-docstring"> It can be found online here :- </tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt class="py-docstring"> http://www.iana.org/assignments/multicast-addresses </tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="MulticastParser.__init__"></a><div id="MulticastParser.__init__-def"><a name="L228"></a><tt class="py-lineno">228</tt> <a class="py-toggle" href="#" id="MulticastParser.__init__-toggle" onclick="return toggle('MulticastParser.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.MulticastParser-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">fh</tt><tt class="py-op">,</tt> <tt class="py-op">**</tt><tt class="py-param">kwargs</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MulticastParser.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MulticastParser.__init__-expanded"><a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"> Constructor. </tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> fh - a valid, open file handle to an OUI Registry data file. </tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"><tt class="py-docstring"> kwargs - additional parser options. </tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-26" class="py-name" targets="Class netaddr.ip.MulticastParser=netaddr.ip.MulticastParser-class.html"><a title="netaddr.ip.MulticastParser" class="py-name" href="#" onclick="return doclink('link-26', 'MulticastParser', 'link-26');">MulticastParser</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-27" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-27', '__init__', 'link-14');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">fh</tt><tt class="py-op">,</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"> <tt class="py-name">re_start</tt><tt class="py-op">=</tt><tt class="py-string">r'^Registry:'</tt><tt class="py-op">,</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">re_parse_line</tt><tt class="py-op">=</tt><tt class="py-string">r'^\d+\.\d+\.\d+\.\d+'</tt><tt class="py-op">,</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-name">re_stop</tt><tt class="py-op">=</tt><tt class="py-string">r'^Relative'</tt><tt class="py-op">,</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">skip_blank_lines</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> </tt>
-<a name="MulticastParser.normalise_addr"></a><div id="MulticastParser.normalise_addr-def"><a name="L243"></a><tt class="py-lineno">243</tt> <a class="py-toggle" href="#" id="MulticastParser.normalise_addr-toggle" onclick="return toggle('MulticastParser.normalise_addr');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.MulticastParser-class.html#normalise_addr">normalise_addr</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MulticastParser.normalise_addr-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MulticastParser.normalise_addr-expanded"><a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"><tt class="py-docstring"> Removes variations from address entries found in this particular file. </tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'-'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">a1</tt><tt class="py-op">,</tt> <tt class="py-name">a2</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">o1</tt> <tt class="py-op">=</tt> <tt class="py-name">a1</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">o2</tt> <tt class="py-op">=</tt> <tt class="py-name">a2</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s-%s"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">o1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">o2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L254"></a><tt class="py-lineno">254</tt> <tt class="py-line"> <tt class="py-name">o1</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'.'</tt><tt class="py-op">)</tt> </tt>
-<a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">o1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"> </tt>
-<a name="MulticastParser.parse_line"></a><div id="MulticastParser.parse_line-def"><a name="L257"></a><tt class="py-lineno">257</tt> <a class="py-toggle" href="#" id="MulticastParser.parse_line-toggle" onclick="return toggle('MulticastParser.parse_line');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.MulticastParser-class.html#parse_line">parse_line</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">line</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="MulticastParser.parse_line-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="MulticastParser.parse_line-expanded"><a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"> <tt class="py-docstring">""" </tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> Callback method invoked for every line considered valid by the line </tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> parser's settings. </tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"><tt class="py-docstring"> </tt> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"><tt class="py-docstring"> See base class method for more details. </tt> </tt>
-<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-name">index</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">.</tt><tt class="py-name">find</tt><tt class="py-op">(</tt><tt class="py-string">'['</tt><tt class="py-op">)</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">index</tt> <tt class="py-op">!=</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-name">line</tt> <tt class="py-op">=</tt> <tt class="py-name">line</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-name">index</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-name">descr</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">.</tt><tt class="py-name">strip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-string">r'^([\d.]+(?:\s*-\s*[\d.]+)?)\s+(.+)$'</tt><tt class="py-op">,</tt> <tt class="py-name">line</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> <tt class="py-name">addr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-28" class="py-name" targets="Method netaddr.ip.MulticastParser.normalise_addr()=netaddr.ip.MulticastParser-class.html#normalise_addr"><a title="netaddr.ip.MulticastParser.normalise_addr" class="py-name" href="#" onclick="return doclink('link-28', 'normalise_addr', 'link-28');">normalise_addr</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-name">descr</tt> <tt class="py-op">=</tt> <tt class="py-string">' '</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">descr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> <tt class="py-name">descr</tt> <tt class="py-op">=</tt> <tt class="py-name">descr</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">'Date registered'</tt> <tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">rstrip</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">dict</tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="netaddr.address
-netaddr.eui.IAB.address
-netaddr.eui.OUI.address" class="py-name" href="#" onclick="return doclink('link-29', 'address', 'link-9');">address</a></tt><tt class="py-op">=</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-name">descr</tt><tt class="py-op">=</tt><tt class="py-name">descr</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="DictUpdater"></a><div id="DictUpdater-def"><a name="L276"></a><tt class="py-lineno">276</tt> <a class="py-toggle" href="#" id="DictUpdater-toggle" onclick="return toggle('DictUpdater');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.ip.DictUpdater-class.html">DictUpdater</a><tt class="py-op">(</tt><tt class="py-base-class">Subscriber</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="DictUpdater-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="DictUpdater-expanded"><a name="L277"></a><tt class="py-lineno">277</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"><tt class="py-docstring"> Concrete Subscriber that inserts records received from a Publisher into a</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"><tt class="py-docstring"> dictionary.</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="DictUpdater.__init__"></a><div id="DictUpdater.__init__-def"><a name="L281"></a><tt class="py-lineno">281</tt> <a class="py-toggle" href="#" id="DictUpdater.__init__-toggle" onclick="return toggle('DictUpdater.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.DictUpdater-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">dct</tt><tt class="py-op">,</tt> <tt class="py-param">topic</tt><tt class="py-op">,</tt> <tt class="py-param">unique_key</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="DictUpdater.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DictUpdater.__init__-expanded"><a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"><tt class="py-docstring"> dct - lookup dict or dict like object to insert records into.</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"><tt class="py-docstring"> topic - high-level category name of data to be processed.</tt> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"><tt class="py-docstring"> unique_key - key name in data dict that uniquely identifies it.</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dct</tt> <tt class="py-op">=</tt> <tt class="py-name">dct</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topic</tt> <tt class="py-op">=</tt> <tt class="py-name">topic</tt> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">unique_key</tt> <tt class="py-op">=</tt> <tt class="py-name">unique_key</tt> </tt>
-</div><a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> </tt>
-<a name="DictUpdater.update"></a><div id="DictUpdater.update-def"><a name="L295"></a><tt class="py-lineno">295</tt> <a class="py-toggle" href="#" id="DictUpdater.update-toggle" onclick="return toggle('DictUpdater.update');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip.DictUpdater-class.html#update">update</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">data</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="DictUpdater.update-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="DictUpdater.update-expanded"><a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"><tt class="py-docstring"> Callback function used by Publisher to notify this Subscriber about</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"><tt class="py-docstring"> an update. Stores topic based information into dictionary passed to</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"><tt class="py-docstring"> constructor.</tt> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> <tt class="py-name">data_id</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt><tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">unique_key</tt><tt class="py-op">]</tt> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> </tt>
-<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topic</tt> <tt class="py-op">==</tt> <tt class="py-string">'IPv4'</tt><tt class="py-op">:</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"> <tt id="link-30" class="py-name" targets="Method netaddr.address.IP.cidr()=netaddr.address.IP-class.html#cidr"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-30', 'cidr', 'link-30');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-31" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-31', 'CIDR', 'link-10');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">data_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dct</tt><tt class="py-op">[</tt><tt id="link-32" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-32', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
-<a name="L306"></a><tt class="py-lineno">306</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topic</tt> <tt class="py-op">==</tt> <tt class="py-string">'IPv6'</tt><tt class="py-op">:</tt> </tt>
-<a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt id="link-33" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-33', 'cidr', 'link-30');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-34" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-34', 'CIDR', 'link-10');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-name">data_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dct</tt><tt class="py-op">[</tt><tt id="link-35" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-35', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">topic</tt> <tt class="py-op">==</tt> <tt class="py-string">'multicast'</tt><tt class="py-op">:</tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"> <tt id="link-36" class="py-name" targets="Method netaddr.address.IP.iprange()=netaddr.address.IP-class.html#iprange,Method netaddr.address.IPRange.iprange()=netaddr.address.IPRange-class.html#iprange"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-36', 'iprange', 'link-36');">iprange</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'-'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">data_id</tt><tt class="py-op">:</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"> <tt class="py-op">(</tt><tt id="link-37" class="py-name" targets="Variable netaddr.address.IPRange.first=netaddr.address.IPRange-class.html#first"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-37', 'first', 'link-37');">first</a></tt><tt class="py-op">,</tt> <tt id="link-38" class="py-name" targets="Variable netaddr.address.IPRange.last=netaddr.address.IPRange-class.html#last"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-38', 'last', 'link-38');">last</a></tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">data_id</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'-'</tt><tt class="py-op">)</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-39', 'iprange', 'link-36');">iprange</a></tt> <tt class="py-op">=</tt> <tt id="link-40" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-40', 'IPRange', 'link-11');">IPRange</a></tt><tt class="py-op">(</tt><tt id="link-41" class="py-name"><a title="netaddr.address.IPRange.first" class="py-name" href="#" onclick="return doclink('link-41', 'first', 'link-37');">first</a></tt><tt class="py-op">,</tt> <tt id="link-42" class="py-name"><a title="netaddr.address.IPRange.last" class="py-name" href="#" onclick="return doclink('link-42', 'last', 'link-38');">last</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-43', 'iprange', 'link-36');">iprange</a></tt> <tt class="py-op">=</tt> <tt id="link-44" class="py-name"><a title="netaddr.address.IPRange" class="py-name" href="#" onclick="return doclink('link-44', 'IPRange', 'link-11');">IPRange</a></tt><tt class="py-op">(</tt><tt class="py-name">data_id</tt><tt class="py-op">,</tt> <tt class="py-name">data_id</tt><tt class="py-op">)</tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">dct</tt><tt class="py-op">[</tt><tt id="link-45" class="py-name"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-45', 'iprange', 'link-36');">iprange</a></tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-name">data</tt> </tt>
-</div></div><a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="load_iana_info"></a><div id="load_iana_info-def"><a name="L319"></a><tt class="py-lineno">319</tt> <a class="py-toggle" href="#" id="load_iana_info-toggle" onclick="return toggle('load_iana_info');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip-module.html#load_iana_info">load_iana_info</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="load_iana_info-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="load_iana_info-expanded"><a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"><tt class="py-docstring"> Parse and load internal IANA data lookups with the latest information from</tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"><tt class="py-docstring"> data files.</tt> </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-name">PATH</tt> <tt class="py-op">=</tt> <tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">dirname</tt><tt class="py-op">(</tt><tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt id="link-46" class="py-name" targets="Method netaddr.address.IP.ipv4()=netaddr.address.IP-class.html#ipv4"><a title="netaddr.address.IP.ipv4" class="py-name" href="#" onclick="return doclink('link-46', 'ipv4', 'link-46');">ipv4</a></tt> <tt class="py-op">=</tt> <tt id="link-47" class="py-name"><a title="netaddr.ip.IPv4Parser" class="py-name" href="#" onclick="return doclink('link-47', 'IPv4Parser', 'link-18');">IPv4Parser</a></tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">PATH</tt><tt class="py-op">,</tt> <tt class="py-string">'ipv4-address-space'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt id="link-48" class="py-name"><a title="netaddr.address.IP.ipv4" class="py-name" href="#" onclick="return doclink('link-48', 'ipv4', 'link-46');">ipv4</a></tt><tt class="py-op">.</tt><tt id="link-49" class="py-name" targets="Method netaddr.core.Publisher.attach()=netaddr.core.Publisher-class.html#attach"><a title="netaddr.core.Publisher.attach" class="py-name" href="#" onclick="return doclink('link-49', 'attach', 'link-49');">attach</a></tt><tt class="py-op">(</tt><tt id="link-50" class="py-name" targets="Class netaddr.ip.DictUpdater=netaddr.ip.DictUpdater-class.html"><a title="netaddr.ip.DictUpdater" class="py-name" href="#" onclick="return doclink('link-50', 'DictUpdater', 'link-50');">DictUpdater</a></tt><tt class="py-op">(</tt><tt id="link-51" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-51', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv4'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">'IPv4'</tt><tt class="py-op">,</tt> <tt class="py-string">'prefix'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt id="link-52" class="py-name"><a title="netaddr.address.IP.ipv4" class="py-name" href="#" onclick="return doclink('link-52', 'ipv4', 'link-46');">ipv4</a></tt><tt class="py-op">.</tt><tt id="link-53" class="py-name" targets="Method netaddr.eui.IABIndexParser.parse()=netaddr.eui.IABIndexParser-class.html#parse,Method netaddr.eui.OUIIndexParser.parse()=netaddr.eui.OUIIndexParser-class.html#parse,Method netaddr.ip.LineRecordParser.parse()=netaddr.ip.LineRecordParser-class.html#parse"><a title="netaddr.eui.IABIndexParser.parse
-netaddr.eui.OUIIndexParser.parse
-netaddr.ip.LineRecordParser.parse" class="py-name" href="#" onclick="return doclink('link-53', 'parse', 'link-53');">parse</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> </tt>
-<a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> <tt id="link-54" class="py-name" targets="Method netaddr.address.IP.ipv6()=netaddr.address.IP-class.html#ipv6"><a title="netaddr.address.IP.ipv6" class="py-name" href="#" onclick="return doclink('link-54', 'ipv6', 'link-54');">ipv6</a></tt> <tt class="py-op">=</tt> <tt id="link-55" class="py-name"><a title="netaddr.ip.IPv6Parser" class="py-name" href="#" onclick="return doclink('link-55', 'IPv6Parser', 'link-22');">IPv6Parser</a></tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">PATH</tt><tt class="py-op">,</tt> <tt class="py-string">'ipv6-address-space'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L331"></a><tt class="py-lineno">331</tt> <tt class="py-line"> <tt id="link-56" class="py-name"><a title="netaddr.address.IP.ipv6" class="py-name" href="#" onclick="return doclink('link-56', 'ipv6', 'link-54');">ipv6</a></tt><tt class="py-op">.</tt><tt id="link-57" class="py-name"><a title="netaddr.core.Publisher.attach" class="py-name" href="#" onclick="return doclink('link-57', 'attach', 'link-49');">attach</a></tt><tt class="py-op">(</tt><tt id="link-58" class="py-name"><a title="netaddr.ip.DictUpdater" class="py-name" href="#" onclick="return doclink('link-58', 'DictUpdater', 'link-50');">DictUpdater</a></tt><tt class="py-op">(</tt><tt id="link-59" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-59', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv6'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">'IPv6'</tt><tt class="py-op">,</tt> <tt class="py-string">'prefix'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt id="link-60" class="py-name"><a title="netaddr.address.IP.ipv6" class="py-name" href="#" onclick="return doclink('link-60', 'ipv6', 'link-54');">ipv6</a></tt><tt class="py-op">.</tt><tt id="link-61" class="py-name"><a title="netaddr.eui.IABIndexParser.parse
-netaddr.eui.OUIIndexParser.parse
-netaddr.ip.LineRecordParser.parse" class="py-name" href="#" onclick="return doclink('link-61', 'parse', 'link-53');">parse</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"> <tt class="py-name">mcast</tt> <tt class="py-op">=</tt> <tt id="link-62" class="py-name"><a title="netaddr.ip.MulticastParser" class="py-name" href="#" onclick="return doclink('link-62', 'MulticastParser', 'link-26');">MulticastParser</a></tt><tt class="py-op">(</tt><tt class="py-name">open</tt><tt class="py-op">(</tt><tt class="py-name">_path</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">PATH</tt><tt class="py-op">,</tt> <tt class="py-string">'multicast-addresses'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"> <tt class="py-name">mcast</tt><tt class="py-op">.</tt><tt id="link-63" class="py-name"><a title="netaddr.core.Publisher.attach" class="py-name" href="#" onclick="return doclink('link-63', 'attach', 'link-49');">attach</a></tt><tt class="py-op">(</tt><tt id="link-64" class="py-name"><a title="netaddr.ip.DictUpdater" class="py-name" href="#" onclick="return doclink('link-64', 'DictUpdater', 'link-50');">DictUpdater</a></tt><tt class="py-op">(</tt><tt id="link-65" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-65', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'multicast'</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-string">'multicast'</tt><tt class="py-op">,</tt> <tt class="py-string">'address'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"> <tt class="py-name">mcast</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name"><a title="netaddr.eui.IABIndexParser.parse
-netaddr.eui.OUIIndexParser.parse
-netaddr.ip.LineRecordParser.parse" class="py-name" href="#" onclick="return doclink('link-66', 'parse', 'link-53');">parse</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="query"></a><div id="query-def"><a name="L339"></a><tt class="py-lineno">339</tt> <a class="py-toggle" href="#" id="query-toggle" onclick="return toggle('query');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.ip-module.html#query">query</a><tt class="py-op">(</tt><tt class="py-param">ip_addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="query-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="query-expanded"><a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"><tt class="py-docstring"> Returns informational data specific to this IP address.</tt> </tt>
-<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt id="link-67" class="py-name" targets="Method netaddr.address.EUI.info()=netaddr.address.EUI-class.html#info,Method netaddr.address.IP.info()=netaddr.address.IP-class.html#info"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-67', 'info', 'link-67');">info</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt><tt class="py-op">}</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Variable netaddr.address.Addr.addr_type=netaddr.address.Addr-class.html#addr_type,Variable netaddr.address.CIDR.addr_type=netaddr.address.CIDR-class.html#addr_type,Variable netaddr.address.EUI.addr_type=netaddr.address.EUI-class.html#addr_type,Variable netaddr.address.IP.addr_type=netaddr.address.IP-class.html#addr_type,Variable netaddr.address.IPRange.addr_type=netaddr.address.IPRange-class.html#addr_type,Variable netaddr.address.Wildcard.addr_type=netaddr.address.Wildcard-class.html#addr_type"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-68', 'addr_type', 'link-68');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-69" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-69', 'AT_INET', 'link-6');">AT_INET</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-70" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-70', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">,</tt> <tt class="py-name">record</tt> <tt class="py-keyword">in</tt> <tt id="link-71" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-71', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv4'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ip_addr</tt> <tt class="py-keyword">in</tt> <tt id="link-72" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-72', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"> <tt id="link-73" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-73', 'info', 'link-67');">info</a></tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'IPv4'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"> <tt id="link-74" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-74', 'info', 'link-67');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv4'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name" targets="Method netaddr.address.IP.is_multicast()=netaddr.address.IP-class.html#is_multicast"><a title="netaddr.address.IP.is_multicast" class="py-name" href="#" onclick="return doclink('link-75', 'is_multicast', 'link-75');">is_multicast</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-76" class="py-name"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-76', 'iprange', 'link-36');">iprange</a></tt><tt class="py-op">,</tt> <tt class="py-name">record</tt> <tt class="py-keyword">in</tt> <tt id="link-77" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-77', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'multicast'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ip_addr</tt> <tt class="py-keyword">in</tt> <tt id="link-78" class="py-name"><a title="netaddr.address.IP.iprange
-netaddr.address.IPRange.iprange" class="py-name" href="#" onclick="return doclink('link-78', 'iprange', 'link-36');">iprange</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"> <tt id="link-79" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-79', 'info', 'link-67');">info</a></tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'Multicast'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"> <tt id="link-80" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-80', 'info', 'link-67');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">'Multicast'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">ip_addr</tt><tt class="py-op">.</tt><tt id="link-81" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-81', 'addr_type', 'link-68');">addr_type</a></tt> <tt class="py-op">==</tt> <tt id="link-82" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-82', 'AT_INET6', 'link-7');">AT_INET6</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-83" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-83', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">,</tt> <tt class="py-name">record</tt> <tt class="py-keyword">in</tt> <tt id="link-84" class="py-name"><a title="netaddr.ip.IANA_INFO" class="py-name" href="#" onclick="return doclink('link-84', 'IANA_INFO', 'link-12');">IANA_INFO</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv6'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">items</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ip_addr</tt> <tt class="py-keyword">in</tt> <tt id="link-85" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-85', 'cidr', 'link-30');">cidr</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> <tt id="link-86" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-86', 'info', 'link-67');">info</a></tt><tt class="py-op">.</tt><tt class="py-name">setdefault</tt><tt class="py-op">(</tt><tt class="py-string">'IPv6'</tt><tt class="py-op">,</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt id="link-87" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-87', 'info', 'link-67');">info</a></tt><tt class="py-op">[</tt><tt class="py-string">'IPv6'</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">record</tt><tt class="py-op">)</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-88" class="py-name"><a title="netaddr.address.EUI.info
-netaddr.address.IP.info" class="py-name" href="#" onclick="return doclink('link-88', 'info', 'link-67');">info</a></tt> </tt>
-</div><a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"><tt class="py-comment"># On module import, read IANA data files and populate lookups dict.</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-89" class="py-name" targets="Function netaddr.ip.load_iana_info()=netaddr.ip-module.html#load_iana_info"><a title="netaddr.ip.load_iana_info" class="py-name" href="#" onclick="return doclink('link-89', 'load_iana_info', 'link-89');">load_iana_info</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:07 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip.DictUpdater-class.html b/docs/api/netaddr.ip.DictUpdater-class.html
deleted file mode 100644
index 96648d0..0000000
--- a/docs/api/netaddr.ip.DictUpdater-class.html
+++ /dev/null
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip.DictUpdater</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.ip-module.html">Package&nbsp;ip</a> ::
- Class&nbsp;DictUpdater
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip.DictUpdater-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DictUpdater</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html#DictUpdater">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Subscriber-class.html">core.Subscriber</a> --+
- |
- <strong class="uidshort">DictUpdater</strong>
-</pre>
-
-<hr />
-<p>Concrete Subscriber that inserts records received from a Publisher
- into a dictionary.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.DictUpdater-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">dct</span>,
- <span class="summary-sig-arg">topic</span>,
- <span class="summary-sig-arg">unique_key</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#DictUpdater.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.DictUpdater-class.html#update" class="summary-sig-name">update</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">data</span>)</span><br />
- Callback function used by Publisher to notify this Subscriber about
- an update.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#DictUpdater.update">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">dct</span>,
- <span class="sig-arg">topic</span>,
- <span class="sig-arg">unique_key</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#DictUpdater.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>dct - lookup dict or dict like object to insert records into.</p>
- <p>topic - high-level category name of data to be processed.</p>
- <p>unique_key - key name in data dict that uniquely identifies it.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="update"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">update</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">data</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#DictUpdater.update">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Callback function used by Publisher to notify this Subscriber about an
- update. Stores topic based information into dictionary passed to
- constructor.</p>
- <dl class="fields">
- <dt>Overrides:
- <a href="netaddr.core.Subscriber-class.html#update">core.Subscriber.update</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip.IPv4Parser-class.html b/docs/api/netaddr.ip.IPv4Parser-class.html
deleted file mode 100644
index b7bcf4b..0000000
--- a/docs/api/netaddr.ip.IPv4Parser-class.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip.IPv4Parser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.ip-module.html">Package&nbsp;ip</a> ::
- Class&nbsp;IPv4Parser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip.IPv4Parser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPv4Parser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv4Parser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a> --+
- |
- <strong class="uidshort">IPv4Parser</strong>
-</pre>
-
-<hr />
-<p>A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv4 address space file.</p>
- <p>It can be found online here :-</p>
- <p>http://www.iana.org/assignments/ipv4-address-space</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.IPv4Parser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fh</span>,
- <span class="summary-sig-arg">**kwargs</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#IPv4Parser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.IPv4Parser-class.html#parse_line" class="summary-sig-name">parse_line</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">line</span>)</span><br />
- Callback method invoked for every line considered valid by the line
- parser's settings.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#IPv4Parser.parse_line">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a></code></b>:
- <code><a href="netaddr.ip.LineRecordParser-class.html#parse">parse</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fh</span>,
- <span class="sig-arg">**kwargs</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv4Parser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>fh - a valid, open file handle to an OUI Registry data file.</p>
- <p>kwargs - additional parser options.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="parse_line"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">parse_line</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">line</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv4Parser.parse_line">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Callback method invoked for every line considered valid by the line
- parser's settings.</p>
- <p>See base class method for more details.</p>
- <dl class="fields">
- <dt>Overrides:
- <a href="netaddr.ip.LineRecordParser-class.html#parse_line">LineRecordParser.parse_line</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip.IPv6Parser-class.html b/docs/api/netaddr.ip.IPv6Parser-class.html
deleted file mode 100644
index b1a610c..0000000
--- a/docs/api/netaddr.ip.IPv6Parser-class.html
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip.IPv6Parser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.ip-module.html">Package&nbsp;ip</a> ::
- Class&nbsp;IPv6Parser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip.IPv6Parser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPv6Parser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv6Parser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a> --+
- |
- <strong class="uidshort">IPv6Parser</strong>
-</pre>
-
-<hr />
-<p>A LineRecordParser that understands how to parse and retrieve data
- records from the IANA IPv6 address space file.</p>
- <p>It can be found online here :-</p>
- <p>http://www.iana.org/assignments/ipv6-address-space</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.IPv6Parser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fh</span>,
- <span class="summary-sig-arg">**kwargs</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#IPv6Parser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.IPv6Parser-class.html#parse_line" class="summary-sig-name">parse_line</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">line</span>)</span><br />
- Callback method invoked for every line considered valid by the line
- parser's settings.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#IPv6Parser.parse_line">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a></code></b>:
- <code><a href="netaddr.ip.LineRecordParser-class.html#parse">parse</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fh</span>,
- <span class="sig-arg">**kwargs</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv6Parser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>fh - a valid, open file handle to an OUI Registry data file.</p>
- <p>kwargs - additional parser options.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="parse_line"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">parse_line</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">line</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#IPv6Parser.parse_line">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Callback method invoked for every line considered valid by the line
- parser's settings.</p>
- <p>See base class method for more details.</p>
- <dl class="fields">
- <dt>Overrides:
- <a href="netaddr.ip.LineRecordParser-class.html#parse_line">LineRecordParser.parse_line</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip.LineRecordParser-class.html b/docs/api/netaddr.ip.LineRecordParser-class.html
deleted file mode 100644
index 930346c..0000000
--- a/docs/api/netaddr.ip.LineRecordParser-class.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip.LineRecordParser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.ip-module.html">Package&nbsp;ip</a> ::
- Class&nbsp;LineRecordParser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip.LineRecordParser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class LineRecordParser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <strong class="uidshort">LineRecordParser</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.ip.IPv4Parser-class.html">IPv4Parser</a></li><li>, <a href="netaddr.ip.IPv6Parser-class.html">IPv6Parser</a></li><li>, <a href="netaddr.ip.MulticastParser-class.html">MulticastParser</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>A configurable Parser that understands how to parse line based
- records.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.LineRecordParser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fh</span>,
- <span class="summary-sig-arg">**kwargs</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.LineRecordParser-class.html#parse_line" class="summary-sig-name">parse_line</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">line</span>)</span><br />
- This is the callback method invoked for every line considered valid
- by the line parser's settings.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser.parse_line">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="parse"></a><span class="summary-sig-name">parse</span>(<span class="summary-sig-arg">self</span>)</span><br />
- Parse and normalises records, notifying registered subscribers with
- record data as it is encountered.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser.parse">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fh</span>,
- <span class="sig-arg">**kwargs</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>fh - a valid, open file handle to line based record data.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="parse_line"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">parse_line</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">line</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#LineRecordParser.parse_line">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>This is the callback method invoked for every line considered valid by
- the line parser's settings. It is usually over-ridden by base classes to
- provide specific line parsing and line skipping logic.</p>
- <p>Any line can be vetoed (not passed to registered Subscriber objects)
- by simply returning None.</p>
- <dl class="fields">
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.ip.MulticastParser-class.html b/docs/api/netaddr.ip.MulticastParser-class.html
deleted file mode 100644
index a195eef..0000000
--- a/docs/api/netaddr.ip.MulticastParser-class.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.ip.MulticastParser</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.ip-module.html">Package&nbsp;ip</a> ::
- Class&nbsp;MulticastParser
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.ip.MulticastParser-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class MulticastParser</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.core.Publisher-class.html">core.Publisher</a> --+
- |
- <a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a> --+
- |
- <strong class="uidshort">MulticastParser</strong>
-</pre>
-
-<hr />
-<p>A LineParser that knows how to process the IANA IPv4 multicast address
- allocation file.</p>
- <p>It can be found online here :-</p>
- <p>http://www.iana.org/assignments/multicast-addresses</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.MulticastParser-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">fh</span>,
- <span class="summary-sig-arg">**kwargs</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="normalise_addr"></a><span class="summary-sig-name">normalise_addr</span>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Removes variations from address entries found in this particular
- file.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser.normalise_addr">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.ip.MulticastParser-class.html#parse_line" class="summary-sig-name">parse_line</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">line</span>)</span><br />
- Callback method invoked for every line considered valid by the line
- parser's settings.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser.parse_line">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.ip.LineRecordParser-class.html">LineRecordParser</a></code></b>:
- <code><a href="netaddr.ip.LineRecordParser-class.html#parse">parse</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.core.Publisher-class.html">core.Publisher</a></code></b>:
- <code><a href="netaddr.core.Publisher-class.html#attach">attach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#detach">detach</a></code>,
- <code><a href="netaddr.core.Publisher-class.html#notify">notify</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__repr__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">fh</span>,
- <span class="sig-arg">**kwargs</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <p>fh - a valid, open file handle to an OUI Registry data file.</p>
- <p>kwargs - additional parser options.</p>
- <dl class="fields">
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="parse_line"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">parse_line</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">line</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.ip-pysrc.html#MulticastParser.parse_line">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Callback method invoked for every line considered valid by the line
- parser's settings.</p>
- <p>See base class method for more details.</p>
- <dl class="fields">
- <dt>Overrides:
- <a href="netaddr.ip.LineRecordParser-class.html#parse_line">LineRecordParser.parse_line</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.misc-module.html b/docs/api/netaddr.misc-module.html
deleted file mode 100644
index 4adefe7..0000000
--- a/docs/api/netaddr.misc-module.html
+++ /dev/null
@@ -1,196 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.misc</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;misc
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.misc-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module misc</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.misc-pysrc.html">source&nbsp;code</a></span></p>
-<p>Miscellanous functions and classes. Do not rely on anything in here as
- it is liable to change, move or be deleted with each release.</p>
-
-<!-- ==================== FUNCTIONS ==================== -->
-<a name="section-Functions"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Functions</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="ipv4_cidr_prefixes"></a><span class="summary-sig-name">ipv4_cidr_prefixes</span>()</span><br />
- Returns a recordset (list of dicts) of host/network breakdown for
- IPv4 using all of the various CIDR prefixes.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.misc-pysrc.html#ipv4_cidr_prefixes">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="ipv6_cidr_prefixes"></a><span class="summary-sig-name">ipv6_cidr_prefixes</span>()</span><br />
- Returns a recordset (list of dicts) of host/network breakdown for
- IPv6 using all of the various CIDR prefixes.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.misc-pysrc.html#ipv6_cidr_prefixes">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="print_ipv4_cidr_prefixes"></a><span class="summary-sig-name">print_ipv4_cidr_prefixes</span>()</span><br />
- Prints a table to stdout of host/network breakdown for IPv4 using
- CIDR notation.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.misc-pysrc.html#print_ipv4_cidr_prefixes">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="print_ipv6_cidr_prefixes"></a><span class="summary-sig-name">print_ipv6_cidr_prefixes</span>()</span><br />
- Prints a table to stdout of host/network breakdown for IPv6 using
- CIDR notation.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.misc-pysrc.html#print_ipv6_cidr_prefixes">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.misc-pysrc.html b/docs/api/netaddr.misc-pysrc.html
deleted file mode 100644
index 262bbb4..0000000
--- a/docs/api/netaddr.misc-pysrc.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.misc</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;misc
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.misc-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.misc-module.html">Module netaddr.misc</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved.</tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details.</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">"""</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">Miscellanous functions and classes. Do not rely on anything in here as it is</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">liable to change, move or be deleted with each release.</tt> </tt>
-<a name="L10"></a><tt class="py-lineno">10</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L11"></a><tt class="py-lineno">11</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">pprint</tt> </tt>
-<a name="L12"></a><tt class="py-lineno">12</tt> <tt class="py-line"> </tt>
-<a name="L13"></a><tt class="py-lineno">13</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-0" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-0', 'netaddr', 'link-0');">netaddr</a></tt> <tt class="py-keyword">import</tt> <tt id="link-1" class="py-name" targets="Class netaddr.address.CIDR=netaddr.address.CIDR-class.html"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-1', 'CIDR', 'link-1');">CIDR</a></tt><tt class="py-op">,</tt> <tt id="link-2" class="py-name" targets="Class netaddr.address.Wildcard=netaddr.address.Wildcard-class.html"><a title="netaddr.address.Wildcard" class="py-name" href="#" onclick="return doclink('link-2', 'Wildcard', 'link-2');">Wildcard</a></tt> </tt>
-<a name="L14"></a><tt class="py-lineno">14</tt> <tt class="py-line"> </tt>
-<a name="L15"></a><tt class="py-lineno">15</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="ipv4_cidr_prefixes"></a><div id="ipv4_cidr_prefixes-def"><a name="L16"></a><tt class="py-lineno">16</tt> <a class="py-toggle" href="#" id="ipv4_cidr_prefixes-toggle" onclick="return toggle('ipv4_cidr_prefixes');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.misc-module.html#ipv4_cidr_prefixes">ipv4_cidr_prefixes</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ipv4_cidr_prefixes-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="ipv4_cidr_prefixes-expanded"><a name="L17"></a><tt class="py-lineno">17</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L18"></a><tt class="py-lineno">18</tt> <tt class="py-line"><tt class="py-docstring"> Returns a recordset (list of dicts) of host/network breakdown for IPv4</tt> </tt>
-<a name="L19"></a><tt class="py-lineno">19</tt> <tt class="py-line"><tt class="py-docstring"> using all of the various CIDR prefixes.</tt> </tt>
-<a name="L20"></a><tt class="py-lineno">20</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L21"></a><tt class="py-lineno">21</tt> <tt class="py-line"> <tt class="py-name">table</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L22"></a><tt class="py-lineno">22</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-number">32</tt> </tt>
-<a name="L23"></a><tt class="py-lineno">23</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">prefix</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L24"></a><tt class="py-lineno">24</tt> <tt class="py-line"> <tt id="link-3" class="py-name" targets="Method netaddr.address.IP.cidr()=netaddr.address.IP-class.html#cidr"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-3', 'cidr', 'link-3');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-4" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-4', 'CIDR', 'link-1');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'0.0.0.0/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">prefix</tt><tt class="py-op">)</tt> </tt>
-<a name="L25"></a><tt class="py-lineno">25</tt> <tt class="py-line"> <tt class="py-name">table</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-5" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-5', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">hosts</tt><tt class="py-op">=</tt><tt id="link-6" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-6', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-7" class="py-name" targets="Method netaddr.address.IPRange.size()=netaddr.address.IPRange-class.html#size"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-7', 'size', 'link-7');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L26"></a><tt class="py-lineno">26</tt> <tt class="py-line"> <tt class="py-name">networks</tt><tt class="py-op">=</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt id="link-8" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-8', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-9" class="py-name" targets="Variable netaddr.address.CIDR.prefixlen=netaddr.address.CIDR-class.html#prefixlen,Variable netaddr.address.IP.prefixlen=netaddr.address.IP-class.html#prefixlen"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-9', 'prefixlen', 'link-9');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L27"></a><tt class="py-lineno">27</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L28"></a><tt class="py-lineno">28</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">table</tt> </tt>
-</div><a name="L29"></a><tt class="py-lineno">29</tt> <tt class="py-line"> </tt>
-<a name="L30"></a><tt class="py-lineno">30</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="ipv6_cidr_prefixes"></a><div id="ipv6_cidr_prefixes-def"><a name="L31"></a><tt class="py-lineno">31</tt> <a class="py-toggle" href="#" id="ipv6_cidr_prefixes-toggle" onclick="return toggle('ipv6_cidr_prefixes');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.misc-module.html#ipv6_cidr_prefixes">ipv6_cidr_prefixes</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ipv6_cidr_prefixes-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="ipv6_cidr_prefixes-expanded"><a name="L32"></a><tt class="py-lineno">32</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L33"></a><tt class="py-lineno">33</tt> <tt class="py-line"><tt class="py-docstring"> Returns a recordset (list of dicts) of host/network breakdown for IPv6</tt> </tt>
-<a name="L34"></a><tt class="py-lineno">34</tt> <tt class="py-line"><tt class="py-docstring"> using all of the various CIDR prefixes.</tt> </tt>
-<a name="L35"></a><tt class="py-lineno">35</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L36"></a><tt class="py-lineno">36</tt> <tt class="py-line"> <tt class="py-name">table</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L37"></a><tt class="py-lineno">37</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">=</tt> <tt class="py-number">128</tt> </tt>
-<a name="L38"></a><tt class="py-lineno">38</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">prefix</tt> <tt class="py-op">&gt;=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L39"></a><tt class="py-lineno">39</tt> <tt class="py-line"> <tt id="link-10" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-10', 'cidr', 'link-3');">cidr</a></tt> <tt class="py-op">=</tt> <tt id="link-11" class="py-name"><a title="netaddr.address.CIDR" class="py-name" href="#" onclick="return doclink('link-11', 'CIDR', 'link-1');">CIDR</a></tt><tt class="py-op">(</tt><tt class="py-string">'::/%d'</tt> <tt class="py-op">%</tt> <tt class="py-name">prefix</tt><tt class="py-op">)</tt> </tt>
-<a name="L40"></a><tt class="py-lineno">40</tt> <tt class="py-line"> <tt class="py-name">table</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">dict</tt><tt class="py-op">(</tt><tt class="py-name">prefix</tt><tt class="py-op">=</tt><tt class="py-name">str</tt><tt class="py-op">(</tt><tt id="link-12" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-12', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">hosts</tt><tt class="py-op">=</tt><tt id="link-13" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-13', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-14" class="py-name"><a title="netaddr.address.IPRange.size" class="py-name" href="#" onclick="return doclink('link-14', 'size', 'link-7');">size</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L41"></a><tt class="py-lineno">41</tt> <tt class="py-line"> <tt class="py-name">networks</tt><tt class="py-op">=</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt id="link-15" class="py-name"><a title="netaddr.address.IP.cidr" class="py-name" href="#" onclick="return doclink('link-15', 'cidr', 'link-3');">cidr</a></tt><tt class="py-op">.</tt><tt id="link-16" class="py-name"><a title="netaddr.address.CIDR.prefixlen
-netaddr.address.IP.prefixlen" class="py-name" href="#" onclick="return doclink('link-16', 'prefixlen', 'link-9');">prefixlen</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L42"></a><tt class="py-lineno">42</tt> <tt class="py-line"> <tt class="py-name">prefix</tt> <tt class="py-op">-=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L43"></a><tt class="py-lineno">43</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">table</tt> </tt>
-</div><a name="L44"></a><tt class="py-lineno">44</tt> <tt class="py-line"> </tt>
-<a name="L45"></a><tt class="py-lineno">45</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="print_ipv4_cidr_prefixes"></a><div id="print_ipv4_cidr_prefixes-def"><a name="L46"></a><tt class="py-lineno">46</tt> <a class="py-toggle" href="#" id="print_ipv4_cidr_prefixes-toggle" onclick="return toggle('print_ipv4_cidr_prefixes');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.misc-module.html#print_ipv4_cidr_prefixes">print_ipv4_cidr_prefixes</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="print_ipv4_cidr_prefixes-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="print_ipv4_cidr_prefixes-expanded"><a name="L47"></a><tt class="py-lineno">47</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L48"></a><tt class="py-lineno">48</tt> <tt class="py-line"><tt class="py-docstring"> Prints a table to stdout of host/network breakdown for IPv4 using CIDR</tt> </tt>
-<a name="L49"></a><tt class="py-lineno">49</tt> <tt class="py-line"><tt class="py-docstring"> notation.</tt> </tt>
-<a name="L50"></a><tt class="py-lineno">50</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L51"></a><tt class="py-lineno">51</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'%-10s %-15s %-15s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">'Prefix'</tt><tt class="py-op">,</tt> <tt class="py-string">'Hosts'</tt><tt class="py-op">,</tt> <tt class="py-string">'Networks'</tt><tt class="py-op">)</tt> </tt>
-<a name="L52"></a><tt class="py-lineno">52</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">15</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">15</tt> </tt>
-<a name="L53"></a><tt class="py-lineno">53</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">record</tt> <tt class="py-keyword">in</tt> <tt id="link-17" class="py-name" targets="Function netaddr.misc.ipv4_cidr_prefixes()=netaddr.misc-module.html#ipv4_cidr_prefixes"><a title="netaddr.misc.ipv4_cidr_prefixes" class="py-name" href="#" onclick="return doclink('link-17', 'ipv4_cidr_prefixes', 'link-17');">ipv4_cidr_prefixes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L54"></a><tt class="py-lineno">54</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'%(prefix)-10s %(hosts)15s %(networks)15s'</tt> <tt class="py-op">%</tt> <tt class="py-name">record</tt> </tt>
-</div><a name="L55"></a><tt class="py-lineno">55</tt> <tt class="py-line"> </tt>
-<a name="L56"></a><tt class="py-lineno">56</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="print_ipv6_cidr_prefixes"></a><div id="print_ipv6_cidr_prefixes-def"><a name="L57"></a><tt class="py-lineno">57</tt> <a class="py-toggle" href="#" id="print_ipv6_cidr_prefixes-toggle" onclick="return toggle('print_ipv6_cidr_prefixes');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.misc-module.html#print_ipv6_cidr_prefixes">print_ipv6_cidr_prefixes</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="print_ipv6_cidr_prefixes-collapsed" style="display:none;" pad="++" indent="++++"></div><div id="print_ipv6_cidr_prefixes-expanded"><a name="L58"></a><tt class="py-lineno">58</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L59"></a><tt class="py-lineno">59</tt> <tt class="py-line"><tt class="py-docstring"> Prints a table to stdout of host/network breakdown for IPv6 using CIDR</tt> </tt>
-<a name="L60"></a><tt class="py-lineno">60</tt> <tt class="py-line"><tt class="py-docstring"> notation.</tt> </tt>
-<a name="L61"></a><tt class="py-lineno">61</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L62"></a><tt class="py-lineno">62</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'%-10s %-40s %-40s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-string">'Prefix'</tt><tt class="py-op">,</tt> <tt class="py-string">'Hosts'</tt><tt class="py-op">,</tt> <tt class="py-string">'Networks'</tt><tt class="py-op">)</tt> </tt>
-<a name="L63"></a><tt class="py-lineno">63</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">10</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">40</tt><tt class="py-op">,</tt> <tt class="py-string">'-'</tt><tt class="py-op">*</tt><tt class="py-number">40</tt> </tt>
-<a name="L64"></a><tt class="py-lineno">64</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">record</tt> <tt class="py-keyword">in</tt> <tt id="link-18" class="py-name" targets="Function netaddr.misc.ipv6_cidr_prefixes()=netaddr.misc-module.html#ipv6_cidr_prefixes"><a title="netaddr.misc.ipv6_cidr_prefixes" class="py-name" href="#" onclick="return doclink('link-18', 'ipv6_cidr_prefixes', 'link-18');">ipv6_cidr_prefixes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L65"></a><tt class="py-lineno">65</tt> <tt class="py-line"> <tt class="py-keyword">print</tt> <tt class="py-string">'%(prefix)-10s %(hosts)40s %(networks)40s'</tt> <tt class="py-op">%</tt> <tt class="py-name">record</tt> </tt>
-</div><a name="L66"></a><tt class="py-lineno">66</tt> <tt class="py-line"> </tt>
-<a name="L67"></a><tt class="py-lineno">67</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L68"></a><tt class="py-lineno">68</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="L69"></a><tt class="py-lineno">69</tt> <tt class="py-line"> <tt class="py-keyword">import</tt> <tt class="py-name">pprint</tt> </tt>
-<a name="L70"></a><tt class="py-lineno">70</tt> <tt class="py-line"> <tt class="py-comment">#pprint.pprint(ipv4_cidr_prefixes())</tt> </tt>
-<a name="L71"></a><tt class="py-lineno">71</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-19" class="py-name" targets="Function netaddr.misc.print_ipv4_cidr_prefixes()=netaddr.misc-module.html#print_ipv4_cidr_prefixes"><a title="netaddr.misc.print_ipv4_cidr_prefixes" class="py-name" href="#" onclick="return doclink('link-19', 'print_ipv4_cidr_prefixes', 'link-19');">print_ipv4_cidr_prefixes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L72"></a><tt class="py-lineno">72</tt> <tt class="py-line"> <tt class="py-comment">#pprint.pprint(ipv6_cidr_prefixes())</tt> </tt>
-<a name="L73"></a><tt class="py-lineno">73</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-20" class="py-name" targets="Function netaddr.misc.print_ipv6_cidr_prefixes()=netaddr.misc-module.html#print_ipv6_cidr_prefixes"><a title="netaddr.misc.print_ipv6_cidr_prefixes" class="py-name" href="#" onclick="return doclink('link-20', 'print_ipv6_cidr_prefixes', 'link-20');">print_ipv6_cidr_prefixes</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L74"></a><tt class="py-lineno">74</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:07 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy-module.html b/docs/api/netaddr.strategy-module.html
deleted file mode 100755
index 6bb6d94..0000000
--- a/docs/api/netaddr.strategy-module.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;strategy
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy-module.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== MODULE DESCRIPTION ==================== -->
-<h1 class="epydoc">Module strategy</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html">source&nbsp;code</a></span></p>
-<p>network address conversion logic, constants and shared strategy
- objects.</p>
-
-<!-- ==================== CLASSES ==================== -->
-<a name="section-Classes"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Classes</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.AddrStrategy-class.html" class="summary-name">AddrStrategy</a><br />
- Basic support for common operations performed on each address type
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.IPv4StrategyStd-class.html" class="summary-name">IPv4StrategyStd</a><br />
- A 'safe' <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.IPv4StrategyOpt-class.html" class="summary-name">IPv4StrategyOpt</a><br />
- An optimised <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.IPv6Strategy-class.html" class="summary-name">IPv6Strategy</a><br />
- Implements the operations that can be performed on an Internet
- Protocol version 6 network address in accordance with RFC 4291.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.EUI48Strategy-class.html" class="summary-name">EUI48Strategy</a><br />
- Implements the operations that can be performed on an IEEE 48-bit
- EUI (Extended Unique Identifer) a.k.a.
- </td>
- </tr>
-</table>
-<!-- ==================== VARIABLES ==================== -->
-<a name="section-Variables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="USE_IPV4_OPT"></a><span class="summary-name">USE_IPV4_OPT</span> = <code title="True">True</code><br />
- Use optimised IPv4 strategy? Default: True
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_IPV4"></a><span class="summary-name">ST_IPV4</span> = <code title="IPv4StrategyOpt(32, 8, '.', 4, 10, False)">IPv4StrategyOpt(32, 8, '.', 4, 10, False)</code><br />
- A shared strategy object supporting all operations on IPv4 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_IPV6"></a><span class="summary-name">ST_IPV6</span> = <code title="IPv6Strategy(128, 16, ':', 6, 16, False)">IPv6Strategy(128, 16, ':', 6, 16, False)</code><br />
- A shared strategy object supporting all operations on IPv6 addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_EUI48"></a><span class="summary-name">ST_EUI48</span> = <code title="EUI48Strategy(48, 8, '-', 48, 16, True)">EUI48Strategy(48, 8, '-', 48, 16, True)</code><br />
- A shared strategy object supporting all operations on EUI-48/MAC
- addresses.
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="ST_EUI64"></a><span class="summary-name">ST_EUI64</span> = <code title="AddrStrategy(64, 8, '-', 64, 16, True)">AddrStrategy(64, 8, '-', 64, 16, True)</code><br />
- A shared strategy object supporting all operations on EUI-64
- addresses.
- </td>
- </tr>
-</table>
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy-pysrc.html b/docs/api/netaddr.strategy-pysrc.html
deleted file mode 100755
index 6cba09d..0000000
--- a/docs/api/netaddr.strategy-pysrc.html
+++ /dev/null
@@ -1,1334 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- Module&nbsp;strategy
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy-pysrc.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<h1 class="epydoc">Source Code for <a href="netaddr.strategy-module.html" onclick="show_private();">Module netaddr.strategy</a></h1>
-<pre class="py-src">
-<a name="L1"></a><tt class="py-lineno"> 1</tt> <tt class="py-line"><tt class="py-comment">#!/usr/bin/env python</tt> </tt>
-<a name="L2"></a><tt class="py-lineno"> 2</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L3"></a><tt class="py-lineno"> 3</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Copyright (c) 2008, David P. D. Moss. All rights reserved.</tt> </tt>
-<a name="L4"></a><tt class="py-lineno"> 4</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#</tt> </tt>
-<a name="L5"></a><tt class="py-lineno"> 5</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Released under the BSD license. See the LICENSE file for details.</tt> </tt>
-<a name="L6"></a><tt class="py-lineno"> 6</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L7"></a><tt class="py-lineno"> 7</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-docstring">"""</tt> </tt>
-<a name="L8"></a><tt class="py-lineno"> 8</tt> <tt class="py-line"><tt class="py-docstring">network address conversion logic, constants and shared strategy objects.</tt> </tt>
-<a name="L9"></a><tt class="py-lineno"> 9</tt> <tt class="py-line"><tt class="py-docstring">"""</tt> </tt>
-<a name="L10"></a><tt class="py-lineno"> 10</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">socket</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_socket</tt> </tt>
-<a name="L11"></a><tt class="py-lineno"> 11</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">struct</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_struct</tt> </tt>
-<a name="L12"></a><tt class="py-lineno"> 12</tt> <tt class="py-line"><tt class="py-keyword">import</tt> <tt class="py-name">re</tt> <tt class="py-keyword">as</tt> <tt class="py-name">_re</tt> </tt>
-<a name="L13"></a><tt class="py-lineno"> 13</tt> <tt class="py-line"> </tt>
-<a name="L14"></a><tt class="py-lineno"> 14</tt> <tt class="py-line"><tt id="link-0" class="py-name" targets="Variable netaddr.strategy.USE_IPV4_OPT=netaddr.strategy-module.html#USE_IPV4_OPT"><a title="netaddr.strategy.USE_IPV4_OPT" class="py-name" href="#" onclick="return doclink('link-0', 'USE_IPV4_OPT', 'link-0');">USE_IPV4_OPT</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt> <tt class="py-comment">#: Use optimised IPv4 strategy? Default: True</tt> </tt>
-<a name="L15"></a><tt class="py-lineno"> 15</tt> <tt class="py-line"> </tt>
-<a name="L16"></a><tt class="py-lineno"> 16</tt> <tt class="py-line"><tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L17"></a><tt class="py-lineno"> 17</tt> <tt class="py-line"> <tt class="py-comment"># Detects a common bug in various Python implementations.</tt> </tt>
-<a name="L18"></a><tt class="py-lineno"> 18</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">inet_aton</tt><tt class="py-op">(</tt><tt class="py-string">'255.255.255.255'</tt><tt class="py-op">)</tt> </tt>
-<a name="L19"></a><tt class="py-lineno"> 19</tt> <tt class="py-line"><tt class="py-keyword">except</tt><tt class="py-op">:</tt> </tt>
-<a name="L20"></a><tt class="py-lineno"> 20</tt> <tt class="py-line"> <tt id="link-1" class="py-name"><a title="netaddr.strategy.USE_IPV4_OPT" class="py-name" href="#" onclick="return doclink('link-1', 'USE_IPV4_OPT', 'link-0');">USE_IPV4_OPT</a></tt><tt class="py-op">=</tt><tt class="py-name">False</tt> </tt>
-<a name="L21"></a><tt class="py-lineno"> 21</tt> <tt class="py-line"> </tt>
-<a name="L22"></a><tt class="py-lineno"> 22</tt> <tt class="py-line"><tt class="py-keyword">from</tt> <tt id="link-2" class="py-name" targets="Package netaddr=netaddr-module.html"><a title="netaddr" class="py-name" href="#" onclick="return doclink('link-2', 'netaddr', 'link-2');">netaddr</a></tt> <tt class="py-keyword">import</tt> <tt id="link-3" class="py-name" targets="Variable netaddr.BIG_ENDIAN_PLATFORM=netaddr-module.html#BIG_ENDIAN_PLATFORM"><a title="netaddr.BIG_ENDIAN_PLATFORM" class="py-name" href="#" onclick="return doclink('link-3', 'BIG_ENDIAN_PLATFORM', 'link-3');">BIG_ENDIAN_PLATFORM</a></tt><tt class="py-op">,</tt> <tt id="link-4" class="py-name" targets="Variable netaddr.AT_UNSPEC=netaddr-module.html#AT_UNSPEC"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-4', 'AT_UNSPEC', 'link-4');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt id="link-5" class="py-name" targets="Variable netaddr.AT_INET=netaddr-module.html#AT_INET"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-5', 'AT_INET', 'link-5');">AT_INET</a></tt><tt class="py-op">,</tt> <tt id="link-6" class="py-name" targets="Variable netaddr.AT_INET6=netaddr-module.html#AT_INET6"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-6', 'AT_INET6', 'link-6');">AT_INET6</a></tt><tt class="py-op">,</tt> \ </tt>
-<a name="L23"></a><tt class="py-lineno"> 23</tt> <tt class="py-line"> <tt id="link-7" class="py-name" targets="Variable netaddr.AT_LINK=netaddr-module.html#AT_LINK"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-7', 'AT_LINK', 'link-7');">AT_LINK</a></tt><tt class="py-op">,</tt> <tt id="link-8" class="py-name" targets="Variable netaddr.AT_EUI64=netaddr-module.html#AT_EUI64"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-8', 'AT_EUI64', 'link-8');">AT_EUI64</a></tt><tt class="py-op">,</tt> <tt id="link-9" class="py-name" targets="Variable netaddr.AT_NAMES=netaddr-module.html#AT_NAMES"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-9', 'AT_NAMES', 'link-9');">AT_NAMES</a></tt><tt class="py-op">,</tt> <tt id="link-10" class="py-name" targets="Class netaddr.AddrFormatError=netaddr.AddrFormatError-class.html"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-10', 'AddrFormatError', 'link-10');">AddrFormatError</a></tt> </tt>
-<a name="L24"></a><tt class="py-lineno"> 24</tt> <tt class="py-line"> </tt>
-<a name="L25"></a><tt class="py-lineno"> 25</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="_BYTES_TO_BITS"></a><div id="_BYTES_TO_BITS-def"><a name="L26"></a><tt class="py-lineno"> 26</tt> <a class="py-toggle" href="#" id="_BYTES_TO_BITS-toggle" onclick="return toggle('_BYTES_TO_BITS');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy-module.html#_BYTES_TO_BITS">_BYTES_TO_BITS</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_BYTES_TO_BITS-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="_BYTES_TO_BITS-expanded"><a name="L27"></a><tt class="py-lineno"> 27</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L28"></a><tt class="py-lineno"> 28</tt> <tt class="py-line"><tt class="py-docstring"> Generates a 256 element list of 8-bit binary digit strings. List index is</tt> </tt>
-<a name="L29"></a><tt class="py-lineno"> 29</tt> <tt class="py-line"><tt class="py-docstring"> equivalent to the bit string value.</tt> </tt>
-<a name="L30"></a><tt class="py-lineno"> 30</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L31"></a><tt class="py-lineno"> 31</tt> <tt class="py-line"> <tt class="py-name">lookup</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L32"></a><tt class="py-lineno"> 32</tt> <tt class="py-line"> <tt class="py-name">bits_per_byte</tt> <tt class="py-op">=</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">7</tt><tt class="py-op">,</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L33"></a><tt class="py-lineno"> 33</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-number">256</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L34"></a><tt class="py-lineno"> 34</tt> <tt class="py-line"> <tt id="link-11" class="py-name" targets="Method netaddr.address.Addr.bits()=netaddr.address.Addr-class.html#bits"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-11', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-number">8</tt><tt class="py-op">*</tt><tt class="py-op">[</tt><tt class="py-name">None</tt><tt class="py-op">]</tt> </tt>
-<a name="L35"></a><tt class="py-lineno"> 35</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">bits_per_byte</tt><tt class="py-op">:</tt> </tt>
-<a name="L36"></a><tt class="py-lineno"> 36</tt> <tt class="py-line"> <tt id="link-12" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-12', 'bits', 'link-11');">bits</a></tt><tt class="py-op">[</tt><tt class="py-name">i</tt><tt class="py-op">]</tt> <tt class="py-op">=</tt> <tt class="py-string">'01'</tt><tt class="py-op">[</tt><tt class="py-name">num</tt><tt class="py-op">&amp;</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L37"></a><tt class="py-lineno"> 37</tt> <tt class="py-line"> <tt class="py-name">num</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L38"></a><tt class="py-lineno"> 38</tt> <tt class="py-line"> <tt class="py-name">lookup</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-13" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-13', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L39"></a><tt class="py-lineno"> 39</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">lookup</tt> </tt>
-</div><a name="L40"></a><tt class="py-lineno"> 40</tt> <tt class="py-line"> </tt>
-<a name="L41"></a><tt class="py-lineno"> 41</tt> <tt class="py-line"><tt id="link-14" class="py-name" targets="Variable netaddr.strategy._BYTES_TO_BITS=netaddr.strategy-module.html#_BYTES_TO_BITS"><a title="netaddr.strategy._BYTES_TO_BITS" class="py-name" href="#" onclick="return doclink('link-14', '_BYTES_TO_BITS', 'link-14');">_BYTES_TO_BITS</a></tt> <tt class="py-op">=</tt> <tt id="link-15" class="py-name"><a title="netaddr.strategy._BYTES_TO_BITS" class="py-name" href="#" onclick="return doclink('link-15', '_BYTES_TO_BITS', 'link-14');">_BYTES_TO_BITS</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L42"></a><tt class="py-lineno"> 42</tt> <tt class="py-line"> </tt>
-<a name="L43"></a><tt class="py-lineno"> 43</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="AddrStrategy"></a><div id="AddrStrategy-def"><a name="L44"></a><tt class="py-lineno"> 44</tt> <a class="py-toggle" href="#" id="AddrStrategy-toggle" onclick="return toggle('AddrStrategy');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="AddrStrategy-expanded"><a name="L45"></a><tt class="py-lineno"> 45</tt> <tt class="py-line"> <tt class="py-docstring">"""Basic support for common operations performed on each address type"""</tt> </tt>
-<a name="L46"></a><tt class="py-lineno"> 46</tt> <tt class="py-line"> </tt>
-<a name="L47"></a><tt class="py-lineno"> 47</tt> <tt class="py-line"> <tt class="py-comment">#: Lookup table for struct module format strings.</tt> </tt>
-<a name="L48"></a><tt class="py-lineno"> 48</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-16" class="py-name" targets="Variable netaddr.strategy.AddrStrategy.STRUCT_FORMATS=netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS"><a title="netaddr.strategy.AddrStrategy.STRUCT_FORMATS" class="py-name" href="#" onclick="return doclink('link-16', 'STRUCT_FORMATS', 'link-16');">STRUCT_FORMATS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">{</tt> </tt>
-<a name="L49"></a><tt class="py-lineno"> 49</tt> <tt class="py-line"> <tt class="py-number">8</tt> <tt class="py-op">:</tt> <tt class="py-string">'B'</tt><tt class="py-op">,</tt> <tt class="py-comment"># unsigned char</tt> </tt>
-<a name="L50"></a><tt class="py-lineno"> 50</tt> <tt class="py-line"> <tt class="py-number">16</tt> <tt class="py-op">:</tt> <tt class="py-string">'H'</tt><tt class="py-op">,</tt> <tt class="py-comment"># unsigned short</tt> </tt>
-<a name="L51"></a><tt class="py-lineno"> 51</tt> <tt class="py-line"> <tt class="py-number">32</tt> <tt class="py-op">:</tt> <tt class="py-string">'I'</tt><tt class="py-op">,</tt> <tt class="py-comment"># unsigned int</tt> </tt>
-<a name="L52"></a><tt class="py-lineno"> 52</tt> <tt class="py-line"> <tt class="py-op">}</tt> </tt>
-<a name="L53"></a><tt class="py-lineno"> 53</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.__init__"></a><div id="AddrStrategy.__init__-def"><a name="L54"></a><tt class="py-lineno"> 54</tt> <a class="py-toggle" href="#" id="AddrStrategy.__init__-toggle" onclick="return toggle('AddrStrategy.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">width</tt><tt class="py-op">,</tt> <tt class="py-param">word_size</tt><tt class="py-op">,</tt> <tt class="py-param">word_sep</tt><tt class="py-op">,</tt> <tt class="py-param">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%x'</tt><tt class="py-op">,</tt> </tt>
-<a name="L55"></a><tt class="py-lineno"> 55</tt> <tt class="py-line"> <tt class="py-param">addr_type</tt><tt class="py-op">=</tt><tt id="link-17" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-17', 'AT_UNSPEC', 'link-4');">AT_UNSPEC</a></tt><tt class="py-op">,</tt> <tt class="py-param">word_base</tt><tt class="py-op">=</tt><tt class="py-number">16</tt><tt class="py-op">,</tt> <tt class="py-param">uppercase</tt><tt class="py-op">=</tt><tt class="py-name">False</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.__init__-expanded"><a name="L56"></a><tt class="py-lineno"> 56</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L57"></a><tt class="py-lineno"> 57</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L58"></a><tt class="py-lineno"> 58</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L59"></a><tt class="py-lineno"> 59</tt> <tt class="py-line"><tt class="py-docstring"> @param width: size of address in bits.</tt> </tt>
-<a name="L60"></a><tt class="py-lineno"> 60</tt> <tt class="py-line"><tt class="py-docstring"> (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)</tt> </tt>
-<a name="L61"></a><tt class="py-lineno"> 61</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L62"></a><tt class="py-lineno"> 62</tt> <tt class="py-line"><tt class="py-docstring"> @param word_size: size of each word.</tt> </tt>
-<a name="L63"></a><tt class="py-lineno"> 63</tt> <tt class="py-line"><tt class="py-docstring"> (e.g. 8 - octets, 16 - hextets)</tt> </tt>
-<a name="L64"></a><tt class="py-lineno"> 64</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L65"></a><tt class="py-lineno"> 65</tt> <tt class="py-line"><tt class="py-docstring"> @param word_sep: separator between each word.</tt> </tt>
-<a name="L66"></a><tt class="py-lineno"> 66</tt> <tt class="py-line"><tt class="py-docstring"> (e.g. '.' - IPv4, ':' - IPv6, '-' - EUI-48)</tt> </tt>
-<a name="L67"></a><tt class="py-lineno"> 67</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L68"></a><tt class="py-lineno"> 68</tt> <tt class="py-line"><tt class="py-docstring"> @param word_fmt: format string for each word.</tt> </tt>
-<a name="L69"></a><tt class="py-lineno"> 69</tt> <tt class="py-line"><tt class="py-docstring"> (Default: '%x')</tt> </tt>
-<a name="L70"></a><tt class="py-lineno"> 70</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L71"></a><tt class="py-lineno"> 71</tt> <tt class="py-line"><tt class="py-docstring"> @param addr_type: address type.</tt> </tt>
-<a name="L72"></a><tt class="py-lineno"> 72</tt> <tt class="py-line"><tt class="py-docstring"> (Default: AT_UNSPEC)</tt> </tt>
-<a name="L73"></a><tt class="py-lineno"> 73</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L74"></a><tt class="py-lineno"> 74</tt> <tt class="py-line"><tt class="py-docstring"> @param word_base: number base used to convert each word using int().</tt> </tt>
-<a name="L75"></a><tt class="py-lineno"> 75</tt> <tt class="py-line"><tt class="py-docstring"> (Default: 16)</tt> </tt>
-<a name="L76"></a><tt class="py-lineno"> 76</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L77"></a><tt class="py-lineno"> 77</tt> <tt class="py-line"><tt class="py-docstring"> @param uppercase: uppercase address.</tt> </tt>
-<a name="L78"></a><tt class="py-lineno"> 78</tt> <tt class="py-line"><tt class="py-docstring"> (Default: False)</tt> </tt>
-<a name="L79"></a><tt class="py-lineno"> 79</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L80"></a><tt class="py-lineno"> 80</tt> <tt class="py-line"> </tt>
-<a name="L81"></a><tt class="py-lineno"> 81</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">=</tt> <tt class="py-name">width</tt> </tt>
-<a name="L82"></a><tt class="py-lineno"> 82</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L83"></a><tt class="py-lineno"> 83</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">=</tt> <tt class="py-name">word_size</tt> </tt>
-<a name="L84"></a><tt class="py-lineno"> 84</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> <tt class="py-op">=</tt> <tt class="py-name">width</tt> <tt class="py-op">/</tt> <tt class="py-name">word_size</tt> </tt>
-<a name="L85"></a><tt class="py-lineno"> 85</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">word_size</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L86"></a><tt class="py-lineno"> 86</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt> <tt class="py-op">=</tt> <tt class="py-name">word_sep</tt> </tt>
-<a name="L87"></a><tt class="py-lineno"> 87</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">word_fmt</tt> </tt>
-<a name="L88"></a><tt class="py-lineno"> 88</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_base</tt> <tt class="py-op">=</tt> <tt class="py-name">word_base</tt> </tt>
-<a name="L89"></a><tt class="py-lineno"> 89</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-18" class="py-name" targets="Variable netaddr.address.Addr.addr_type=netaddr.address.Addr-class.html#addr_type,Variable netaddr.address.CIDR.addr_type=netaddr.address.CIDR-class.html#addr_type,Variable netaddr.address.EUI.addr_type=netaddr.address.EUI-class.html#addr_type,Variable netaddr.address.IP.addr_type=netaddr.address.IP-class.html#addr_type,Variable netaddr.address.IPRange.addr_type=netaddr.address.IPRange-class.html#addr_type,Variable netaddr.address.Wildcard.addr_type=netaddr.address.Wildcard-class.html#addr_type"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-18', 'addr_type', 'link-18');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-19" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-19', 'addr_type', 'link-18');">addr_type</a></tt> </tt>
-<a name="L90"></a><tt class="py-lineno"> 90</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uppercase</tt> <tt class="py-op">=</tt> <tt class="py-name">uppercase</tt> </tt>
-<a name="L91"></a><tt class="py-lineno"> 91</tt> <tt class="py-line"> </tt>
-<a name="L92"></a><tt class="py-lineno"> 92</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L93"></a><tt class="py-lineno"> 93</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-20" class="py-name"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-20', 'AT_NAMES', 'link-9');">AT_NAMES</a></tt><tt class="py-op">[</tt><tt id="link-21" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-21', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">]</tt> </tt>
-<a name="L94"></a><tt class="py-lineno"> 94</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
-<a name="L95"></a><tt class="py-lineno"> 95</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">name</tt> <tt class="py-op">=</tt> <tt id="link-22" class="py-name"><a title="netaddr.AT_NAMES" class="py-name" href="#" onclick="return doclink('link-22', 'AT_NAMES', 'link-9');">AT_NAMES</a></tt><tt class="py-op">[</tt><tt id="link-23" class="py-name"><a title="netaddr.AT_UNSPEC" class="py-name" href="#" onclick="return doclink('link-23', 'AT_UNSPEC', 'link-4');">AT_UNSPEC</a></tt><tt class="py-op">]</tt> </tt>
-</div><a name="L96"></a><tt class="py-lineno"> 96</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.__repr__"></a><div id="AddrStrategy.__repr__-def"><a name="L97"></a><tt class="py-lineno"> 97</tt> <a class="py-toggle" href="#" id="AddrStrategy.__repr__-toggle" onclick="return toggle('AddrStrategy.__repr__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.__repr__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.__repr__-expanded"><a name="L98"></a><tt class="py-lineno"> 98</tt> <tt class="py-line"> <tt class="py-docstring">"""@return: executable Python string to recreate equivalent object"""</tt> </tt>
-<a name="L99"></a><tt class="py-lineno"> 99</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">"%s(%r, %r, %r, %r, %r, %r)"</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">.</tt><tt class="py-name">__name__</tt><tt class="py-op">,</tt> </tt>
-<a name="L100"></a><tt class="py-lineno">100</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-24" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-24', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L101"></a><tt class="py-lineno">101</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_base</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uppercase</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L102"></a><tt class="py-lineno">102</tt> <tt class="py-line"> </tt>
-<a name="L103"></a><tt class="py-lineno">103</tt> <tt class="py-line"> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L104"></a><tt class="py-lineno">104</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Binary methods.</tt> </tt>
-<a name="L105"></a><tt class="py-lineno">105</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L106"></a><tt class="py-lineno">106</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrStrategy.valid_bits"></a><div id="AddrStrategy.valid_bits-def"><a name="L107"></a><tt class="py-lineno">107</tt> <a class="py-toggle" href="#" id="AddrStrategy.valid_bits-toggle" onclick="return toggle('AddrStrategy.valid_bits');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">bits</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.valid_bits-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.valid_bits-expanded"><a name="L108"></a><tt class="py-lineno">108</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L109"></a><tt class="py-lineno">109</tt> <tt class="py-line"><tt class="py-docstring"> @param bits: A network address in readable binary form.</tt> </tt>
-<a name="L110"></a><tt class="py-lineno">110</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L111"></a><tt class="py-lineno">111</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if network address is valid for this address type,</tt> </tt>
-<a name="L112"></a><tt class="py-lineno">112</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L113"></a><tt class="py-lineno">113</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L114"></a><tt class="py-lineno">114</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt id="link-25" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-25', 'bits', 'link-11');">bits</a></tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L115"></a><tt class="py-lineno">115</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L116"></a><tt class="py-lineno">116</tt> <tt class="py-line"> </tt>
-<a name="L117"></a><tt class="py-lineno">117</tt> <tt class="py-line"> <tt id="link-26" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-26', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt id="link-27" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-27', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L118"></a><tt class="py-lineno">118</tt> <tt class="py-line"> </tt>
-<a name="L119"></a><tt class="py-lineno">119</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-28" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-28', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt><tt class="py-op">:</tt> </tt>
-<a name="L120"></a><tt class="py-lineno">120</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L121"></a><tt class="py-lineno">121</tt> <tt class="py-line"> </tt>
-<a name="L122"></a><tt class="py-lineno">122</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L123"></a><tt class="py-lineno">123</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt id="link-29" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-29', 'bits', 'link-11');">bits</a></tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt><tt class="py-op">:</tt> </tt>
-<a name="L124"></a><tt class="py-lineno">124</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L125"></a><tt class="py-lineno">125</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L126"></a><tt class="py-lineno">126</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L127"></a><tt class="py-lineno">127</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L128"></a><tt class="py-lineno">128</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.bits_to_int"></a><div id="AddrStrategy.bits_to_int-def"><a name="L129"></a><tt class="py-lineno">129</tt> <a class="py-toggle" href="#" id="AddrStrategy.bits_to_int-toggle" onclick="return toggle('AddrStrategy.bits_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">bits</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.bits_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.bits_to_int-expanded"><a name="L130"></a><tt class="py-lineno">130</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L131"></a><tt class="py-lineno">131</tt> <tt class="py-line"><tt class="py-docstring"> @param bits: A network address in readable binary form.</tt> </tt>
-<a name="L132"></a><tt class="py-lineno">132</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L133"></a><tt class="py-lineno">133</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L134"></a><tt class="py-lineno">134</tt> <tt class="py-line"><tt class="py-docstring"> represented by network address in readable binary form.</tt> </tt>
-<a name="L135"></a><tt class="py-lineno">135</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L136"></a><tt class="py-lineno">136</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-30" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_bits()=netaddr.strategy.AddrStrategy-class.html#valid_bits"><a title="netaddr.strategy.AddrStrategy.valid_bits" class="py-name" href="#" onclick="return doclink('link-30', 'valid_bits', 'link-30');">valid_bits</a></tt><tt class="py-op">(</tt><tt id="link-31" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-31', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L137"></a><tt class="py-lineno">137</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid binary form string for '</tt> \ </tt>
-<a name="L138"></a><tt class="py-lineno">138</tt> <tt class="py-line"> <tt class="py-string">'address type!'</tt> <tt class="py-op">%</tt> <tt id="link-32" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-32', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L139"></a><tt class="py-lineno">139</tt> <tt class="py-line"> </tt>
-<a name="L140"></a><tt class="py-lineno">140</tt> <tt class="py-line"> <tt class="py-name">word_bits</tt> <tt class="py-op">=</tt> <tt id="link-33" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-33', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">)</tt> </tt>
-<a name="L141"></a><tt class="py-lineno">141</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">word_bits</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">:</tt> </tt>
-<a name="L142"></a><tt class="py-lineno">142</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'invalid number of words within binary form '</tt> \ </tt>
-<a name="L143"></a><tt class="py-lineno">143</tt> <tt class="py-line"> <tt class="py-string">'string for address type!'</tt> <tt class="py-op">%</tt> <tt id="link-34" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-34', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L144"></a><tt class="py-lineno">144</tt> <tt class="py-line"> </tt>
-<a name="L145"></a><tt class="py-lineno">145</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">word_bits</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L146"></a><tt class="py-lineno">146</tt> <tt class="py-line"> </tt>
-<a name="L147"></a><tt class="py-lineno">147</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-35" class="py-name" targets="Method netaddr.strategy.AddrStrategy.words_to_int()=netaddr.strategy.AddrStrategy-class.html#words_to_int,Method netaddr.strategy.IPv4StrategyOpt.words_to_int()=netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int"><a title="netaddr.strategy.AddrStrategy.words_to_int
-netaddr.strategy.IPv4StrategyOpt.words_to_int" class="py-name" href="#" onclick="return doclink('link-35', 'words_to_int', 'link-35');">words_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L148"></a><tt class="py-lineno">148</tt> <tt class="py-line"> </tt>
-<a name="L149"></a><tt class="py-lineno">149</tt> <tt class="py-line"> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L150"></a><tt class="py-lineno">150</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Integer methods.</tt> </tt>
-<a name="L151"></a><tt class="py-lineno">151</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L152"></a><tt class="py-lineno">152</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrStrategy.valid_int"></a><div id="AddrStrategy.valid_int-def"><a name="L153"></a><tt class="py-lineno">153</tt> <a class="py-toggle" href="#" id="AddrStrategy.valid_int-toggle" onclick="return toggle('AddrStrategy.valid_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.valid_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.valid_int-expanded"><a name="L154"></a><tt class="py-lineno">154</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L155"></a><tt class="py-lineno">155</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L156"></a><tt class="py-lineno">156</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L157"></a><tt class="py-lineno">157</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if network byte order integer falls within the</tt> </tt>
-<a name="L158"></a><tt class="py-lineno">158</tt> <tt class="py-line"><tt class="py-docstring"> boundaries of this address type, C{False} otherwise.</tt> </tt>
-<a name="L159"></a><tt class="py-lineno">159</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L160"></a><tt class="py-lineno">160</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L161"></a><tt class="py-lineno">161</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L162"></a><tt class="py-lineno">162</tt> <tt class="py-line"> </tt>
-<a name="L163"></a><tt class="py-lineno">163</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> </tt>
-</div><a name="L164"></a><tt class="py-lineno">164</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.int_to_str"></a><div id="AddrStrategy.int_to_str-def"><a name="L165"></a><tt class="py-lineno">165</tt> <a class="py-toggle" href="#" id="AddrStrategy.int_to_str-toggle" onclick="return toggle('AddrStrategy.int_to_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#int_to_str">int_to_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.int_to_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.int_to_str-expanded"><a name="L166"></a><tt class="py-lineno">166</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L167"></a><tt class="py-lineno">167</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L168"></a><tt class="py-lineno">168</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L169"></a><tt class="py-lineno">169</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network address in string form that is equivalent to value</tt> </tt>
-<a name="L170"></a><tt class="py-lineno">170</tt> <tt class="py-line"><tt class="py-docstring"> represented by a network byte order integer.</tt> </tt>
-<a name="L171"></a><tt class="py-lineno">171</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L172"></a><tt class="py-lineno">172</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-36" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_words()=netaddr.strategy.AddrStrategy-class.html#int_to_words,Method netaddr.strategy.IPv4StrategyOpt.int_to_words()=netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-36', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L173"></a><tt class="py-lineno">173</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_fmt</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">]</tt> </tt>
-<a name="L174"></a><tt class="py-lineno">174</tt> <tt class="py-line"> <tt class="py-name">addr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-<a name="L175"></a><tt class="py-lineno">175</tt> <tt class="py-line"> </tt>
-<a name="L176"></a><tt class="py-lineno">176</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uppercase</tt> <tt class="py-keyword">is</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L177"></a><tt class="py-lineno">177</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L178"></a><tt class="py-lineno">178</tt> <tt class="py-line"> </tt>
-<a name="L179"></a><tt class="py-lineno">179</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addr</tt> </tt>
-</div><a name="L180"></a><tt class="py-lineno">180</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.int_to_bits"></a><div id="AddrStrategy.int_to_bits-def"><a name="L181"></a><tt class="py-lineno">181</tt> <a class="py-toggle" href="#" id="AddrStrategy.int_to_bits-toggle" onclick="return toggle('AddrStrategy.int_to_bits');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.int_to_bits-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.int_to_bits-expanded"><a name="L182"></a><tt class="py-lineno">182</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L183"></a><tt class="py-lineno">183</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L184"></a><tt class="py-lineno">184</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L185"></a><tt class="py-lineno">185</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network address in readable binary form that is equivalent</tt> </tt>
-<a name="L186"></a><tt class="py-lineno">186</tt> <tt class="py-line"><tt class="py-docstring"> to value represented by a network byte order integer.</tt> </tt>
-<a name="L187"></a><tt class="py-lineno">187</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L188"></a><tt class="py-lineno">188</tt> <tt class="py-line"> <tt class="py-name">bit_words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L189"></a><tt class="py-lineno">189</tt> <tt class="py-line"> </tt>
-<a name="L190"></a><tt class="py-lineno">190</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">word</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-37" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-37', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L191"></a><tt class="py-lineno">191</tt> <tt class="py-line"> <tt id="link-38" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-38', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">word</tt><tt class="py-op">:</tt> </tt>
-<a name="L193"></a><tt class="py-lineno">193</tt> <tt class="py-line"> <tt id="link-39" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-39', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-40" class="py-name"><a title="netaddr.strategy._BYTES_TO_BITS" class="py-name" href="#" onclick="return doclink('link-40', '_BYTES_TO_BITS', 'link-14');">_BYTES_TO_BITS</a></tt><tt class="py-op">[</tt><tt class="py-name">word</tt><tt class="py-op">&amp;</tt><tt class="py-number">255</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L194"></a><tt class="py-lineno">194</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-number">8</tt> </tt>
-<a name="L195"></a><tt class="py-lineno">195</tt> <tt class="py-line"> <tt id="link-41" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-41', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L196"></a><tt class="py-lineno">196</tt> <tt class="py-line"> <tt class="py-name">bit_str</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-42" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-42', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'0'</tt><tt class="py-op">*</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> </tt>
-<a name="L197"></a><tt class="py-lineno">197</tt> <tt class="py-line"> <tt id="link-43" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-43', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'0'</tt><tt class="py-op">*</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">+</tt><tt class="py-name">bit_str</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L198"></a><tt class="py-lineno">198</tt> <tt class="py-line"> <tt class="py-name">bit_words</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-44" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-44', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L199"></a><tt class="py-lineno">199</tt> <tt class="py-line"> </tt>
-<a name="L200"></a><tt class="py-lineno">200</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">bit_words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L201"></a><tt class="py-lineno">201</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.int_to_bin"></a><div id="AddrStrategy.int_to_bin-def"><a name="L202"></a><tt class="py-lineno">202</tt> <a class="py-toggle" href="#" id="AddrStrategy.int_to_bin-toggle" onclick="return toggle('AddrStrategy.int_to_bin');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.int_to_bin-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.int_to_bin-expanded"><a name="L203"></a><tt class="py-lineno">203</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L204"></a><tt class="py-lineno">204</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network address in standard binary representation format</tt> </tt>
-<a name="L207"></a><tt class="py-lineno">207</tt> <tt class="py-line"><tt class="py-docstring"> that is equivalent to integer address value. Essentially a back</tt> </tt>
-<a name="L208"></a><tt class="py-lineno">208</tt> <tt class="py-line"><tt class="py-docstring"> port of the bin() builtin in Python 2.6.x and higher.</tt> </tt>
-<a name="L209"></a><tt class="py-lineno">209</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L210"></a><tt class="py-lineno">210</tt> <tt class="py-line"> <tt class="py-name">bit_words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L211"></a><tt class="py-lineno">211</tt> <tt class="py-line"> </tt>
-<a name="L212"></a><tt class="py-lineno">212</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">word</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-45" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-45', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L213"></a><tt class="py-lineno">213</tt> <tt class="py-line"> <tt id="link-46" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-46', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L214"></a><tt class="py-lineno">214</tt> <tt class="py-line"> <tt class="py-keyword">while</tt> <tt class="py-name">word</tt><tt class="py-op">:</tt> </tt>
-<a name="L215"></a><tt class="py-lineno">215</tt> <tt class="py-line"> <tt id="link-47" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-47', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-48" class="py-name"><a title="netaddr.strategy._BYTES_TO_BITS" class="py-name" href="#" onclick="return doclink('link-48', '_BYTES_TO_BITS', 'link-14');">_BYTES_TO_BITS</a></tt><tt class="py-op">[</tt><tt class="py-name">word</tt><tt class="py-op">&amp;</tt><tt class="py-number">255</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L216"></a><tt class="py-lineno">216</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-number">8</tt> </tt>
-<a name="L217"></a><tt class="py-lineno">217</tt> <tt class="py-line"> <tt id="link-49" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-49', 'bits', 'link-11');">bits</a></tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L218"></a><tt class="py-lineno">218</tt> <tt class="py-line"> <tt class="py-name">bit_str</tt> <tt class="py-op">=</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt id="link-50" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-50', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">or</tt> <tt class="py-string">'0'</tt><tt class="py-op">*</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt> <tt class="py-line"> <tt id="link-51" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-51', 'bits', 'link-11');">bits</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-string">'0'</tt><tt class="py-op">*</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">+</tt><tt class="py-name">bit_str</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L220"></a><tt class="py-lineno">220</tt> <tt class="py-line"> <tt class="py-name">bit_words</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt id="link-52" class="py-name"><a title="netaddr.address.Addr.bits" class="py-name" href="#" onclick="return doclink('link-52', 'bits', 'link-11');">bits</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L221"></a><tt class="py-lineno">221</tt> <tt class="py-line"> </tt>
-<a name="L222"></a><tt class="py-lineno">222</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'0b'</tt> <tt class="py-op">+</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">bit_words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L223"></a><tt class="py-lineno">223</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.int_to_words"></a><div id="AddrStrategy.int_to_words-def"><a name="L224"></a><tt class="py-lineno">224</tt> <a class="py-toggle" href="#" id="AddrStrategy.int_to_words-toggle" onclick="return toggle('AddrStrategy.int_to_words');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#int_to_words">int_to_words</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">,</tt> <tt class="py-param">num_words</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">word_size</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.int_to_words-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.int_to_words-expanded"><a name="L225"></a><tt class="py-lineno">225</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer to be split.</tt> </tt>
-<a name="L227"></a><tt class="py-lineno">227</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L228"></a><tt class="py-lineno">228</tt> <tt class="py-line"><tt class="py-docstring"> @param num_words: (optional) number of words expected in return value</tt> </tt>
-<a name="L229"></a><tt class="py-lineno">229</tt> <tt class="py-line"><tt class="py-docstring"> tuple. Uses address type default if not specified.</tt> </tt>
-<a name="L230"></a><tt class="py-lineno">230</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L231"></a><tt class="py-lineno">231</tt> <tt class="py-line"><tt class="py-docstring"> @param word_size: (optional) size/width of individual words (in bits).</tt> </tt>
-<a name="L232"></a><tt class="py-lineno">232</tt> <tt class="py-line"><tt class="py-docstring"> Uses address type default if not specified.</tt> </tt>
-<a name="L233"></a><tt class="py-lineno">233</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L234"></a><tt class="py-lineno">234</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-53" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_int()=netaddr.strategy.AddrStrategy-class.html#valid_int"><a title="netaddr.strategy.AddrStrategy.valid_int" class="py-name" href="#" onclick="return doclink('link-53', 'valid_int', 'link-53');">valid_int</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L235"></a><tt class="py-lineno">235</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">IndexError</tt><tt class="py-op">(</tt><tt class="py-string">'integer %r is out of bounds!'</tt> <tt class="py-op">%</tt> <tt class="py-name">hex</tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L236"></a><tt class="py-lineno">236</tt> <tt class="py-line"> </tt>
-<a name="L237"></a><tt class="py-lineno">237</tt> <tt class="py-line"> <tt class="py-comment"># Set defaults for optional args.</tt> </tt>
-<a name="L238"></a><tt class="py-lineno">238</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">num_words</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L239"></a><tt class="py-lineno">239</tt> <tt class="py-line"> <tt class="py-name">num_words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> </tt>
-<a name="L240"></a><tt class="py-lineno">240</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">word_size</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L241"></a><tt class="py-lineno">241</tt> <tt class="py-line"> <tt class="py-name">word_size</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> </tt>
-<a name="L242"></a><tt class="py-lineno">242</tt> <tt class="py-line"> </tt>
-<a name="L243"></a><tt class="py-lineno">243</tt> <tt class="py-line"> <tt class="py-name">max_word_size</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">word_size</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L244"></a><tt class="py-lineno">244</tt> <tt class="py-line"> </tt>
-<a name="L245"></a><tt class="py-lineno">245</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L246"></a><tt class="py-lineno">246</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt id="link-54" class="py-name" targets="Variable netaddr.address.IP._=netaddr.address.IP-class.html#_,Variable netaddr.strategy.EUI48Strategy._=netaddr.strategy.EUI48Strategy-class.html#_"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-54', '_', 'link-54');">_</a></tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">num_words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L247"></a><tt class="py-lineno">247</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-name">max_word_size</tt> </tt>
-<a name="L248"></a><tt class="py-lineno">248</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">word</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L249"></a><tt class="py-lineno">249</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-name">word_size</tt> </tt>
-<a name="L250"></a><tt class="py-lineno">250</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L251"></a><tt class="py-lineno">251</tt> <tt class="py-line"> </tt>
-<a name="L252"></a><tt class="py-lineno">252</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">tuple</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L253"></a><tt class="py-lineno">253</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.int_to_packed"></a><div id="AddrStrategy.int_to_packed-def"><a name="L254"></a><tt class="py-lineno">254</tt> <a class="py-toggle" href="#" id="AddrStrategy.int_to_packed-toggle" onclick="return toggle('AddrStrategy.int_to_packed');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.int_to_packed-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.int_to_packed-expanded"><a name="L255"></a><tt class="py-lineno">255</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L256"></a><tt class="py-lineno">256</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: the integer to be packed.</tt> </tt>
-<a name="L257"></a><tt class="py-lineno">257</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L258"></a><tt class="py-lineno">258</tt> <tt class="py-line"><tt class="py-docstring"> @return: a packed string that is equivalent to value represented by a</tt> </tt>
-<a name="L259"></a><tt class="py-lineno">259</tt> <tt class="py-line"><tt class="py-docstring"> network byte order integer.</tt> </tt>
-<a name="L260"></a><tt class="py-lineno">260</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L261"></a><tt class="py-lineno">261</tt> <tt class="py-line"> </tt>
-<a name="L262"></a><tt class="py-lineno">262</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-55" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-55', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L263"></a><tt class="py-lineno">263</tt> <tt class="py-line"> </tt>
-<a name="L264"></a><tt class="py-lineno">264</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L265"></a><tt class="py-lineno">265</tt> <tt class="py-line"> <tt id="link-56" class="py-name" targets="Variable netaddr.address.CIDR.fmt=netaddr.address.CIDR-class.html#fmt,Variable netaddr.address.IPRange.fmt=netaddr.address.IPRange-class.html#fmt,Variable netaddr.address.Wildcard.fmt=netaddr.address.Wildcard-class.html#fmt"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-56', 'fmt', 'link-56');">fmt</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&gt;%d%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">,</tt> <tt id="link-57" class="py-name" targets="Class netaddr.strategy.AddrStrategy=netaddr.strategy.AddrStrategy-class.html"><a title="netaddr.strategy.AddrStrategy" class="py-name" href="#" onclick="return doclink('link-57', 'AddrStrategy', 'link-57');">AddrStrategy</a></tt><tt class="py-op">.</tt><tt id="link-58" class="py-name"><a title="netaddr.strategy.AddrStrategy.STRUCT_FORMATS" class="py-name" href="#" onclick="return doclink('link-58', 'STRUCT_FORMATS', 'link-16');">STRUCT_FORMATS</a></tt><tt class="py-op">[</tt> </tt>
-<a name="L266"></a><tt class="py-lineno">266</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L267"></a><tt class="py-lineno">267</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
-<a name="L268"></a><tt class="py-lineno">268</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported word size: %d!'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L269"></a><tt class="py-lineno">269</tt> <tt class="py-line"> </tt>
-<a name="L270"></a><tt class="py-lineno">270</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt id="link-59" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-59', 'fmt', 'link-56');">fmt</a></tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L271"></a><tt class="py-lineno">271</tt> <tt class="py-line"> </tt>
-<a name="L272"></a><tt class="py-lineno">272</tt> <tt class="py-line"> </tt>
-<a name="L273"></a><tt class="py-lineno">273</tt> <tt class="py-line"> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Packed string methods.</tt> </tt>
-<a name="L275"></a><tt class="py-lineno">275</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L276"></a><tt class="py-lineno">276</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrStrategy.packed_to_int"></a><div id="AddrStrategy.packed_to_int-def"><a name="L277"></a><tt class="py-lineno">277</tt> <a class="py-toggle" href="#" id="AddrStrategy.packed_to_int-toggle" onclick="return toggle('AddrStrategy.packed_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">packed_int</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.packed_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.packed_to_int-expanded"><a name="L278"></a><tt class="py-lineno">278</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt> <tt class="py-line"><tt class="py-docstring"> @param packed_int: a packed string containing an unsigned integer.</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt> <tt class="py-line"><tt class="py-docstring"> Network byte order is assumed.</tt> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt> <tt class="py-line"><tt class="py-docstring"> of network address represented by packed binary string.</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt> <tt class="py-line"> <tt id="link-60" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-60', 'fmt', 'link-56');">fmt</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&gt;%d%s'</tt> <tt class="py-op">%</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">,</tt> <tt id="link-61" class="py-name"><a title="netaddr.strategy.AddrStrategy" class="py-name" href="#" onclick="return doclink('link-61', 'AddrStrategy', 'link-57');">AddrStrategy</a></tt><tt class="py-op">.</tt><tt id="link-62" class="py-name"><a title="netaddr.strategy.AddrStrategy.STRUCT_FORMATS" class="py-name" href="#" onclick="return doclink('link-62', 'STRUCT_FORMATS', 'link-16');">STRUCT_FORMATS</a></tt><tt class="py-op">[</tt> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">KeyError</tt><tt class="py-op">:</tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'unsupported word size: %d!'</tt> <tt class="py-op">%</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt><tt class="py-op">)</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt> <tt class="py-line"> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt id="link-63" class="py-name"><a title="netaddr.address.CIDR.fmt
-netaddr.address.IPRange.fmt
-netaddr.address.Wildcard.fmt" class="py-name" href="#" onclick="return doclink('link-63', 'fmt', 'link-56');">fmt</a></tt><tt class="py-op">,</tt> <tt class="py-name">packed_int</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt> <tt class="py-line"> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enumerate</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">num</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">word</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">|</tt> <tt class="py-name">word</tt> </tt>
-<a name="L299"></a><tt class="py-lineno">299</tt> <tt class="py-line"> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">int_val</tt> </tt>
-</div><a name="L301"></a><tt class="py-lineno">301</tt> <tt class="py-line"> </tt>
-<a name="L302"></a><tt class="py-lineno">302</tt> <tt class="py-line"> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L303"></a><tt class="py-lineno">303</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># String methods.</tt> </tt>
-<a name="L304"></a><tt class="py-lineno">304</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrStrategy.valid_str"></a><div id="AddrStrategy.valid_str-def"><a name="L306"></a><tt class="py-lineno">306</tt> <a class="py-toggle" href="#" id="AddrStrategy.valid_str-toggle" onclick="return toggle('AddrStrategy.valid_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#valid_str">valid_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.valid_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.valid_str-expanded"><a name="L307"></a><tt class="py-lineno">307</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: A network address in string form.</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if network address in string form is valid for this</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt> <tt class="py-line"><tt class="py-docstring"> address type, C{False} otherwise.</tt> </tt>
-<a name="L312"></a><tt class="py-lineno">312</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt> <tt class="py-line"> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">)</tt> </tt>
-<a name="L317"></a><tt class="py-lineno">317</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">:</tt> </tt>
-<a name="L318"></a><tt class="py-lineno">318</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L319"></a><tt class="py-lineno">319</tt> <tt class="py-line"> </tt>
-<a name="L320"></a><tt class="py-lineno">320</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L321"></a><tt class="py-lineno">321</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">token</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tokens</tt><tt class="py-op">:</tt> </tt>
-<a name="L322"></a><tt class="py-lineno">322</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_base</tt><tt class="py-op">)</tt> <tt class="py-op">&lt;=</tt> \ </tt>
-<a name="L323"></a><tt class="py-lineno">323</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt><tt class="py-op">:</tt> </tt>
-<a name="L324"></a><tt class="py-lineno">324</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L325"></a><tt class="py-lineno">325</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L326"></a><tt class="py-lineno">326</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L327"></a><tt class="py-lineno">327</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L328"></a><tt class="py-lineno">328</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L329"></a><tt class="py-lineno">329</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L330"></a><tt class="py-lineno">330</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.str_to_int"></a><div id="AddrStrategy.str_to_int-def"><a name="L331"></a><tt class="py-lineno">331</tt> <a class="py-toggle" href="#" id="AddrStrategy.str_to_int-toggle" onclick="return toggle('AddrStrategy.str_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#str_to_int">str_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.str_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.str_to_int-expanded"><a name="L332"></a><tt class="py-lineno">332</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L333"></a><tt class="py-lineno">333</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: A network address in string form.</tt> </tt>
-<a name="L334"></a><tt class="py-lineno">334</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L335"></a><tt class="py-lineno">335</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L336"></a><tt class="py-lineno">336</tt> <tt class="py-line"><tt class="py-docstring"> represented by network address in string form.</tt> </tt>
-<a name="L337"></a><tt class="py-lineno">337</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L338"></a><tt class="py-lineno">338</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-64" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_str()=netaddr.strategy.AddrStrategy-class.html#valid_str,Method netaddr.strategy.EUI48Strategy.valid_str()=netaddr.strategy.EUI48Strategy-class.html#valid_str,Method netaddr.strategy.IPv4StrategyOpt.valid_str()=netaddr.strategy.IPv4StrategyOpt-class.html#valid_str,Method netaddr.strategy.IPv6Strategy.valid_str()=netaddr.strategy.IPv6Strategy-class.html#valid_str"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-64', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L339"></a><tt class="py-lineno">339</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a recognised string representation'</tt> \ </tt>
-<a name="L340"></a><tt class="py-lineno">340</tt> <tt class="py-line"> <tt class="py-string">' of this address type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L341"></a><tt class="py-lineno">341</tt> <tt class="py-line"> </tt>
-<a name="L342"></a><tt class="py-lineno">342</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">)</tt> </tt>
-<a name="L343"></a><tt class="py-lineno">343</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_base</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">token</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tokens</tt> <tt class="py-op">]</tt> </tt>
-<a name="L344"></a><tt class="py-lineno">344</tt> <tt class="py-line"> </tt>
-<a name="L345"></a><tt class="py-lineno">345</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-65" class="py-name"><a title="netaddr.strategy.AddrStrategy.words_to_int
-netaddr.strategy.IPv4StrategyOpt.words_to_int" class="py-name" href="#" onclick="return doclink('link-65', 'words_to_int', 'link-35');">words_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L346"></a><tt class="py-lineno">346</tt> <tt class="py-line"> </tt>
-<a name="L347"></a><tt class="py-lineno">347</tt> <tt class="py-line"> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L348"></a><tt class="py-lineno">348</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Word list methods.</tt> </tt>
-<a name="L349"></a><tt class="py-lineno">349</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment">#-------------------------------------------------------------------------</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="AddrStrategy.valid_words"></a><div id="AddrStrategy.valid_words-def"><a name="L351"></a><tt class="py-lineno">351</tt> <a class="py-toggle" href="#" id="AddrStrategy.valid_words-toggle" onclick="return toggle('AddrStrategy.valid_words');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.valid_words-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.valid_words-expanded"><a name="L352"></a><tt class="py-lineno">352</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L353"></a><tt class="py-lineno">353</tt> <tt class="py-line"><tt class="py-docstring"> @param words: A sequence containing integer word values.</tt> </tt>
-<a name="L354"></a><tt class="py-lineno">354</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L355"></a><tt class="py-lineno">355</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if word sequence is valid for this address type,</tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt> <tt class="py-line"><tt class="py-docstring"> C{False} otherwise.</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">hasattr</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">,</tt> <tt class="py-string">'__iter__'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt> <tt class="py-line"> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">:</tt> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt> <tt class="py-line"> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">:</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">int</tt><tt class="py-op">,</tt> <tt class="py-name">long</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt> <tt class="py-line"> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">i</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt><tt class="py-op">:</tt> </tt>
-<a name="L369"></a><tt class="py-lineno">369</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L370"></a><tt class="py-lineno">370</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L371"></a><tt class="py-lineno">371</tt> <tt class="py-line"> </tt>
-<a name="AddrStrategy.words_to_int"></a><div id="AddrStrategy.words_to_int-def"><a name="L372"></a><tt class="py-lineno">372</tt> <a class="py-toggle" href="#" id="AddrStrategy.words_to_int-toggle" onclick="return toggle('AddrStrategy.words_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.AddrStrategy-class.html#words_to_int">words_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="AddrStrategy.words_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="AddrStrategy.words_to_int-expanded"><a name="L373"></a><tt class="py-lineno">373</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt> <tt class="py-line"><tt class="py-docstring"> @param words: A list or tuple containing integer word values.</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L377"></a><tt class="py-lineno">377</tt> <tt class="py-line"><tt class="py-docstring"> represented by word sequence.</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L379"></a><tt class="py-lineno">379</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-66" class="py-name" targets="Method netaddr.strategy.AddrStrategy.valid_words()=netaddr.strategy.AddrStrategy-class.html#valid_words"><a title="netaddr.strategy.AddrStrategy.valid_words" class="py-name" href="#" onclick="return doclink('link-66', 'valid_words', 'link-66');">valid_words</a></tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid word list!'</tt> <tt class="py-op">%</tt> <tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-<a name="L381"></a><tt class="py-lineno">381</tt> <tt class="py-line"> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt> <tt class="py-line"> <tt class="py-comment"># tuples have no reverse() method and reversed() is only available</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># in Python 2.4. Ugly but necessary.</tt> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt> <tt class="py-line"> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-name">num</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enumerate</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">num</tt> </tt>
-<a name="L391"></a><tt class="py-lineno">391</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">word</tt> <tt class="py-op">&lt;&lt;</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">*</tt> <tt class="py-name">i</tt> </tt>
-<a name="L392"></a><tt class="py-lineno">392</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">|</tt> <tt class="py-name">word</tt> </tt>
-<a name="L393"></a><tt class="py-lineno">393</tt> <tt class="py-line"> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">int_val</tt> </tt>
-</div></div><a name="L395"></a><tt class="py-lineno">395</tt> <tt class="py-line"> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IPv4StrategyStd"></a><div id="IPv4StrategyStd-def"><a name="L397"></a><tt class="py-lineno">397</tt> <a class="py-toggle" href="#" id="IPv4StrategyStd-toggle" onclick="return toggle('IPv4StrategyStd');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a><tt class="py-op">(</tt><tt class="py-base-class">AddrStrategy</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyStd-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IPv4StrategyStd-expanded"><a name="L398"></a><tt class="py-lineno">398</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L399"></a><tt class="py-lineno">399</tt> <tt class="py-line"><tt class="py-docstring"> A 'safe' L{AddrStrategy} for IPv4 addresses. Unlike L{IPv4StrategyOpt}.</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L401"></a><tt class="py-lineno">401</tt> <tt class="py-line"><tt class="py-docstring"> It contains all methods related to IPv4 addresses that the optimised</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt> <tt class="py-line"><tt class="py-docstring"> version has, without the reliance on the socket or struct modules. There</tt> </tt>
-<a name="L403"></a><tt class="py-lineno">403</tt> <tt class="py-line"><tt class="py-docstring"> are several cases where the use of this class are preferable when either</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt> <tt class="py-line"><tt class="py-docstring"> the modules mentioned do not exist on certain Python implementations or</tt> </tt>
-<a name="L405"></a><tt class="py-lineno">405</tt> <tt class="py-line"><tt class="py-docstring"> contain bugs like the infamous inet_aton('255.255.255.254') bug.</tt> </tt>
-<a name="L406"></a><tt class="py-lineno">406</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L407"></a><tt class="py-lineno">407</tt> <tt class="py-line"><tt class="py-docstring"> All methods shared between the optimised class and this one should be</tt> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt> <tt class="py-line"><tt class="py-docstring"> defined here.</tt> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPv4StrategyStd.__init__"></a><div id="IPv4StrategyStd.__init__-def"><a name="L410"></a><tt class="py-lineno">410</tt> <a class="py-toggle" href="#" id="IPv4StrategyStd.__init__-toggle" onclick="return toggle('IPv4StrategyStd.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyStd-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyStd.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyStd.__init__-expanded"><a name="L411"></a><tt class="py-lineno">411</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor."""</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-67" class="py-name" targets="Class netaddr.strategy.IPv4StrategyStd=netaddr.strategy.IPv4StrategyStd-class.html"><a title="netaddr.strategy.IPv4StrategyStd" class="py-name" href="#" onclick="return doclink('link-67', 'IPv4StrategyStd', 'link-67');">IPv4StrategyStd</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-68" class="py-name" targets="Method netaddr.address.Addr.__init__()=netaddr.address.Addr-class.html#__init__,Method netaddr.address.AddrTypeDescriptor.__init__()=netaddr.address.AddrTypeDescriptor-class.html#__init__,Method netaddr.address.AddrValueDescriptor.__init__()=netaddr.address.AddrValueDescriptor-class.html#__init__,Method netaddr.address.CIDR.__init__()=netaddr.address.CIDR-class.html#__init__,Method netaddr.address.EUI.__init__()=netaddr.address.EUI-class.html#__init__,Method netaddr.address.FormatDescriptor.__init__()=netaddr.address.FormatDescriptor-class.html#__init__,Method netaddr.address.IP.__init__()=netaddr.address.IP-class.html#__init__,Method netaddr.address.IPRange.__init__()=netaddr.address.IPRange-class.html#__init__,Method netaddr.address.IPRangeSet.__init__()=netaddr.address.IPRangeSet-class.html#__init__,Method netaddr.address.PrefixLenDescriptor.__init__()=netaddr.address.PrefixLenDescriptor-class.html#__init__,Method netaddr.address.StrategyDescriptor.__init__()=netaddr.address.StrategyDescriptor-class.html#__init__,Method netaddr.address.Wildcard.__init__()=netaddr.address.Wildcard-class.html#__init__,Method netaddr.core.PrettyPrinter.__init__()=netaddr.core.PrettyPrinter-class.html#__init__,Method netaddr.core.Publisher.__init__()=netaddr.core.Publisher-class.html#__init__,Method netaddr.eui.FileIndexer.__init__()=netaddr.eui.FileIndexer-class.html#__init__,Method netaddr.eui.IAB.__init__()=netaddr.eui.IAB-class.html#__init__,Method netaddr.eui.IABIndexParser.__init__()=netaddr.eui.IABIndexParser-class.html#__init__,Method netaddr.eui.OUI.__init__()=netaddr.eui.OUI-class.html#__init__,Method netaddr.eui.OUIIndexParser.__init__()=netaddr.eui.OUIIndexParser-class.html#__init__,Method netaddr.ip.DictUpdater.__init__()=netaddr.ip.DictUpdater-class.html#__init__,Method netaddr.ip.IPv4Parser.__init__()=netaddr.ip.IPv4Parser-class.html#__init__,Method netaddr.ip.IPv6Parser.__init__()=netaddr.ip.IPv6Parser-class.html#__init__,Method netaddr.ip.LineRecordParser.__init__()=netaddr.ip.LineRecordParser-class.html#__init__,Method netaddr.ip.MulticastParser.__init__()=netaddr.ip.MulticastParser-class.html#__init__,Method netaddr.strategy.AddrStrategy.__init__()=netaddr.strategy.AddrStrategy-class.html#__init__,Method netaddr.strategy.EUI48Strategy.__init__()=netaddr.strategy.EUI48Strategy-class.html#__init__,Method netaddr.strategy.IPv4StrategyOpt.__init__()=netaddr.strategy.IPv4StrategyOpt-class.html#__init__,Method netaddr.strategy.IPv4StrategyStd.__init__()=netaddr.strategy.IPv4StrategyStd-class.html#__init__,Method netaddr.strategy.IPv6Strategy.__init__()=netaddr.strategy.IPv6Strategy-class.html#__init__"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-68', '__init__', 'link-68');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-name">width</tt><tt class="py-op">=</tt><tt class="py-number">32</tt><tt class="py-op">,</tt> <tt class="py-name">word_size</tt><tt class="py-op">=</tt><tt class="py-number">8</tt><tt class="py-op">,</tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt> <tt class="py-line"> <tt class="py-name">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%d'</tt><tt class="py-op">,</tt> <tt class="py-name">word_sep</tt><tt class="py-op">=</tt><tt class="py-string">'.'</tt><tt class="py-op">,</tt> <tt id="link-69" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-69', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">=</tt><tt id="link-70" class="py-name"><a title="netaddr.AT_INET" class="py-name" href="#" onclick="return doclink('link-70', 'AT_INET', 'link-5');">AT_INET</a></tt><tt class="py-op">,</tt> <tt class="py-name">word_base</tt><tt class="py-op">=</tt><tt class="py-number">10</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L414"></a><tt class="py-lineno">414</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyStd.int_to_arpa"></a><div id="IPv4StrategyStd.int_to_arpa-def"><a name="L415"></a><tt class="py-lineno">415</tt> <a class="py-toggle" href="#" id="IPv4StrategyStd.int_to_arpa-toggle" onclick="return toggle('IPv4StrategyStd.int_to_arpa');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa">int_to_arpa</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyStd.int_to_arpa-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyStd.int_to_arpa-expanded"><a name="L416"></a><tt class="py-lineno">416</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L417"></a><tt class="py-lineno">417</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L418"></a><tt class="py-lineno">418</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L419"></a><tt class="py-lineno">419</tt> <tt class="py-line"><tt class="py-docstring"> @return: The reverse DNS lookup for an IPv4 address in network byte</tt> </tt>
-<a name="L420"></a><tt class="py-lineno">420</tt> <tt class="py-line"><tt class="py-docstring"> order integer form.</tt> </tt>
-<a name="L421"></a><tt class="py-lineno">421</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%d"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-71" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-71', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L423"></a><tt class="py-lineno">423</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt> <tt class="py-line"> <tt class="py-name">words</tt><tt class="py-op">.</tt><tt class="py-name">extend</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'in-addr'</tt><tt class="py-op">,</tt> <tt class="py-string">'arpa'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L425"></a><tt class="py-lineno">425</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L426"></a><tt class="py-lineno">426</tt> <tt class="py-line"> </tt>
-<a name="L427"></a><tt class="py-lineno">427</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IPv4StrategyOpt"></a><div id="IPv4StrategyOpt-def"><a name="L428"></a><tt class="py-lineno">428</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt-toggle" onclick="return toggle('IPv4StrategyOpt');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a><tt class="py-op">(</tt><tt class="py-base-class">IPv4StrategyStd</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IPv4StrategyOpt-expanded"><a name="L429"></a><tt class="py-lineno">429</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt> <tt class="py-line"><tt class="py-docstring"> An optimised L{AddrStrategy} for IPv4 addresses.</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L432"></a><tt class="py-lineno">432</tt> <tt class="py-line"><tt class="py-docstring"> It uses C{pack()} and C{unpack()} from the C{struct} module along with the</tt> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt> <tt class="py-line"><tt class="py-docstring"> C{inet_ntoa()} and C{inet_aton()} from the C{socket} module great improve</tt> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt> <tt class="py-line"><tt class="py-docstring"> the speed of certain operations (approx. 2.5 times faster than a standard</tt> </tt>
-<a name="L435"></a><tt class="py-lineno">435</tt> <tt class="py-line"><tt class="py-docstring"> L{AddrStrategy} configured for IPv4).</tt> </tt>
-<a name="L436"></a><tt class="py-lineno">436</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L437"></a><tt class="py-lineno">437</tt> <tt class="py-line"><tt class="py-docstring"> However, keep in mind that these modules might not be available everywhere</tt> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt> <tt class="py-line"><tt class="py-docstring"> that Python itself is. Runtimes such as Google App Engine gut the</tt> </tt>
-<a name="L439"></a><tt class="py-lineno">439</tt> <tt class="py-line"><tt class="py-docstring"> C{socket} module. C{struct} is also limited to processing 32-bit integers</tt> </tt>
-<a name="L440"></a><tt class="py-lineno">440</tt> <tt class="py-line"><tt class="py-docstring"> which is fine for IPv4 but isn't suitable for IPv6.</tt> </tt>
-<a name="L441"></a><tt class="py-lineno">441</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPv4StrategyOpt.__init__"></a><div id="IPv4StrategyOpt.__init__-def"><a name="L442"></a><tt class="py-lineno">442</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.__init__-toggle" onclick="return toggle('IPv4StrategyOpt.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.__init__-expanded"><a name="L443"></a><tt class="py-lineno">443</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor."""</tt> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt id="link-72" class="py-name" targets="Class netaddr.strategy.IPv4StrategyOpt=netaddr.strategy.IPv4StrategyOpt-class.html"><a title="netaddr.strategy.IPv4StrategyOpt" class="py-name" href="#" onclick="return doclink('link-72', 'IPv4StrategyOpt', 'link-72');">IPv4StrategyOpt</a></tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-73" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-73', '__init__', 'link-68');">__init__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L445"></a><tt class="py-lineno">445</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyOpt.valid_str"></a><div id="IPv4StrategyOpt.valid_str-def"><a name="L446"></a><tt class="py-lineno">446</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.valid_str-toggle" onclick="return toggle('IPv4StrategyOpt.valid_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#valid_str">valid_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.valid_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.valid_str-expanded"><a name="L447"></a><tt class="py-lineno">447</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An IP address in presentation (string) format.</tt> </tt>
-<a name="L449"></a><tt class="py-lineno">449</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L450"></a><tt class="py-lineno">450</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if network address in string form is valid for this</tt> </tt>
-<a name="L451"></a><tt class="py-lineno">451</tt> <tt class="py-line"><tt class="py-docstring"> address type, C{False} otherwise.</tt> </tt>
-<a name="L452"></a><tt class="py-lineno">452</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L453"></a><tt class="py-lineno">453</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L454"></a><tt class="py-lineno">454</tt> <tt class="py-line"> <tt class="py-comment"># This call handles a lot of older IPv4 address formats that</tt> </tt>
-<a name="L455"></a><tt class="py-lineno">455</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># it would be a lot of work to implement (many edge cases).</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># Please Note: only this optimised strategy class will have</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># the ability to parse these less common formats for the</tt> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># moment.</tt> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">inet_aton</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">error</tt><tt class="py-op">:</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L462"></a><tt class="py-lineno">462</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">TypeError</tt><tt class="py-op">:</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L464"></a><tt class="py-lineno">464</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L465"></a><tt class="py-lineno">465</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyOpt.str_to_int"></a><div id="IPv4StrategyOpt.str_to_int-def"><a name="L466"></a><tt class="py-lineno">466</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.str_to_int-toggle" onclick="return toggle('IPv4StrategyOpt.str_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int">str_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.str_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.str_to_int-expanded"><a name="L467"></a><tt class="py-lineno">467</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L468"></a><tt class="py-lineno">468</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An IPv4 dotted decimal address in string form.</tt> </tt>
-<a name="L469"></a><tt class="py-lineno">469</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L470"></a><tt class="py-lineno">470</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt> <tt class="py-line"><tt class="py-docstring"> represented by the IPv4 dotted decimal address string.</tt> </tt>
-<a name="L472"></a><tt class="py-lineno">472</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-74" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-74', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L474"></a><tt class="py-lineno">474</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid IPv4 address string!'</tt> \ </tt>
-<a name="L475"></a><tt class="py-lineno">475</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L476"></a><tt class="py-lineno">476</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;I'</tt><tt class="py-op">,</tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">inet_aton</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-</div><a name="L477"></a><tt class="py-lineno">477</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyOpt.int_to_str"></a><div id="IPv4StrategyOpt.int_to_str-def"><a name="L478"></a><tt class="py-lineno">478</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.int_to_str-toggle" onclick="return toggle('IPv4StrategyOpt.int_to_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str">int_to_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.int_to_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.int_to_str-expanded"><a name="L479"></a><tt class="py-lineno">479</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L480"></a><tt class="py-lineno">480</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L481"></a><tt class="py-lineno">481</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L482"></a><tt class="py-lineno">482</tt> <tt class="py-line"><tt class="py-docstring"> @return: An IPv4 dotted decimal address string that is equivalent to</tt> </tt>
-<a name="L483"></a><tt class="py-lineno">483</tt> <tt class="py-line"><tt class="py-docstring"> value represented by a 32 bit integer in network byte order.</tt> </tt>
-<a name="L484"></a><tt class="py-lineno">484</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L485"></a><tt class="py-lineno">485</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-75" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_int" class="py-name" href="#" onclick="return doclink('link-75', 'valid_int', 'link-53');">valid_int</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L486"></a><tt class="py-lineno">486</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid 32-bit integer!'</tt> <tt class="py-op">%</tt> <tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L487"></a><tt class="py-lineno">487</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_socket</tt><tt class="py-op">.</tt><tt class="py-name">inet_ntoa</tt><tt class="py-op">(</tt><tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;I'</tt><tt class="py-op">,</tt> <tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L488"></a><tt class="py-lineno">488</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyOpt.int_to_words"></a><div id="IPv4StrategyOpt.int_to_words-def"><a name="L489"></a><tt class="py-lineno">489</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.int_to_words-toggle" onclick="return toggle('IPv4StrategyOpt.int_to_words');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words">int_to_words</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">,</tt> <tt class="py-param">num_words</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">word_size</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.int_to_words-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.int_to_words-expanded"><a name="L490"></a><tt class="py-lineno">490</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L491"></a><tt class="py-lineno">491</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L492"></a><tt class="py-lineno">492</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L493"></a><tt class="py-lineno">493</tt> <tt class="py-line"><tt class="py-docstring"> @param num_words: (unused) *** interface compatibility only ***</tt> </tt>
-<a name="L494"></a><tt class="py-lineno">494</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L495"></a><tt class="py-lineno">495</tt> <tt class="py-line"><tt class="py-docstring"> @param word_size: (unused) *** interface compatibility only ***</tt> </tt>
-<a name="L496"></a><tt class="py-lineno">496</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L497"></a><tt class="py-lineno">497</tt> <tt class="py-line"><tt class="py-docstring"> @return: An integer word (octet) sequence that is equivalent to value</tt> </tt>
-<a name="L498"></a><tt class="py-lineno">498</tt> <tt class="py-line"><tt class="py-docstring"> represented by network byte order integer.</tt> </tt>
-<a name="L499"></a><tt class="py-lineno">499</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L500"></a><tt class="py-lineno">500</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-76" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_int" class="py-name" href="#" onclick="return doclink('link-76', 'valid_int', 'link-53');">valid_int</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L501"></a><tt class="py-lineno">501</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid integer value supported '</tt> \ </tt>
-<a name="L502"></a><tt class="py-lineno">502</tt> <tt class="py-line"> <tt class="py-string">'by this address type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L503"></a><tt class="py-lineno">503</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">'4B'</tt><tt class="py-op">,</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;I'</tt><tt class="py-op">,</tt> <tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L504"></a><tt class="py-lineno">504</tt> <tt class="py-line"> </tt>
-<a name="IPv4StrategyOpt.words_to_int"></a><div id="IPv4StrategyOpt.words_to_int-def"><a name="L505"></a><tt class="py-lineno">505</tt> <a class="py-toggle" href="#" id="IPv4StrategyOpt.words_to_int-toggle" onclick="return toggle('IPv4StrategyOpt.words_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int">words_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">octets</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv4StrategyOpt.words_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv4StrategyOpt.words_to_int-expanded"><a name="L506"></a><tt class="py-lineno">506</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L507"></a><tt class="py-lineno">507</tt> <tt class="py-line"><tt class="py-docstring"> @param octets: A list or tuple containing integer octets.</tt> </tt>
-<a name="L508"></a><tt class="py-lineno">508</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L509"></a><tt class="py-lineno">509</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L510"></a><tt class="py-lineno">510</tt> <tt class="py-line"><tt class="py-docstring"> represented by word (octet) sequence.</tt> </tt>
-<a name="L511"></a><tt class="py-lineno">511</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L512"></a><tt class="py-lineno">512</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-77" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_words" class="py-name" href="#" onclick="return doclink('link-77', 'valid_words', 'link-66');">valid_words</a></tt><tt class="py-op">(</tt><tt class="py-name">octets</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L513"></a><tt class="py-lineno">513</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid octet list for an IPv4 '</tt> \ </tt>
-<a name="L514"></a><tt class="py-lineno">514</tt> <tt class="py-line"> <tt class="py-string">'address!'</tt> <tt class="py-op">%</tt> <tt class="py-name">octets</tt><tt class="py-op">)</tt> </tt>
-<a name="L515"></a><tt class="py-lineno">515</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">unpack</tt><tt class="py-op">(</tt><tt class="py-string">'&gt;I'</tt><tt class="py-op">,</tt> <tt class="py-name">_struct</tt><tt class="py-op">.</tt><tt class="py-name">pack</tt><tt class="py-op">(</tt><tt class="py-string">'4B'</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-name">octets</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-</div></div><a name="L516"></a><tt class="py-lineno">516</tt> <tt class="py-line"> </tt>
-<a name="L517"></a><tt class="py-lineno">517</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="IPv6Strategy"></a><div id="IPv6Strategy-def"><a name="L518"></a><tt class="py-lineno">518</tt> <a class="py-toggle" href="#" id="IPv6Strategy-toggle" onclick="return toggle('IPv6Strategy');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a><tt class="py-op">(</tt><tt class="py-base-class">AddrStrategy</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="IPv6Strategy-expanded"><a name="L519"></a><tt class="py-lineno">519</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L520"></a><tt class="py-lineno">520</tt> <tt class="py-line"><tt class="py-docstring"> Implements the operations that can be performed on an Internet Protocol</tt> </tt>
-<a name="L521"></a><tt class="py-lineno">521</tt> <tt class="py-line"><tt class="py-docstring"> version 6 network address in accordance with RFC 4291.</tt> </tt>
-<a name="L522"></a><tt class="py-lineno">522</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L523"></a><tt class="py-lineno">523</tt> <tt class="py-line"><tt class="py-docstring"> NB - This class would benefit greatly from access to inet_pton/inet_ntop()</tt> </tt>
-<a name="L524"></a><tt class="py-lineno">524</tt> <tt class="py-line"><tt class="py-docstring"> function calls in Python's socket module. Sadly, they aren't available so</tt> </tt>
-<a name="L525"></a><tt class="py-lineno">525</tt> <tt class="py-line"><tt class="py-docstring"> we'll have to put up with the pure-Python implementation here (for now at</tt> </tt>
-<a name="L526"></a><tt class="py-lineno">526</tt> <tt class="py-line"><tt class="py-docstring"> least).</tt> </tt>
-<a name="L527"></a><tt class="py-lineno">527</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="IPv6Strategy.__init__"></a><div id="IPv6Strategy.__init__-def"><a name="L528"></a><tt class="py-lineno">528</tt> <a class="py-toggle" href="#" id="IPv6Strategy.__init__-toggle" onclick="return toggle('IPv6Strategy.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Strategy.__init__-expanded"><a name="L529"></a><tt class="py-lineno">529</tt> <tt class="py-line"> <tt class="py-docstring">"""Constructor."""</tt> </tt>
-<a name="L530"></a><tt class="py-lineno">530</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-78" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-78', '__init__', 'link-68');">__init__</a></tt><tt class="py-op">(</tt><tt id="link-79" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-79', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">=</tt><tt id="link-80" class="py-name"><a title="netaddr.AT_INET6" class="py-name" href="#" onclick="return doclink('link-80', 'AT_INET6', 'link-6');">AT_INET6</a></tt><tt class="py-op">,</tt> </tt>
-<a name="L531"></a><tt class="py-lineno">531</tt> <tt class="py-line"> <tt class="py-name">width</tt><tt class="py-op">=</tt><tt class="py-number">128</tt><tt class="py-op">,</tt> <tt class="py-name">word_size</tt><tt class="py-op">=</tt><tt class="py-number">16</tt><tt class="py-op">,</tt> <tt class="py-name">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%x'</tt><tt class="py-op">,</tt> <tt class="py-name">word_sep</tt><tt class="py-op">=</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L532"></a><tt class="py-lineno">532</tt> <tt class="py-line"> </tt>
-<a name="IPv6Strategy.valid_str"></a><div id="IPv6Strategy.valid_str-def"><a name="L533"></a><tt class="py-lineno">533</tt> <a class="py-toggle" href="#" id="IPv6Strategy.valid_str-toggle" onclick="return toggle('IPv6Strategy.valid_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html#valid_str">valid_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy.valid_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Strategy.valid_str-expanded"><a name="L534"></a><tt class="py-lineno">534</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L535"></a><tt class="py-lineno">535</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An IPv6 address in string form.</tt> </tt>
-<a name="L536"></a><tt class="py-lineno">536</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L537"></a><tt class="py-lineno">537</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if IPv6 network address string is valid, C{False}</tt> </tt>
-<a name="L538"></a><tt class="py-lineno">538</tt> <tt class="py-line"><tt class="py-docstring"> otherwise.</tt> </tt>
-<a name="L539"></a><tt class="py-lineno">539</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L540"></a><tt class="py-lineno">540</tt> <tt class="py-line"> <tt class="py-comment">#TODO: Reduce the length of this method ...</tt> </tt>
-<a name="L541"></a><tt class="py-lineno">541</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L542"></a><tt class="py-lineno">542</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L543"></a><tt class="py-lineno">543</tt> <tt class="py-line"> </tt>
-<a name="L544"></a><tt class="py-lineno">544</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'::'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L545"></a><tt class="py-lineno">545</tt> <tt class="py-line"> <tt class="py-comment"># IPv6 compact mode.</tt> </tt>
-<a name="L546"></a><tt class="py-lineno">546</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L547"></a><tt class="py-lineno">547</tt> <tt class="py-line"> <tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'::'</tt><tt class="py-op">)</tt> </tt>
-<a name="L548"></a><tt class="py-lineno">548</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L549"></a><tt class="py-lineno">549</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L550"></a><tt class="py-lineno">550</tt> <tt class="py-line"> </tt>
-<a name="L551"></a><tt class="py-lineno">551</tt> <tt class="py-line"> <tt class="py-name">l_prefix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L552"></a><tt class="py-lineno">552</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L553"></a><tt class="py-lineno">553</tt> <tt class="py-line"> </tt>
-<a name="L554"></a><tt class="py-lineno">554</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prefix</tt> <tt class="py-op">!=</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L555"></a><tt class="py-lineno">555</tt> <tt class="py-line"> <tt class="py-name">l_prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">prefix</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L556"></a><tt class="py-lineno">556</tt> <tt class="py-line"> </tt>
-<a name="L557"></a><tt class="py-lineno">557</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">suffix</tt> <tt class="py-op">!=</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L558"></a><tt class="py-lineno">558</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">suffix</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L559"></a><tt class="py-lineno">559</tt> <tt class="py-line"> </tt>
-<a name="L560"></a><tt class="py-lineno">560</tt> <tt class="py-line"> <tt class="py-comment"># IPv6 compact IPv4 compatibility mode.</tt> </tt>
-<a name="L561"></a><tt class="py-lineno">561</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'.'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L562"></a><tt class="py-lineno">562</tt> <tt class="py-line"> <tt class="py-name">ipv4_str</tt> <tt class="py-op">=</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L563"></a><tt class="py-lineno">563</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-81" class="py-name" targets="Variable netaddr.ST_IPV4=netaddr-module.html#ST_IPV4,Variable netaddr.strategy.ST_IPV4=netaddr.strategy-module.html#ST_IPV4"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-81', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-82" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-82', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L564"></a><tt class="py-lineno">564</tt> <tt class="py-line"> <tt class="py-name">ipv4_int</tt> <tt class="py-op">=</tt> <tt id="link-83" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-83', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-84" class="py-name" targets="Method netaddr.strategy.AddrStrategy.str_to_int()=netaddr.strategy.AddrStrategy-class.html#str_to_int,Method netaddr.strategy.EUI48Strategy.str_to_int()=netaddr.strategy.EUI48Strategy-class.html#str_to_int,Method netaddr.strategy.IPv4StrategyOpt.str_to_int()=netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int,Method netaddr.strategy.IPv6Strategy.str_to_int()=netaddr.strategy.IPv6Strategy-class.html#str_to_int"><a title="netaddr.strategy.AddrStrategy.str_to_int
-netaddr.strategy.EUI48Strategy.str_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int
-netaddr.strategy.IPv6Strategy.str_to_int" class="py-name" href="#" onclick="return doclink('link-84', 'str_to_int', 'link-84');">str_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt> </tt>
-<a name="L565"></a><tt class="py-lineno">565</tt> <tt class="py-line"> <tt class="py-name">ipv4_words</tt> <tt class="py-op">=</tt> <tt id="link-85" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-85', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-86" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-86', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_int</tt><tt class="py-op">)</tt> </tt>
-<a name="L566"></a><tt class="py-lineno">566</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L567"></a><tt class="py-lineno">567</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L568"></a><tt class="py-lineno">568</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L569"></a><tt class="py-lineno">569</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L570"></a><tt class="py-lineno">570</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L571"></a><tt class="py-lineno">571</tt> <tt class="py-line"> </tt>
-<a name="L572"></a><tt class="py-lineno">572</tt> <tt class="py-line"> <tt class="py-name">token_count</tt> <tt class="py-op">=</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_prefix</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> </tt>
-<a name="L573"></a><tt class="py-lineno">573</tt> <tt class="py-line"> </tt>
-<a name="L574"></a><tt class="py-lineno">574</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">token_count</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L575"></a><tt class="py-lineno">575</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L576"></a><tt class="py-lineno">576</tt> <tt class="py-line"> </tt>
-<a name="L577"></a><tt class="py-lineno">577</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L578"></a><tt class="py-lineno">578</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">token</tt> <tt class="py-keyword">in</tt> <tt class="py-name">l_prefix</tt> <tt class="py-op">+</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">:</tt> </tt>
-<a name="L579"></a><tt class="py-lineno">579</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L580"></a><tt class="py-lineno">580</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">word</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt><tt class="py-op">:</tt> </tt>
-<a name="L581"></a><tt class="py-lineno">581</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L582"></a><tt class="py-lineno">582</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L583"></a><tt class="py-lineno">583</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L584"></a><tt class="py-lineno">584</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L585"></a><tt class="py-lineno">585</tt> <tt class="py-line"> <tt class="py-comment"># IPv6 verbose mode.</tt> </tt>
-<a name="L586"></a><tt class="py-lineno">586</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">':'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L587"></a><tt class="py-lineno">587</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L588"></a><tt class="py-lineno">588</tt> <tt class="py-line"> </tt>
-<a name="L589"></a><tt class="py-lineno">589</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-string">'.'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L590"></a><tt class="py-lineno">590</tt> <tt class="py-line"> <tt class="py-name">ipv6_prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">tokens</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L591"></a><tt class="py-lineno">591</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ipv6_prefix</tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">!=</tt> <tt class="py-op">[</tt><tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'0'</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L592"></a><tt class="py-lineno">592</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L593"></a><tt class="py-lineno">593</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">ipv6_prefix</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-keyword">not</tt> <tt class="py-keyword">in</tt> <tt class="py-op">(</tt><tt class="py-string">'0'</tt><tt class="py-op">,</tt> <tt class="py-string">'ffff'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L594"></a><tt class="py-lineno">594</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L595"></a><tt class="py-lineno">595</tt> <tt class="py-line"> <tt class="py-comment"># IPv6 verbose IPv4 compatibility mode.</tt> </tt>
-<a name="L596"></a><tt class="py-lineno">596</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L597"></a><tt class="py-lineno">597</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L598"></a><tt class="py-lineno">598</tt> <tt class="py-line"> <tt class="py-name">ipv4_str</tt> <tt class="py-op">=</tt> <tt class="py-name">tokens</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L599"></a><tt class="py-lineno">599</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-87" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-87', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-88" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-88', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L600"></a><tt class="py-lineno">600</tt> <tt class="py-line"> <tt class="py-name">ipv4_int</tt> <tt class="py-op">=</tt> <tt id="link-89" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-89', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-90" class="py-name"><a title="netaddr.strategy.AddrStrategy.str_to_int
-netaddr.strategy.EUI48Strategy.str_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int
-netaddr.strategy.IPv6Strategy.str_to_int" class="py-name" href="#" onclick="return doclink('link-90', 'str_to_int', 'link-84');">str_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt> </tt>
-<a name="L601"></a><tt class="py-lineno">601</tt> <tt class="py-line"> <tt class="py-name">ipv4_words</tt> <tt class="py-op">=</tt> <tt id="link-91" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-91', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-92" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-92', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_int</tt><tt class="py-op">)</tt> </tt>
-<a name="L602"></a><tt class="py-lineno">602</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L603"></a><tt class="py-lineno">603</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L604"></a><tt class="py-lineno">604</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L605"></a><tt class="py-lineno">605</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L606"></a><tt class="py-lineno">606</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L607"></a><tt class="py-lineno">607</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L608"></a><tt class="py-lineno">608</tt> <tt class="py-line"> <tt class="py-comment"># IPv6 verbose mode.</tt> </tt>
-<a name="L609"></a><tt class="py-lineno">609</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">:</tt> </tt>
-<a name="L610"></a><tt class="py-lineno">610</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L611"></a><tt class="py-lineno">611</tt> <tt class="py-line"> <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L612"></a><tt class="py-lineno">612</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">token</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tokens</tt><tt class="py-op">:</tt> </tt>
-<a name="L613"></a><tt class="py-lineno">613</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L614"></a><tt class="py-lineno">614</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-number">0</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">word</tt> <tt class="py-op">&lt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt><tt class="py-op">:</tt> </tt>
-<a name="L615"></a><tt class="py-lineno">615</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L616"></a><tt class="py-lineno">616</tt> <tt class="py-line"> <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
-<a name="L617"></a><tt class="py-lineno">617</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L618"></a><tt class="py-lineno">618</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L619"></a><tt class="py-lineno">619</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L620"></a><tt class="py-lineno">620</tt> <tt class="py-line"> </tt>
-<a name="L621"></a><tt class="py-lineno">621</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L622"></a><tt class="py-lineno">622</tt> <tt class="py-line"> </tt>
-<a name="IPv6Strategy.str_to_int"></a><div id="IPv6Strategy.str_to_int-def"><a name="L623"></a><tt class="py-lineno">623</tt> <a class="py-toggle" href="#" id="IPv6Strategy.str_to_int-toggle" onclick="return toggle('IPv6Strategy.str_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html#str_to_int">str_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy.str_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Strategy.str_to_int-expanded"><a name="L624"></a><tt class="py-lineno">624</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L625"></a><tt class="py-lineno">625</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An IPv6 address in string form.</tt> </tt>
-<a name="L626"></a><tt class="py-lineno">626</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L627"></a><tt class="py-lineno">627</tt> <tt class="py-line"><tt class="py-docstring"> @return: The equivalent network byte order integer for a given IPv6</tt> </tt>
-<a name="L628"></a><tt class="py-lineno">628</tt> <tt class="py-line"><tt class="py-docstring"> address.</tt> </tt>
-<a name="L629"></a><tt class="py-lineno">629</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L630"></a><tt class="py-lineno">630</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-93" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-93', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L631"></a><tt class="py-lineno">631</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"'%s' is an invalid IPv6 address!"</tt> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L632"></a><tt class="py-lineno">632</tt> <tt class="py-line"> </tt>
-<a name="L633"></a><tt class="py-lineno">633</tt> <tt class="py-line"> <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L634"></a><tt class="py-lineno">634</tt> <tt class="py-line"> </tt>
-<a name="L635"></a><tt class="py-lineno">635</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">addr</tt> <tt class="py-op">==</tt> <tt class="py-string">'::'</tt><tt class="py-op">:</tt> </tt>
-<a name="L636"></a><tt class="py-lineno">636</tt> <tt class="py-line"> <tt class="py-comment"># Unspecified address.</tt> </tt>
-<a name="L637"></a><tt class="py-lineno">637</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">return</tt> <tt class="py-number">0</tt> </tt>
-<a name="L638"></a><tt class="py-lineno">638</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-string">'::'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L639"></a><tt class="py-lineno">639</tt> <tt class="py-line"> <tt class="py-comment"># Abbreviated form IPv6 address.</tt> </tt>
-<a name="L640"></a><tt class="py-lineno">640</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">prefix</tt><tt class="py-op">,</tt> <tt class="py-name">suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">'::'</tt><tt class="py-op">)</tt> </tt>
-<a name="L641"></a><tt class="py-lineno">641</tt> <tt class="py-line"> </tt>
-<a name="L642"></a><tt class="py-lineno">642</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">prefix</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L643"></a><tt class="py-lineno">643</tt> <tt class="py-line"> <tt class="py-name">l_prefix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'0'</tt><tt class="py-op">]</tt> </tt>
-<a name="L644"></a><tt class="py-lineno">644</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L645"></a><tt class="py-lineno">645</tt> <tt class="py-line"> <tt class="py-name">l_prefix</tt> <tt class="py-op">=</tt> <tt class="py-name">prefix</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L646"></a><tt class="py-lineno">646</tt> <tt class="py-line"> </tt>
-<a name="L647"></a><tt class="py-lineno">647</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">suffix</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L648"></a><tt class="py-lineno">648</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">'0'</tt><tt class="py-op">]</tt> </tt>
-<a name="L649"></a><tt class="py-lineno">649</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L650"></a><tt class="py-lineno">650</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt> <tt class="py-op">=</tt> <tt class="py-name">suffix</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L651"></a><tt class="py-lineno">651</tt> <tt class="py-line"> </tt>
-<a name="L652"></a><tt class="py-lineno">652</tt> <tt class="py-line"> <tt class="py-comment"># Check for IPv4 compatibility address form.</tt> </tt>
-<a name="L653"></a><tt class="py-lineno">653</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> <tt class="py-keyword">and</tt> <tt class="py-string">'.'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L654"></a><tt class="py-lineno">654</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
-<a name="L655"></a><tt class="py-lineno">655</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L656"></a><tt class="py-lineno">656</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt> <tt class="py-keyword">and</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-string">'ffff'</tt><tt class="py-op">:</tt> </tt>
-<a name="L657"></a><tt class="py-lineno">657</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L658"></a><tt class="py-lineno">658</tt> <tt class="py-line"> </tt>
-<a name="L659"></a><tt class="py-lineno">659</tt> <tt class="py-line"> <tt class="py-name">ipv4_str</tt> <tt class="py-op">=</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L660"></a><tt class="py-lineno">660</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-94" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-94', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-95" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-95', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L661"></a><tt class="py-lineno">661</tt> <tt class="py-line"> <tt class="py-name">ipv4_int</tt> <tt class="py-op">=</tt> <tt id="link-96" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-96', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-97" class="py-name"><a title="netaddr.strategy.AddrStrategy.str_to_int
-netaddr.strategy.EUI48Strategy.str_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int
-netaddr.strategy.IPv6Strategy.str_to_int" class="py-name" href="#" onclick="return doclink('link-97', 'str_to_int', 'link-84');">str_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt> </tt>
-<a name="L662"></a><tt class="py-lineno">662</tt> <tt class="py-line"> <tt class="py-name">ipv4_words</tt> <tt class="py-op">=</tt> <tt id="link-98" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-98', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-99" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-99', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_int</tt><tt class="py-op">)</tt> </tt>
-<a name="L663"></a><tt class="py-lineno">663</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L664"></a><tt class="py-lineno">664</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L665"></a><tt class="py-lineno">665</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L666"></a><tt class="py-lineno">666</tt> <tt class="py-line"> <tt class="py-name">l_suffix</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt> </tt>
-<a name="L667"></a><tt class="py-lineno">667</tt> <tt class="py-line"> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L668"></a><tt class="py-lineno">668</tt> <tt class="py-line"> </tt>
-<a name="L669"></a><tt class="py-lineno">669</tt> <tt class="py-line"> <tt class="py-name">gap_size</tt> <tt class="py-op">=</tt> <tt class="py-number">8</tt> <tt class="py-op">-</tt> <tt class="py-op">(</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_prefix</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">l_suffix</tt><tt class="py-op">)</tt> <tt class="py-op">)</tt> </tt>
-<a name="L670"></a><tt class="py-lineno">670</tt> <tt class="py-line"> </tt>
-<a name="L671"></a><tt class="py-lineno">671</tt> <tt class="py-line"> <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%04x"</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">l_prefix</tt><tt class="py-op">]</tt> \ </tt>
-<a name="L672"></a><tt class="py-lineno">672</tt> <tt class="py-line"> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">'0000'</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">gap_size</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> \ </tt>
-<a name="L673"></a><tt class="py-lineno">673</tt> <tt class="py-line"> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">"%04x"</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">l_suffix</tt><tt class="py-op">]</tt> </tt>
-<a name="L674"></a><tt class="py-lineno">674</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L675"></a><tt class="py-lineno">675</tt> <tt class="py-line"> <tt class="py-comment"># Verbose form IPv6 address.</tt> </tt>
-<a name="L676"></a><tt class="py-lineno">676</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-string">'.'</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">:</tt> </tt>
-<a name="L677"></a><tt class="py-lineno">677</tt> <tt class="py-line"> <tt class="py-comment"># IPv4 compatiblility mode.</tt> </tt>
-<a name="L678"></a><tt class="py-lineno">678</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt> </tt>
-<a name="L679"></a><tt class="py-lineno">679</tt> <tt class="py-line"> <tt class="py-name">ipv4_str</tt> <tt class="py-op">=</tt> <tt class="py-name">tokens</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> </tt>
-<a name="L680"></a><tt class="py-lineno">680</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt id="link-100" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-100', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-101" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_str
-netaddr.strategy.EUI48Strategy.valid_str
-netaddr.strategy.IPv4StrategyOpt.valid_str
-netaddr.strategy.IPv6Strategy.valid_str" class="py-name" href="#" onclick="return doclink('link-101', 'valid_str', 'link-64');">valid_str</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L681"></a><tt class="py-lineno">681</tt> <tt class="py-line"> <tt class="py-name">ipv4_int</tt> <tt class="py-op">=</tt> <tt id="link-102" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-102', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-103" class="py-name"><a title="netaddr.strategy.AddrStrategy.str_to_int
-netaddr.strategy.EUI48Strategy.str_to_int
-netaddr.strategy.IPv4StrategyOpt.str_to_int
-netaddr.strategy.IPv6Strategy.str_to_int" class="py-name" href="#" onclick="return doclink('link-103', 'str_to_int', 'link-84');">str_to_int</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_str</tt><tt class="py-op">)</tt> </tt>
-<a name="L682"></a><tt class="py-lineno">682</tt> <tt class="py-line"> <tt class="py-name">ipv4_words</tt> <tt class="py-op">=</tt> <tt id="link-104" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-104', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt><tt class="py-op">.</tt><tt id="link-105" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-105', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">ipv4_int</tt><tt class="py-op">)</tt> </tt>
-<a name="L683"></a><tt class="py-lineno">683</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">pop</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L684"></a><tt class="py-lineno">684</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L685"></a><tt class="py-lineno">685</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">"%.2x"</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">ipv4_words</tt><tt class="py-op">[</tt><tt class="py-number">2</tt><tt class="py-op">:</tt><tt class="py-number">4</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L686"></a><tt class="py-lineno">686</tt> <tt class="py-line"> </tt>
-<a name="L687"></a><tt class="py-lineno">687</tt> <tt class="py-line"> <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%04x"</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">tokens</tt><tt class="py-op">]</tt> </tt>
-<a name="L688"></a><tt class="py-lineno">688</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L689"></a><tt class="py-lineno">689</tt> <tt class="py-line"> <tt class="py-comment"># non IPv4 compatiblility mode.</tt> </tt>
-<a name="L690"></a><tt class="py-lineno">690</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">values</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-string">"%04x"</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">i</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">split</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
-<a name="L691"></a><tt class="py-lineno">691</tt> <tt class="py-line"> </tt>
-<a name="L692"></a><tt class="py-lineno">692</tt> <tt class="py-line"> <tt id="link-106" class="py-name" targets="Variable netaddr.address.Addr.value=netaddr.address.Addr-class.html#value"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-106', 'value', 'link-106');">value</a></tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">values</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L693"></a><tt class="py-lineno">693</tt> <tt class="py-line"> </tt>
-<a name="L694"></a><tt class="py-lineno">694</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt id="link-107" class="py-name"><a title="netaddr.address.Addr.value" class="py-name" href="#" onclick="return doclink('link-107', 'value', 'link-106');">value</a></tt> </tt>
-</div><a name="L695"></a><tt class="py-lineno">695</tt> <tt class="py-line"> </tt>
-<a name="IPv6Strategy.int_to_str"></a><div id="IPv6Strategy.int_to_str-def"><a name="L696"></a><tt class="py-lineno">696</tt> <a class="py-toggle" href="#" id="IPv6Strategy.int_to_str-toggle" onclick="return toggle('IPv6Strategy.int_to_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html#int_to_str">int_to_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">,</tt> <tt class="py-param">compact</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-param">word_fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy.int_to_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Strategy.int_to_str-expanded"><a name="L697"></a><tt class="py-lineno">697</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L698"></a><tt class="py-lineno">698</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L699"></a><tt class="py-lineno">699</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L700"></a><tt class="py-lineno">700</tt> <tt class="py-line"><tt class="py-docstring"> @param compact: (optional) A boolean flag indicating if compact</tt> </tt>
-<a name="L701"></a><tt class="py-lineno">701</tt> <tt class="py-line"><tt class="py-docstring"> formatting should be used. If True, this method uses the '::'</tt> </tt>
-<a name="L702"></a><tt class="py-lineno">702</tt> <tt class="py-line"><tt class="py-docstring"> string to represent the first adjacent group of words with a value</tt> </tt>
-<a name="L703"></a><tt class="py-lineno">703</tt> <tt class="py-line"><tt class="py-docstring"> of zero. Default: True</tt> </tt>
-<a name="L704"></a><tt class="py-lineno">704</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L705"></a><tt class="py-lineno">705</tt> <tt class="py-line"><tt class="py-docstring"> @param word_fmt: (optional) The Python format string used to override</tt> </tt>
-<a name="L706"></a><tt class="py-lineno">706</tt> <tt class="py-line"><tt class="py-docstring"> formatting for each word.</tt> </tt>
-<a name="L707"></a><tt class="py-lineno">707</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L708"></a><tt class="py-lineno">708</tt> <tt class="py-line"><tt class="py-docstring"> @return: The IPv6 string form equal to the network byte order integer</tt> </tt>
-<a name="L709"></a><tt class="py-lineno">709</tt> <tt class="py-line"><tt class="py-docstring"> value provided.</tt> </tt>
-<a name="L710"></a><tt class="py-lineno">710</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L711"></a><tt class="py-lineno">711</tt> <tt class="py-line"> <tt class="py-comment"># Use basic parent class implementation if compact string form is</tt> </tt>
-<a name="L712"></a><tt class="py-lineno">712</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># not required.</tt> </tt>
-<a name="L713"></a><tt class="py-lineno">713</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">compact</tt><tt class="py-op">:</tt> </tt>
-<a name="L714"></a><tt class="py-lineno">714</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-108" class="py-name" targets="Method netaddr.strategy.AddrStrategy.int_to_str()=netaddr.strategy.AddrStrategy-class.html#int_to_str,Method netaddr.strategy.EUI48Strategy.int_to_str()=netaddr.strategy.EUI48Strategy-class.html#int_to_str,Method netaddr.strategy.IPv4StrategyOpt.int_to_str()=netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str,Method netaddr.strategy.IPv6Strategy.int_to_str()=netaddr.strategy.IPv6Strategy-class.html#int_to_str"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-108', 'int_to_str', 'link-108');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L715"></a><tt class="py-lineno">715</tt> <tt class="py-line"> </tt>
-<a name="L716"></a><tt class="py-lineno">716</tt> <tt class="py-line"> <tt class="py-name">_word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_fmt</tt> </tt>
-<a name="L717"></a><tt class="py-lineno">717</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">word_fmt</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L718"></a><tt class="py-lineno">718</tt> <tt class="py-line"> <tt class="py-name">_word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">word_fmt</tt> </tt>
-<a name="L719"></a><tt class="py-lineno">719</tt> <tt class="py-line"> </tt>
-<a name="L720"></a><tt class="py-lineno">720</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-109" class="py-name"><a title="netaddr.strategy.AddrStrategy.valid_int" class="py-name" href="#" onclick="return doclink('link-109', 'valid_int', 'link-53');">valid_int</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L721"></a><tt class="py-lineno">721</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a valid integer value supported '</tt> \ </tt>
-<a name="L722"></a><tt class="py-lineno">722</tt> <tt class="py-line"> <tt class="py-string">'by this address type!'</tt> <tt class="py-op">%</tt> <tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L723"></a><tt class="py-lineno">723</tt> <tt class="py-line"> </tt>
-<a name="L724"></a><tt class="py-lineno">724</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L725"></a><tt class="py-lineno">725</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">range</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L726"></a><tt class="py-lineno">726</tt> <tt class="py-line"> <tt class="py-name">word</tt> <tt class="py-op">=</tt> <tt class="py-name">int_val</tt> <tt class="py-op">&amp;</tt> <tt class="py-op">(</tt><tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt><tt class="py-op">)</tt> </tt>
-<a name="L727"></a><tt class="py-lineno">727</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">+=</tt> <tt class="py-op">[</tt><tt class="py-name">_word_fmt</tt> <tt class="py-op">%</tt> <tt class="py-name">word</tt><tt class="py-op">]</tt> </tt>
-<a name="L728"></a><tt class="py-lineno">728</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">&gt;&gt;=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> </tt>
-<a name="L729"></a><tt class="py-lineno">729</tt> <tt class="py-line"> </tt>
-<a name="L730"></a><tt class="py-lineno">730</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L731"></a><tt class="py-lineno">731</tt> <tt class="py-line"> </tt>
-<a name="L732"></a><tt class="py-lineno">732</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">compact</tt> <tt class="py-op">==</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L733"></a><tt class="py-lineno">733</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L734"></a><tt class="py-lineno">734</tt> <tt class="py-line"> </tt>
-<a name="L735"></a><tt class="py-lineno">735</tt> <tt class="py-line"> <tt class="py-name">positions</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L736"></a><tt class="py-lineno">736</tt> <tt class="py-line"> <tt class="py-name">within_run</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L737"></a><tt class="py-lineno">737</tt> <tt class="py-line"> <tt class="py-name">start_index</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L738"></a><tt class="py-lineno">738</tt> <tt class="py-line"> <tt class="py-name">num_tokens</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L739"></a><tt class="py-lineno">739</tt> <tt class="py-line"> </tt>
-<a name="L740"></a><tt class="py-lineno">740</tt> <tt class="py-line"> <tt class="py-comment"># Discover all runs of zeros.</tt> </tt>
-<a name="L741"></a><tt class="py-lineno">741</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">for</tt> <tt class="py-name">idx</tt><tt class="py-op">,</tt> <tt class="py-name">token</tt> <tt class="py-keyword">in</tt> <tt class="py-name">enumerate</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L742"></a><tt class="py-lineno">742</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">token</tt> <tt class="py-op">==</tt> <tt class="py-string">'0'</tt><tt class="py-op">:</tt> </tt>
-<a name="L743"></a><tt class="py-lineno">743</tt> <tt class="py-line"> <tt class="py-name">within_run</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L744"></a><tt class="py-lineno">744</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">start_index</tt> <tt class="py-keyword">is</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L745"></a><tt class="py-lineno">745</tt> <tt class="py-line"> <tt class="py-name">start_index</tt> <tt class="py-op">=</tt> <tt class="py-name">idx</tt> </tt>
-<a name="L746"></a><tt class="py-lineno">746</tt> <tt class="py-line"> <tt class="py-name">num_tokens</tt> <tt class="py-op">+=</tt> <tt class="py-number">1</tt> </tt>
-<a name="L747"></a><tt class="py-lineno">747</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L748"></a><tt class="py-lineno">748</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">num_tokens</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L749"></a><tt class="py-lineno">749</tt> <tt class="py-line"> <tt class="py-name">positions</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">num_tokens</tt><tt class="py-op">,</tt> <tt class="py-name">start_index</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L750"></a><tt class="py-lineno">750</tt> <tt class="py-line"> <tt class="py-name">within_run</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L751"></a><tt class="py-lineno">751</tt> <tt class="py-line"> <tt class="py-name">start_index</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L752"></a><tt class="py-lineno">752</tt> <tt class="py-line"> <tt class="py-name">num_tokens</tt> <tt class="py-op">=</tt> <tt class="py-number">0</tt> </tt>
-<a name="L753"></a><tt class="py-lineno">753</tt> <tt class="py-line"> </tt>
-<a name="L754"></a><tt class="py-lineno">754</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-name">token</tt><tt class="py-op">)</tt> </tt>
-<a name="L755"></a><tt class="py-lineno">755</tt> <tt class="py-line"> </tt>
-<a name="L756"></a><tt class="py-lineno">756</tt> <tt class="py-line"> <tt class="py-comment"># Store any position not saved before loop exit.</tt> </tt>
-<a name="L757"></a><tt class="py-lineno">757</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">num_tokens</tt> <tt class="py-op">&gt;</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L758"></a><tt class="py-lineno">758</tt> <tt class="py-line"> <tt class="py-name">positions</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-name">num_tokens</tt><tt class="py-op">,</tt> <tt class="py-name">start_index</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L759"></a><tt class="py-lineno">759</tt> <tt class="py-line"> </tt>
-<a name="L760"></a><tt class="py-lineno">760</tt> <tt class="py-line"> <tt class="py-comment"># Replace first longest run with an empty string.</tt> </tt>
-<a name="L761"></a><tt class="py-lineno">761</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">positions</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L762"></a><tt class="py-lineno">762</tt> <tt class="py-line"> <tt class="py-comment"># Locate longest, left-most run of zeros.</tt> </tt>
-<a name="L763"></a><tt class="py-lineno">763</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">positions</tt><tt class="py-op">.</tt><tt class="py-name">sort</tt><tt class="py-op">(</tt><tt class="py-keyword">lambda</tt> <tt class="py-name">x</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">:</tt> <tt class="py-name">cmp</tt><tt class="py-op">(</tt><tt class="py-name">x</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">y</tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L764"></a><tt class="py-lineno">764</tt> <tt class="py-line"> <tt class="py-name">best_position</tt> <tt class="py-op">=</tt> <tt class="py-name">positions</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L765"></a><tt class="py-lineno">765</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">position</tt> <tt class="py-keyword">in</tt> <tt class="py-name">positions</tt><tt class="py-op">:</tt> </tt>
-<a name="L766"></a><tt class="py-lineno">766</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">position</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">&gt;</tt> <tt class="py-name">best_position</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">:</tt> </tt>
-<a name="L767"></a><tt class="py-lineno">767</tt> <tt class="py-line"> <tt class="py-name">best_position</tt> <tt class="py-op">=</tt> <tt class="py-name">position</tt> </tt>
-<a name="L768"></a><tt class="py-lineno">768</tt> <tt class="py-line"> <tt class="py-comment"># Replace chosen zero run.</tt> </tt>
-<a name="L769"></a><tt class="py-lineno">769</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-op">(</tt><tt class="py-name">length</tt><tt class="py-op">,</tt> <tt class="py-name">start_idx</tt><tt class="py-op">)</tt> <tt class="py-op">=</tt> <tt class="py-name">best_position</tt> </tt>
-<a name="L770"></a><tt class="py-lineno">770</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">new_tokens</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">:</tt><tt class="py-name">start_idx</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">''</tt><tt class="py-op">]</tt> <tt class="py-op">+</tt> \ </tt>
-<a name="L771"></a><tt class="py-lineno">771</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt><tt class="py-op">[</tt><tt class="py-name">start_idx</tt><tt class="py-op">+</tt><tt class="py-name">length</tt><tt class="py-op">:</tt><tt class="py-op">]</tt> </tt>
-<a name="L772"></a><tt class="py-lineno">772</tt> <tt class="py-line"> </tt>
-<a name="L773"></a><tt class="py-lineno">773</tt> <tt class="py-line"> <tt class="py-comment"># Add start and end blanks so join creates '::'.</tt> </tt>
-<a name="L774"></a><tt class="py-lineno">774</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-keyword">if</tt> <tt class="py-name">new_tokens</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L775"></a><tt class="py-lineno">775</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt><tt class="py-op">.</tt><tt class="py-name">insert</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L776"></a><tt class="py-lineno">776</tt> <tt class="py-line"> </tt>
-<a name="L777"></a><tt class="py-lineno">777</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">new_tokens</tt><tt class="py-op">[</tt><tt class="py-op">-</tt><tt class="py-number">1</tt><tt class="py-op">]</tt> <tt class="py-op">==</tt> <tt class="py-string">''</tt><tt class="py-op">:</tt> </tt>
-<a name="L778"></a><tt class="py-lineno">778</tt> <tt class="py-line"> <tt class="py-name">new_tokens</tt><tt class="py-op">.</tt><tt class="py-name">append</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">)</tt> </tt>
-<a name="L779"></a><tt class="py-lineno">779</tt> <tt class="py-line"> </tt>
-<a name="L780"></a><tt class="py-lineno">780</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">new_tokens</tt> </tt>
-<a name="L781"></a><tt class="py-lineno">781</tt> <tt class="py-line"> </tt>
-<a name="L782"></a><tt class="py-lineno">782</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L783"></a><tt class="py-lineno">783</tt> <tt class="py-line"> </tt>
-<a name="IPv6Strategy.int_to_arpa"></a><div id="IPv6Strategy.int_to_arpa-def"><a name="L784"></a><tt class="py-lineno">784</tt> <a class="py-toggle" href="#" id="IPv6Strategy.int_to_arpa-toggle" onclick="return toggle('IPv6Strategy.int_to_arpa');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.IPv6Strategy-class.html#int_to_arpa">int_to_arpa</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="IPv6Strategy.int_to_arpa-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="IPv6Strategy.int_to_arpa-expanded"><a name="L785"></a><tt class="py-lineno">785</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L786"></a><tt class="py-lineno">786</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L787"></a><tt class="py-lineno">787</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L788"></a><tt class="py-lineno">788</tt> <tt class="py-line"><tt class="py-docstring"> @return: The reverse DNS lookup for an IPv6 address in network byte</tt> </tt>
-<a name="L789"></a><tt class="py-lineno">789</tt> <tt class="py-line"><tt class="py-docstring"> order integer form.</tt> </tt>
-<a name="L790"></a><tt class="py-lineno">790</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L791"></a><tt class="py-lineno">791</tt> <tt class="py-line"> <tt class="py-name">addr</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-110" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_str
-netaddr.strategy.EUI48Strategy.int_to_str
-netaddr.strategy.IPv4StrategyOpt.int_to_str
-netaddr.strategy.IPv6Strategy.int_to_str" class="py-name" href="#" onclick="return doclink('link-110', 'int_to_str', 'link-108');">int_to_str</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">,</tt> <tt class="py-name">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%04x'</tt><tt class="py-op">)</tt> </tt>
-<a name="L792"></a><tt class="py-lineno">792</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">replace</tt><tt class="py-op">(</tt><tt class="py-string">':'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L793"></a><tt class="py-lineno">793</tt> <tt class="py-line"> <tt class="py-name">tokens</tt><tt class="py-op">.</tt><tt class="py-name">reverse</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L794"></a><tt class="py-lineno">794</tt> <tt class="py-line"> <tt class="py-comment"># We won't support ip6.int here - see RFC 3152 for details.</tt> </tt>
-<a name="L795"></a><tt class="py-lineno">795</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-name">tokens</tt> <tt class="py-op">+</tt> <tt class="py-op">[</tt><tt class="py-string">'ip6'</tt><tt class="py-op">,</tt> <tt class="py-string">'arpa'</tt><tt class="py-op">,</tt> <tt class="py-string">''</tt><tt class="py-op">]</tt> </tt>
-<a name="L796"></a><tt class="py-lineno">796</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-string">'.'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L797"></a><tt class="py-lineno">797</tt> <tt class="py-line"> </tt>
-<a name="L798"></a><tt class="py-lineno">798</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="EUI48Strategy"></a><div id="EUI48Strategy-def"><a name="L799"></a><tt class="py-lineno">799</tt> <a class="py-toggle" href="#" id="EUI48Strategy-toggle" onclick="return toggle('EUI48Strategy');">-</a><tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">class</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a><tt class="py-op">(</tt><tt class="py-base-class">AddrStrategy</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="EUI48Strategy-expanded"><a name="L800"></a><tt class="py-lineno">800</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L801"></a><tt class="py-lineno">801</tt> <tt class="py-line"><tt class="py-docstring"> Implements the operations that can be performed on an IEEE 48-bit EUI</tt> </tt>
-<a name="L802"></a><tt class="py-lineno">802</tt> <tt class="py-line"><tt class="py-docstring"> (Extended Unique Identifer) a.k.a. a MAC (Media Access Control) layer 2</tt> </tt>
-<a name="L803"></a><tt class="py-lineno">803</tt> <tt class="py-line"><tt class="py-docstring"> address.</tt> </tt>
-<a name="L804"></a><tt class="py-lineno">804</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L805"></a><tt class="py-lineno">805</tt> <tt class="py-line"><tt class="py-docstring"> Supports all common (and some less common MAC string formats including</tt> </tt>
-<a name="L806"></a><tt class="py-lineno">806</tt> <tt class="py-line"><tt class="py-docstring"> Cisco's 'triple hextet' format and also bare MACs that contain no</tt> </tt>
-<a name="L807"></a><tt class="py-lineno">807</tt> <tt class="py-line"><tt class="py-docstring"> delimiters.</tt> </tt>
-<a name="L808"></a><tt class="py-lineno">808</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L809"></a><tt class="py-lineno">809</tt> <tt class="py-line"> <tt class="py-comment"># Regular expression to match the numerous different MAC formats.</tt> </tt>
-<a name="L810"></a><tt class="py-lineno">810</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-111" class="py-name" targets="Variable netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS=netaddr.strategy.EUI48Strategy-class.html#RE_MAC_FORMATS"><a title="netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS" class="py-name" href="#" onclick="return doclink('link-111', 'RE_MAC_FORMATS', 'link-111');">RE_MAC_FORMATS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt> </tt>
-<a name="L811"></a><tt class="py-lineno">811</tt> <tt class="py-line"> <tt class="py-comment"># 2 bytes x 6 (UNIX, Windows, EUI-48)</tt> </tt>
-<a name="L812"></a><tt class="py-lineno">812</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">':'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{1,2})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">6</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L813"></a><tt class="py-lineno">813</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{1,2})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">6</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L814"></a><tt class="py-lineno">814</tt> <tt class="py-line"> </tt>
-<a name="L815"></a><tt class="py-lineno">815</tt> <tt class="py-line"> <tt class="py-comment"># 4 bytes x 3 (Cisco)</tt> </tt>
-<a name="L816"></a><tt class="py-lineno">816</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">':'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{1,4})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">3</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L817"></a><tt class="py-lineno">817</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{1,4})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">3</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L818"></a><tt class="py-lineno">818</tt> <tt class="py-line"> </tt>
-<a name="L819"></a><tt class="py-lineno">819</tt> <tt class="py-line"> <tt class="py-comment"># 6 bytes x 2 (PostgreSQL)</tt> </tt>
-<a name="L820"></a><tt class="py-lineno">820</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">'-'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{5,6})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L821"></a><tt class="py-lineno">821</tt> <tt class="py-line"> <tt class="py-string">'^'</tt> <tt class="py-op">+</tt> <tt class="py-string">':'</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'([0-9A-F]{5,6})'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">2</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">'$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L822"></a><tt class="py-lineno">822</tt> <tt class="py-line"> </tt>
-<a name="L823"></a><tt class="py-lineno">823</tt> <tt class="py-line"> <tt class="py-comment"># 12 bytes (bare, no delimiters)</tt> </tt>
-<a name="L824"></a><tt class="py-lineno">824</tt> <tt class="py-line"> <tt class="py-string">'^('</tt> <tt class="py-op">+</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'[0-9A-F]'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">12</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">')$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L825"></a><tt class="py-lineno">825</tt> <tt class="py-line"> <tt class="py-string">'^('</tt> <tt class="py-op">+</tt> <tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'[0-9A-F]'</tt><tt class="py-op">]</tt> <tt class="py-op">*</tt> <tt class="py-number">11</tt><tt class="py-op">)</tt> <tt class="py-op">+</tt> <tt class="py-string">')$'</tt><tt class="py-op">,</tt> </tt>
-<a name="L826"></a><tt class="py-lineno">826</tt> <tt class="py-line"> <tt class="py-op">)</tt> </tt>
-<a name="L827"></a><tt class="py-lineno">827</tt> <tt class="py-line"> <tt class="py-comment"># For efficiency, replace each string regexp with its compiled</tt> </tt>
-<a name="L828"></a><tt class="py-lineno">828</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-comment"># equivalent.</tt> </tt>
-<a name="L829"></a><tt class="py-lineno">829</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt id="link-112" class="py-name"><a title="netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS" class="py-name" href="#" onclick="return doclink('link-112', 'RE_MAC_FORMATS', 'link-111');">RE_MAC_FORMATS</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">compile</tt><tt class="py-op">(</tt><tt id="link-113" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-113', '_', 'link-54');">_</a></tt><tt class="py-op">,</tt> <tt class="py-name">_re</tt><tt class="py-op">.</tt><tt class="py-name">IGNORECASE</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt id="link-114" class="py-name"><a title="netaddr.address.IP._
-netaddr.strategy.EUI48Strategy._" class="py-name" href="#" onclick="return doclink('link-114', '_', 'link-54');">_</a></tt> <tt class="py-keyword">in</tt> <tt id="link-115" class="py-name"><a title="netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS" class="py-name" href="#" onclick="return doclink('link-115', 'RE_MAC_FORMATS', 'link-111');">RE_MAC_FORMATS</a></tt><tt class="py-op">]</tt> </tt>
-<a name="L830"></a><tt class="py-lineno">830</tt> <tt class="py-line"> </tt>
-<a name="EUI48Strategy.__init__"></a><div id="EUI48Strategy.__init__-def"><a name="L831"></a><tt class="py-lineno">831</tt> <a class="py-toggle" href="#" id="EUI48Strategy.__init__-toggle" onclick="return toggle('EUI48Strategy.__init__');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%02x'</tt><tt class="py-op">,</tt> <tt class="py-param">word_sep</tt><tt class="py-op">=</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-param">uppercase</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EUI48Strategy.__init__-expanded"><a name="L832"></a><tt class="py-lineno">832</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L833"></a><tt class="py-lineno">833</tt> <tt class="py-line"><tt class="py-docstring"> Constructor.</tt> </tt>
-<a name="L834"></a><tt class="py-lineno">834</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L835"></a><tt class="py-lineno">835</tt> <tt class="py-line"><tt class="py-docstring"> @param word_sep: separator between each word.</tt> </tt>
-<a name="L836"></a><tt class="py-lineno">836</tt> <tt class="py-line"><tt class="py-docstring"> (Default: '-')</tt> </tt>
-<a name="L837"></a><tt class="py-lineno">837</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L838"></a><tt class="py-lineno">838</tt> <tt class="py-line"><tt class="py-docstring"> @param word_fmt: format string for each hextet.</tt> </tt>
-<a name="L839"></a><tt class="py-lineno">839</tt> <tt class="py-line"><tt class="py-docstring"> (Default: '%02x')</tt> </tt>
-<a name="L840"></a><tt class="py-lineno">840</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L841"></a><tt class="py-lineno">841</tt> <tt class="py-line"><tt class="py-docstring"> @param uppercase: return uppercase MAC/EUI-48 addresses.</tt> </tt>
-<a name="L842"></a><tt class="py-lineno">842</tt> <tt class="py-line"><tt class="py-docstring"> (Default: True)</tt> </tt>
-<a name="L843"></a><tt class="py-lineno">843</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L844"></a><tt class="py-lineno">844</tt> <tt class="py-line"> <tt class="py-name">super</tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">__class__</tt><tt class="py-op">,</tt> <tt class="py-name">self</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-116" class="py-name"><a title="netaddr.address.Addr.__init__
-netaddr.address.AddrTypeDescriptor.__init__
-netaddr.address.AddrValueDescriptor.__init__
-netaddr.address.CIDR.__init__
-netaddr.address.EUI.__init__
-netaddr.address.FormatDescriptor.__init__
-netaddr.address.IP.__init__
-netaddr.address.IPRange.__init__
-netaddr.address.IPRangeSet.__init__
-netaddr.address.PrefixLenDescriptor.__init__
-netaddr.address.StrategyDescriptor.__init__
-netaddr.address.Wildcard.__init__
-netaddr.core.PrettyPrinter.__init__
-netaddr.core.Publisher.__init__
-netaddr.eui.FileIndexer.__init__
-netaddr.eui.IAB.__init__
-netaddr.eui.IABIndexParser.__init__
-netaddr.eui.OUI.__init__
-netaddr.eui.OUIIndexParser.__init__
-netaddr.ip.DictUpdater.__init__
-netaddr.ip.IPv4Parser.__init__
-netaddr.ip.IPv6Parser.__init__
-netaddr.ip.LineRecordParser.__init__
-netaddr.ip.MulticastParser.__init__
-netaddr.strategy.AddrStrategy.__init__
-netaddr.strategy.EUI48Strategy.__init__
-netaddr.strategy.IPv4StrategyOpt.__init__
-netaddr.strategy.IPv4StrategyStd.__init__
-netaddr.strategy.IPv6Strategy.__init__" class="py-name" href="#" onclick="return doclink('link-116', '__init__', 'link-68');">__init__</a></tt><tt class="py-op">(</tt><tt id="link-117" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-117', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">=</tt><tt id="link-118" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-118', 'AT_LINK', 'link-7');">AT_LINK</a></tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">=</tt><tt class="py-number">48</tt><tt class="py-op">,</tt> </tt>
-<a name="L845"></a><tt class="py-lineno">845</tt> <tt class="py-line"> <tt class="py-name">word_size</tt><tt class="py-op">=</tt><tt class="py-number">8</tt><tt class="py-op">,</tt> <tt class="py-name">word_fmt</tt><tt class="py-op">=</tt><tt class="py-name">word_fmt</tt><tt class="py-op">,</tt> <tt class="py-name">word_sep</tt><tt class="py-op">=</tt><tt class="py-name">word_sep</tt><tt class="py-op">,</tt> </tt>
-<a name="L846"></a><tt class="py-lineno">846</tt> <tt class="py-line"> <tt class="py-name">uppercase</tt><tt class="py-op">=</tt><tt class="py-name">uppercase</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L847"></a><tt class="py-lineno">847</tt> <tt class="py-line"> </tt>
-<a name="EUI48Strategy.reset"></a><div id="EUI48Strategy.reset-def"><a name="L848"></a><tt class="py-lineno">848</tt> <a class="py-toggle" href="#" id="EUI48Strategy.reset-toggle" onclick="return toggle('EUI48Strategy.reset');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html#reset">reset</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy.reset-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EUI48Strategy.reset-expanded"><a name="L849"></a><tt class="py-lineno">849</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L850"></a><tt class="py-lineno">850</tt> <tt class="py-line"><tt class="py-docstring"> Resets the internal state of this strategy to safe default values.</tt> </tt>
-<a name="L851"></a><tt class="py-lineno">851</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L852"></a><tt class="py-lineno">852</tt> <tt class="py-line"> <tt class="py-comment"># These are the settings for EUI-48 specific formatting.</tt> </tt>
-<a name="L853"></a><tt class="py-lineno">853</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">=</tt> <tt class="py-number">48</tt> </tt>
-<a name="L854"></a><tt class="py-lineno">854</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_int</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L855"></a><tt class="py-lineno">855</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">=</tt> <tt class="py-number">8</tt> </tt>
-<a name="L856"></a><tt class="py-lineno">856</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">num_words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">width</tt> <tt class="py-op">/</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> </tt>
-<a name="L857"></a><tt class="py-lineno">857</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">max_word</tt> <tt class="py-op">=</tt> <tt class="py-number">2</tt> <tt class="py-op">**</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_size</tt> <tt class="py-op">-</tt> <tt class="py-number">1</tt> </tt>
-<a name="L858"></a><tt class="py-lineno">858</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt> <tt class="py-op">=</tt> <tt class="py-string">'-'</tt> </tt>
-<a name="L859"></a><tt class="py-lineno">859</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-string">'%02x'</tt> </tt>
-<a name="L860"></a><tt class="py-lineno">860</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_base</tt> <tt class="py-op">=</tt> <tt class="py-number">16</tt> </tt>
-<a name="L861"></a><tt class="py-lineno">861</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-119" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-119', 'addr_type', 'link-18');">addr_type</a></tt> <tt class="py-op">=</tt> <tt id="link-120" class="py-name"><a title="netaddr.AT_LINK" class="py-name" href="#" onclick="return doclink('link-120', 'AT_LINK', 'link-7');">AT_LINK</a></tt> </tt>
-<a name="L862"></a><tt class="py-lineno">862</tt> <tt class="py-line"> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uppercase</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-</div><a name="L863"></a><tt class="py-lineno">863</tt> <tt class="py-line"> </tt>
-<a name="EUI48Strategy.valid_str"></a><div id="EUI48Strategy.valid_str-def"><a name="L864"></a><tt class="py-lineno">864</tt> <a class="py-toggle" href="#" id="EUI48Strategy.valid_str-toggle" onclick="return toggle('EUI48Strategy.valid_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html#valid_str">valid_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy.valid_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EUI48Strategy.valid_str-expanded"><a name="L865"></a><tt class="py-lineno">865</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L866"></a><tt class="py-lineno">866</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An EUI-48 or MAC address in string form.</tt> </tt>
-<a name="L867"></a><tt class="py-lineno">867</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L868"></a><tt class="py-lineno">868</tt> <tt class="py-line"><tt class="py-docstring"> @return: C{True} if MAC address string is valid, C{False} otherwise.</tt> </tt>
-<a name="L869"></a><tt class="py-lineno">869</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L870"></a><tt class="py-lineno">870</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L871"></a><tt class="py-lineno">871</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-<a name="L872"></a><tt class="py-lineno">872</tt> <tt class="py-line"> </tt>
-<a name="L873"></a><tt class="py-lineno">873</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">regexp</tt> <tt class="py-keyword">in</tt> <tt id="link-121" class="py-name" targets="Class netaddr.strategy.EUI48Strategy=netaddr.strategy.EUI48Strategy-class.html"><a title="netaddr.strategy.EUI48Strategy" class="py-name" href="#" onclick="return doclink('link-121', 'EUI48Strategy', 'link-121');">EUI48Strategy</a></tt><tt class="py-op">.</tt><tt id="link-122" class="py-name"><a title="netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS" class="py-name" href="#" onclick="return doclink('link-122', 'RE_MAC_FORMATS', 'link-111');">RE_MAC_FORMATS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L874"></a><tt class="py-lineno">874</tt> <tt class="py-line"> <tt class="py-name">match_result</tt> <tt class="py-op">=</tt> <tt class="py-name">regexp</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L875"></a><tt class="py-lineno">875</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">match_result</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L876"></a><tt class="py-lineno">876</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">True</tt> </tt>
-<a name="L877"></a><tt class="py-lineno">877</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">False</tt> </tt>
-</div><a name="L878"></a><tt class="py-lineno">878</tt> <tt class="py-line"> </tt>
-<a name="EUI48Strategy.str_to_int"></a><div id="EUI48Strategy.str_to_int-def"><a name="L879"></a><tt class="py-lineno">879</tt> <a class="py-toggle" href="#" id="EUI48Strategy.str_to_int-toggle" onclick="return toggle('EUI48Strategy.str_to_int');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html#str_to_int">str_to_int</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">addr</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy.str_to_int-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EUI48Strategy.str_to_int-expanded"><a name="L880"></a><tt class="py-lineno">880</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L881"></a><tt class="py-lineno">881</tt> <tt class="py-line"><tt class="py-docstring"> @param addr: An EUI-48 or MAC address in string form.</tt> </tt>
-<a name="L882"></a><tt class="py-lineno">882</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L883"></a><tt class="py-lineno">883</tt> <tt class="py-line"><tt class="py-docstring"> @return: A network byte order integer that is equivalent to value</tt> </tt>
-<a name="L884"></a><tt class="py-lineno">884</tt> <tt class="py-line"><tt class="py-docstring"> represented by EUI-48/MAC string address.</tt> </tt>
-<a name="L885"></a><tt class="py-lineno">885</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L886"></a><tt class="py-lineno">886</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L887"></a><tt class="py-lineno">887</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">str</tt><tt class="py-op">,</tt> <tt class="py-name">unicode</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L888"></a><tt class="py-lineno">888</tt> <tt class="py-line"> <tt class="py-name">found_match</tt> <tt class="py-op">=</tt> <tt class="py-name">False</tt> </tt>
-<a name="L889"></a><tt class="py-lineno">889</tt> <tt class="py-line"> <tt class="py-keyword">for</tt> <tt class="py-name">regexp</tt> <tt class="py-keyword">in</tt> <tt id="link-123" class="py-name"><a title="netaddr.strategy.EUI48Strategy" class="py-name" href="#" onclick="return doclink('link-123', 'EUI48Strategy', 'link-121');">EUI48Strategy</a></tt><tt class="py-op">.</tt><tt id="link-124" class="py-name"><a title="netaddr.strategy.EUI48Strategy.RE_MAC_FORMATS" class="py-name" href="#" onclick="return doclink('link-124', 'RE_MAC_FORMATS', 'link-111');">RE_MAC_FORMATS</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L890"></a><tt class="py-lineno">890</tt> <tt class="py-line"> <tt class="py-name">match_result</tt> <tt class="py-op">=</tt> <tt class="py-name">regexp</tt><tt class="py-op">.</tt><tt class="py-name">findall</tt><tt class="py-op">(</tt><tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L891"></a><tt class="py-lineno">891</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">match_result</tt><tt class="py-op">)</tt> <tt class="py-op">!=</tt> <tt class="py-number">0</tt><tt class="py-op">:</tt> </tt>
-<a name="L892"></a><tt class="py-lineno">892</tt> <tt class="py-line"> <tt class="py-name">found_match</tt> <tt class="py-op">=</tt> <tt class="py-name">True</tt> </tt>
-<a name="L893"></a><tt class="py-lineno">893</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">isinstance</tt><tt class="py-op">(</tt><tt class="py-name">match_result</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">tuple</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L894"></a><tt class="py-lineno">894</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">match_result</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
-<a name="L895"></a><tt class="py-lineno">895</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L896"></a><tt class="py-lineno">896</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-op">(</tt><tt class="py-name">match_result</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt><tt class="py-op">)</tt> </tt>
-<a name="L897"></a><tt class="py-lineno">897</tt> <tt class="py-line"> <tt class="py-keyword">break</tt> </tt>
-<a name="L898"></a><tt class="py-lineno">898</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-keyword">not</tt> <tt class="py-name">found_match</tt><tt class="py-op">:</tt> </tt>
-<a name="L899"></a><tt class="py-lineno">899</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-125" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-125', 'AddrFormatError', 'link-10');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'%r is not a supported MAC format!'</tt> \ </tt>
-<a name="L900"></a><tt class="py-lineno">900</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L901"></a><tt class="py-lineno">901</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L902"></a><tt class="py-lineno">902</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt class="py-name">TypeError</tt><tt class="py-op">(</tt><tt class="py-string">'%r is not str() or unicode()!'</tt> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L903"></a><tt class="py-lineno">903</tt> <tt class="py-line"> </tt>
-<a name="L904"></a><tt class="py-lineno">904</tt> <tt class="py-line"> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L905"></a><tt class="py-lineno">905</tt> <tt class="py-line"> </tt>
-<a name="L906"></a><tt class="py-lineno">906</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">6</tt><tt class="py-op">:</tt> </tt>
-<a name="L907"></a><tt class="py-lineno">907</tt> <tt class="py-line"> <tt class="py-comment"># 2 bytes x 6 (UNIX, Windows, EUI-48)</tt> </tt>
-<a name="L908"></a><tt class="py-lineno">908</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'%02x'</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">w</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L909"></a><tt class="py-lineno">909</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">3</tt><tt class="py-op">:</tt> </tt>
-<a name="L910"></a><tt class="py-lineno">910</tt> <tt class="py-line"> <tt class="py-comment"># 4 bytes x 3 (Cisco)</tt> </tt>
-<a name="L911"></a><tt class="py-lineno">911</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'%04x'</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">w</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L912"></a><tt class="py-lineno">912</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">2</tt><tt class="py-op">:</tt> </tt>
-<a name="L913"></a><tt class="py-lineno">913</tt> <tt class="py-line"> <tt class="py-comment"># 6 bytes x 2 (PostgreSQL)</tt> </tt>
-<a name="L914"></a><tt class="py-lineno">914</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">''</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-string">'%06x'</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">w</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> <tt class="py-keyword">for</tt> <tt class="py-name">w</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L915"></a><tt class="py-lineno">915</tt> <tt class="py-line"> <tt class="py-keyword">elif</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">)</tt> <tt class="py-op">==</tt> <tt class="py-number">1</tt><tt class="py-op">:</tt> </tt>
-<a name="L916"></a><tt class="py-lineno">916</tt> <tt class="py-line"> <tt class="py-comment"># 12 bytes (bare, no delimiters)</tt> </tt>
-<a name="L917"></a><tt class="py-lineno">917</tt> <tt class="py-line"><tt class="py-comment"></tt> <tt class="py-name">int_val</tt> <tt class="py-op">=</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-string">'%012x'</tt> <tt class="py-op">%</tt> <tt class="py-name">int</tt><tt class="py-op">(</tt><tt class="py-name">words</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-number">16</tt><tt class="py-op">)</tt> </tt>
-<a name="L918"></a><tt class="py-lineno">918</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L919"></a><tt class="py-lineno">919</tt> <tt class="py-line"> <tt class="py-keyword">raise</tt> <tt id="link-126" class="py-name"><a title="netaddr.AddrFormatError" class="py-name" href="#" onclick="return doclink('link-126', 'AddrFormatError', 'link-10');">AddrFormatError</a></tt><tt class="py-op">(</tt><tt class="py-string">'unexpected word count in MAC address %r!'</tt> \ </tt>
-<a name="L920"></a><tt class="py-lineno">920</tt> <tt class="py-line"> <tt class="py-op">%</tt> <tt class="py-name">addr</tt><tt class="py-op">)</tt> </tt>
-<a name="L921"></a><tt class="py-lineno">921</tt> <tt class="py-line"> </tt>
-<a name="L922"></a><tt class="py-lineno">922</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">int_val</tt> </tt>
-</div><a name="L923"></a><tt class="py-lineno">923</tt> <tt class="py-line"> </tt>
-<a name="EUI48Strategy.int_to_str"></a><div id="EUI48Strategy.int_to_str-def"><a name="L924"></a><tt class="py-lineno">924</tt> <a class="py-toggle" href="#" id="EUI48Strategy.int_to_str-toggle" onclick="return toggle('EUI48Strategy.int_to_str');">-</a><tt class="py-line"> <tt class="py-keyword">def</tt> <a class="py-def-name" href="netaddr.strategy.EUI48Strategy-class.html#int_to_str">int_to_str</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">int_val</tt><tt class="py-op">,</tt> <tt class="py-param">word_sep</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-param">word_fmt</tt><tt class="py-op">=</tt><tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="EUI48Strategy.int_to_str-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="EUI48Strategy.int_to_str-expanded"><a name="L925"></a><tt class="py-lineno">925</tt> <tt class="py-line"> <tt class="py-docstring">"""</tt> </tt>
-<a name="L926"></a><tt class="py-lineno">926</tt> <tt class="py-line"><tt class="py-docstring"> @param int_val: A network byte order integer.</tt> </tt>
-<a name="L927"></a><tt class="py-lineno">927</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L928"></a><tt class="py-lineno">928</tt> <tt class="py-line"><tt class="py-docstring"> @param word_sep: (optional) The separator used between words in an</tt> </tt>
-<a name="L929"></a><tt class="py-lineno">929</tt> <tt class="py-line"><tt class="py-docstring"> address string.</tt> </tt>
-<a name="L930"></a><tt class="py-lineno">930</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L931"></a><tt class="py-lineno">931</tt> <tt class="py-line"><tt class="py-docstring"> @param word_fmt: (optional) A Python format string used to format</tt> </tt>
-<a name="L932"></a><tt class="py-lineno">932</tt> <tt class="py-line"><tt class="py-docstring"> each word of address.</tt> </tt>
-<a name="L933"></a><tt class="py-lineno">933</tt> <tt class="py-line"><tt class="py-docstring"></tt> </tt>
-<a name="L934"></a><tt class="py-lineno">934</tt> <tt class="py-line"><tt class="py-docstring"> @return: A MAC address in string form that is equivalent to value</tt> </tt>
-<a name="L935"></a><tt class="py-lineno">935</tt> <tt class="py-line"><tt class="py-docstring"> represented by a network byte order integer.</tt> </tt>
-<a name="L936"></a><tt class="py-lineno">936</tt> <tt class="py-line"><tt class="py-docstring"> """</tt> </tt>
-<a name="L937"></a><tt class="py-lineno">937</tt> <tt class="py-line"> <tt class="py-name">_word_sep</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_sep</tt> </tt>
-<a name="L938"></a><tt class="py-lineno">938</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">word_sep</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L939"></a><tt class="py-lineno">939</tt> <tt class="py-line"> <tt class="py-name">_word_sep</tt> <tt class="py-op">=</tt> <tt class="py-name">word_sep</tt> </tt>
-<a name="L940"></a><tt class="py-lineno">940</tt> <tt class="py-line"> </tt>
-<a name="L941"></a><tt class="py-lineno">941</tt> <tt class="py-line"> <tt class="py-name">_word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">word_fmt</tt> </tt>
-<a name="L942"></a><tt class="py-lineno">942</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">word_fmt</tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">:</tt> </tt>
-<a name="L943"></a><tt class="py-lineno">943</tt> <tt class="py-line"> <tt class="py-name">_word_fmt</tt> <tt class="py-op">=</tt> <tt class="py-name">word_fmt</tt> </tt>
-<a name="L944"></a><tt class="py-lineno">944</tt> <tt class="py-line"> </tt>
-<a name="L945"></a><tt class="py-lineno">945</tt> <tt class="py-line"> <tt class="py-name">words</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-127" class="py-name"><a title="netaddr.strategy.AddrStrategy.int_to_words
-netaddr.strategy.IPv4StrategyOpt.int_to_words" class="py-name" href="#" onclick="return doclink('link-127', 'int_to_words', 'link-36');">int_to_words</a></tt><tt class="py-op">(</tt><tt class="py-name">int_val</tt><tt class="py-op">)</tt> </tt>
-<a name="L946"></a><tt class="py-lineno">946</tt> <tt class="py-line"> <tt class="py-name">tokens</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">_word_fmt</tt> <tt class="py-op">%</tt> <tt class="py-name">i</tt> <tt class="py-keyword">for</tt> <tt class="py-name">i</tt> <tt class="py-keyword">in</tt> <tt class="py-name">words</tt><tt class="py-op">]</tt> </tt>
-<a name="L947"></a><tt class="py-lineno">947</tt> <tt class="py-line"> <tt class="py-name">addr</tt> <tt class="py-op">=</tt> <tt class="py-name">_word_sep</tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">tokens</tt><tt class="py-op">)</tt> </tt>
-<a name="L948"></a><tt class="py-lineno">948</tt> <tt class="py-line"> </tt>
-<a name="L949"></a><tt class="py-lineno">949</tt> <tt class="py-line"> <tt class="py-keyword">if</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">uppercase</tt><tt class="py-op">:</tt> </tt>
-<a name="L950"></a><tt class="py-lineno">950</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">upper</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L951"></a><tt class="py-lineno">951</tt> <tt class="py-line"> <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L952"></a><tt class="py-lineno">952</tt> <tt class="py-line"> <tt class="py-keyword">return</tt> <tt class="py-name">addr</tt><tt class="py-op">.</tt><tt class="py-name">lower</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L953"></a><tt class="py-lineno">953</tt> <tt class="py-line"> </tt>
-<a name="L954"></a><tt class="py-lineno">954</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L955"></a><tt class="py-lineno">955</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># Shared strategy objects for supported address types.</tt> </tt>
-<a name="L956"></a><tt class="py-lineno">956</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L957"></a><tt class="py-lineno">957</tt> <tt class="py-line"><tt class="py-comment"></tt> </tt>
-<a name="L958"></a><tt class="py-lineno">958</tt> <tt class="py-line"><tt class="py-comment">#: A shared strategy object supporting all operations on IPv4 addresses.</tt> </tt>
-<a name="L959"></a><tt class="py-lineno">959</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-128" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-128', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
-<a name="L960"></a><tt class="py-lineno">960</tt> <tt class="py-line"><tt class="py-comment"># Use the right strategy class dependent upon Python implementation (work-</tt> </tt>
-<a name="L961"></a><tt class="py-lineno">961</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-comment"># around for various Python bugs).</tt> </tt>
-<a name="L962"></a><tt class="py-lineno">962</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">if</tt> <tt id="link-129" class="py-name"><a title="netaddr.strategy.USE_IPV4_OPT" class="py-name" href="#" onclick="return doclink('link-129', 'USE_IPV4_OPT', 'link-0');">USE_IPV4_OPT</a></tt> <tt class="py-keyword">is</tt> <tt class="py-name">True</tt><tt class="py-op">:</tt> </tt>
-<a name="L963"></a><tt class="py-lineno">963</tt> <tt class="py-line"> <tt id="link-130" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-130', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt> <tt class="py-op">=</tt> <tt id="link-131" class="py-name"><a title="netaddr.strategy.IPv4StrategyOpt" class="py-name" href="#" onclick="return doclink('link-131', 'IPv4StrategyOpt', 'link-72');">IPv4StrategyOpt</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L964"></a><tt class="py-lineno">964</tt> <tt class="py-line"><tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
-<a name="L965"></a><tt class="py-lineno">965</tt> <tt class="py-line"> <tt id="link-132" class="py-name"><a title="netaddr.ST_IPV4
-netaddr.strategy.ST_IPV4" class="py-name" href="#" onclick="return doclink('link-132', 'ST_IPV4', 'link-81');">ST_IPV4</a></tt> <tt class="py-op">=</tt> <tt id="link-133" class="py-name"><a title="netaddr.strategy.IPv4StrategyStd" class="py-name" href="#" onclick="return doclink('link-133', 'IPv4StrategyStd', 'link-67');">IPv4StrategyStd</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L966"></a><tt class="py-lineno">966</tt> <tt class="py-line"> </tt>
-<a name="L967"></a><tt class="py-lineno">967</tt> <tt class="py-line"><tt class="py-comment">#: A shared strategy object supporting all operations on IPv6 addresses.</tt> </tt>
-<a name="L968"></a><tt class="py-lineno">968</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-134" class="py-name" targets="Variable netaddr.ST_IPV6=netaddr-module.html#ST_IPV6,Variable netaddr.strategy.ST_IPV6=netaddr.strategy-module.html#ST_IPV6"><a title="netaddr.ST_IPV6
-netaddr.strategy.ST_IPV6" class="py-name" href="#" onclick="return doclink('link-134', 'ST_IPV6', 'link-134');">ST_IPV6</a></tt> <tt class="py-op">=</tt> <tt id="link-135" class="py-name" targets="Class netaddr.strategy.IPv6Strategy=netaddr.strategy.IPv6Strategy-class.html"><a title="netaddr.strategy.IPv6Strategy" class="py-name" href="#" onclick="return doclink('link-135', 'IPv6Strategy', 'link-135');">IPv6Strategy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L969"></a><tt class="py-lineno">969</tt> <tt class="py-line"><tt class="py-comment">#: A shared strategy object supporting all operations on EUI-48/MAC addresses.</tt> </tt>
-<a name="L970"></a><tt class="py-lineno">970</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-136" class="py-name" targets="Variable netaddr.ST_EUI48=netaddr-module.html#ST_EUI48,Variable netaddr.strategy.ST_EUI48=netaddr.strategy-module.html#ST_EUI48"><a title="netaddr.ST_EUI48
-netaddr.strategy.ST_EUI48" class="py-name" href="#" onclick="return doclink('link-136', 'ST_EUI48', 'link-136');">ST_EUI48</a></tt> <tt class="py-op">=</tt> <tt id="link-137" class="py-name"><a title="netaddr.strategy.EUI48Strategy" class="py-name" href="#" onclick="return doclink('link-137', 'EUI48Strategy', 'link-121');">EUI48Strategy</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L971"></a><tt class="py-lineno">971</tt> <tt class="py-line"> </tt>
-<a name="L972"></a><tt class="py-lineno">972</tt> <tt class="py-line"><tt class="py-comment">#: A shared strategy object supporting all operations on EUI-64 addresses.</tt> </tt>
-<a name="L973"></a><tt class="py-lineno">973</tt> <tt class="py-line"><tt class="py-comment"></tt><tt id="link-138" class="py-name" targets="Variable netaddr.ST_EUI64=netaddr-module.html#ST_EUI64,Variable netaddr.strategy.ST_EUI64=netaddr.strategy-module.html#ST_EUI64"><a title="netaddr.ST_EUI64
-netaddr.strategy.ST_EUI64" class="py-name" href="#" onclick="return doclink('link-138', 'ST_EUI64', 'link-138');">ST_EUI64</a></tt> <tt class="py-op">=</tt> <tt id="link-139" class="py-name"><a title="netaddr.strategy.AddrStrategy" class="py-name" href="#" onclick="return doclink('link-139', 'AddrStrategy', 'link-57');">AddrStrategy</a></tt><tt class="py-op">(</tt><tt id="link-140" class="py-name"><a title="netaddr.address.Addr.addr_type
-netaddr.address.CIDR.addr_type
-netaddr.address.EUI.addr_type
-netaddr.address.IP.addr_type
-netaddr.address.IPRange.addr_type
-netaddr.address.Wildcard.addr_type" class="py-name" href="#" onclick="return doclink('link-140', 'addr_type', 'link-18');">addr_type</a></tt><tt class="py-op">=</tt><tt id="link-141" class="py-name"><a title="netaddr.AT_EUI64" class="py-name" href="#" onclick="return doclink('link-141', 'AT_EUI64', 'link-8');">AT_EUI64</a></tt><tt class="py-op">,</tt> <tt class="py-name">width</tt><tt class="py-op">=</tt><tt class="py-number">64</tt><tt class="py-op">,</tt> <tt class="py-name">word_size</tt><tt class="py-op">=</tt><tt class="py-number">8</tt><tt class="py-op">,</tt> \ </tt>
-<a name="L974"></a><tt class="py-lineno">974</tt> <tt class="py-line"> <tt class="py-name">word_fmt</tt><tt class="py-op">=</tt><tt class="py-string">'%02x'</tt><tt class="py-op">,</tt> <tt class="py-name">word_sep</tt><tt class="py-op">=</tt><tt class="py-string">'-'</tt><tt class="py-op">,</tt> <tt class="py-name">uppercase</tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">)</tt> </tt>
-<a name="L975"></a><tt class="py-lineno">975</tt> <tt class="py-line"> </tt>
-<a name="L976"></a><tt class="py-lineno">976</tt> <tt class="py-line"><tt class="py-comment">#-----------------------------------------------------------------------------</tt> </tt>
-<a name="L977"></a><tt class="py-lineno">977</tt> <tt class="py-line"><tt class="py-comment"></tt><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="L978"></a><tt class="py-lineno">978</tt> <tt class="py-line"> <tt class="py-keyword">pass</tt> </tt>
-<a name="L979"></a><tt class="py-lineno">979</tt> <tt class="py-line"> </tt><script type="text/javascript">
-<!--
-expandto(location.href);
-// -->
-</script>
-</pre>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:07 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy.AddrStrategy-class.html b/docs/api/netaddr.strategy.AddrStrategy-class.html
deleted file mode 100755
index 3a67768..0000000
--- a/docs/api/netaddr.strategy.AddrStrategy-class.html
+++ /dev/null
@@ -1,917 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy.AddrStrategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.strategy-module.html" onclick="show_private();">Module&nbsp;strategy</a> ::
- Class&nbsp;AddrStrategy
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy.AddrStrategy-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AddrStrategy</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy">source&nbsp;code</a></span></p>
-<pre class="base-tree">
-object --+
- |
- <strong class="uidshort">AddrStrategy</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.strategy.EUI48Strategy-class.html">EUI48Strategy</a></li><li>, <a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a></li><li>, <a href="netaddr.strategy.IPv6Strategy-class.html">IPv6Strategy</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>Basic support for common operations performed on each address type</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">width</span>,
- <span class="summary-sig-arg">word_size</span>,
- <span class="summary-sig-arg">word_sep</span>,
- <span class="summary-sig-arg">word_fmt</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">%x</code><code class="variable-quote">'</code></span>,
- <span class="summary-sig-arg">addr_type</span>=<span class="summary-sig-default">0</span>,
- <span class="summary-sig-arg">word_base</span>=<span class="summary-sig-default">16</span>,
- <span class="summary-sig-arg">uppercase</span>=<span class="summary-sig-default">False</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#__repr__" class="summary-sig-name">__repr__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Returns:
- executable Python string to recreate equivalent object</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.__repr__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits" class="summary-sig-name">valid_bits</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">bits</span>)</span><br />
- Returns:
- <code>True</code> if network address is valid for this address type,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_bits">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int" class="summary-sig-name">bits_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">bits</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by network address in readable binary form.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.bits_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#valid_int" class="summary-sig-name">valid_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- <code>True</code> if network byte order integer falls within the
- boundaries of this address type, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_str" class="summary-sig-name">int_to_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- A network address in string form that is equivalent to value
- represented by a network byte order integer.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits" class="summary-sig-name">int_to_bits</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- A network address in readable binary form that is equivalent to value
- represented by a network byte order integer.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_bits">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin" class="summary-sig-name">int_to_bin</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- A network address in standard binary representation format that is
- equivalent to integer address value.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_bin">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_words" class="summary-sig-name">int_to_words</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>,
- <span class="summary-sig-arg">num_words</span>=<span class="summary-sig-default">None</span>,
- <span class="summary-sig-arg">word_size</span>=<span class="summary-sig-default">None</span>)</span></td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_words">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed" class="summary-sig-name">int_to_packed</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- a packed string that is equivalent to value represented by a network
- byte order integer.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_packed">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int" class="summary-sig-name">packed_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">packed_int</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value of network
- address represented by packed binary string.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.packed_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#valid_str" class="summary-sig-name">valid_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- <code>True</code> if network address in string form is valid for this
- address type, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#str_to_int" class="summary-sig-name">str_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by network address in string form.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.str_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#valid_words" class="summary-sig-name">valid_words</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">words</span>)</span><br />
- Returns:
- <code>True</code> if word sequence is valid for this address type,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_words">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.AddrStrategy-class.html#words_to_int" class="summary-sig-name">words_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">words</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by word sequence.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.words_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a name="STRUCT_FORMATS"></a><span class="summary-name">STRUCT_FORMATS</span> = <code title="{8: 'B', 16: 'H', 32: 'I'}"><code class="variable-group">{</code>8<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">B</code><code class="variable-quote">'</code><code class="variable-op">, </code>16<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">H</code><code class="variable-quote">'</code><code class="variable-op">, </code>32<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">I</code><code class="variable-quote">'</code><code class="variable-group">}</code></code><br />
- Lookup table for struct module format strings.
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">width</span>,
- <span class="sig-arg">word_size</span>,
- <span class="sig-arg">word_sep</span>,
- <span class="sig-arg">word_fmt</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">%x</code><code class="variable-quote">'</code></span>,
- <span class="sig-arg">addr_type</span>=<span class="sig-default">0</span>,
- <span class="sig-arg">word_base</span>=<span class="sig-default">16</span>,
- <span class="sig-arg">uppercase</span>=<span class="sig-default">False</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>width</code></strong> - size of address in bits. (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)</li>
- <li><strong class="pname"><code>word_size</code></strong> - size of each word. (e.g. 8 - octets, 16 - hextets)</li>
- <li><strong class="pname"><code>word_sep</code></strong> - separator between each word. (e.g. '.' - IPv4, ':' - IPv6, '-' -
- EUI-48)</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - format string for each word. (Default: '%x')</li>
- <li><strong class="pname"><code>addr_type</code></strong> - address type. (Default: AT_UNSPEC)</li>
- <li><strong class="pname"><code>word_base</code></strong> - number base used to convert each word using int(). (Default: 16)</li>
- <li><strong class="pname"><code>uppercase</code></strong> - uppercase address. (Default: False)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="__repr__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__repr__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Representation operator)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.__repr__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>repr(x)</p>
- <dl class="fields">
- <dt>Returns:</dt>
- <dd>executable Python string to recreate equivalent object</dd>
- <dt>Overrides:
- object.__repr__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_bits"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_bits</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">bits</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_bits">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>bits</code></strong> - A network address in readable binary form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if network address is valid for this address
- type, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="bits_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">bits_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">bits</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.bits_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>bits</code></strong> - A network address in readable binary form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by network address in readable binary form.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if network byte order integer falls within the
- boundaries of this address type, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network address in string form that is equivalent to value
- represented by a network byte order integer.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_bits"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_bits</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_bits">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network address in readable binary form that is equivalent to
- value represented by a network byte order integer.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_bin"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_bin</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_bin">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network address in standard binary representation format that
- is equivalent to integer address value. Essentially a back port
- of the bin() builtin in Python 2.6.x and higher.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_words"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_words</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>,
- <span class="sig-arg">num_words</span>=<span class="sig-default">None</span>,
- <span class="sig-arg">word_size</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_words">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer to be split.</li>
- <li><strong class="pname"><code>num_words</code></strong> - (optional) number of words expected in return value tuple. Uses
- address type default if not specified.</li>
- <li><strong class="pname"><code>word_size</code></strong> - (optional) size/width of individual words (in bits). Uses address
- type default if not specified.</li>
- </ul></dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_packed"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_packed</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.int_to_packed">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - the integer to be packed.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>a packed string that is equivalent to value represented by a
- network byte order integer.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="packed_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">packed_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">packed_int</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.packed_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>packed_int</code></strong> - a packed string containing an unsigned integer. Network byte
- order is assumed.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value of
- network address represented by packed binary string.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - A network address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if network address in string form is valid for
- this address type, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="str_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">str_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.str_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - A network address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by network address in string form.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_words"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_words</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">words</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.valid_words">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>words</code></strong> - A sequence containing integer word values.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if word sequence is valid for this address
- type, <code>False</code> otherwise.</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="words_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">words_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">words</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#AddrStrategy.words_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>words</code></strong> - A list or tuple containing integer word values.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by word sequence.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy.EUI48Strategy-class.html b/docs/api/netaddr.strategy.EUI48Strategy-class.html
deleted file mode 100755
index b5a17c9..0000000
--- a/docs/api/netaddr.strategy.EUI48Strategy-class.html
+++ /dev/null
@@ -1,511 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy.EUI48Strategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.strategy-module.html" onclick="show_private();">Module&nbsp;strategy</a> ::
- Class&nbsp;EUI48Strategy
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy.EUI48Strategy-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class EUI48Strategy</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a> --+
- |
- <strong class="uidshort">EUI48Strategy</strong>
-</pre>
-
-<hr />
-<p>Implements the operations that can be performed on an IEEE 48-bit EUI
- (Extended Unique Identifer) a.k.a. a MAC (Media Access Control) layer 2
- address.</p>
- <p>Supports all common (and some less common MAC string formats including
- Cisco's 'triple hextet' format and also bare MACs that contain no
- delimiters.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.EUI48Strategy-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">word_fmt</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">%02x</code><code class="variable-quote">'</code></span>,
- <span class="summary-sig-arg">word_sep</span>=<span class="summary-sig-default"><code class="variable-quote">'</code><code class="variable-string">-</code><code class="variable-quote">'</code></span>,
- <span class="summary-sig-arg">uppercase</span>=<span class="summary-sig-default">True</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a name="reset"></a><span class="summary-sig-name">reset</span>(<span class="summary-sig-arg">self</span>)</span><br />
- Resets the internal state of this strategy to safe default values.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.reset">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.EUI48Strategy-class.html#valid_str" class="summary-sig-name">valid_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- <code>True</code> if MAC address string is valid, <code>False</code>
- otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.valid_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.EUI48Strategy-class.html#str_to_int" class="summary-sig-name">str_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by EUI-48/MAC string address.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.str_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.EUI48Strategy-class.html#int_to_str" class="summary-sig-name">int_to_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>,
- <span class="summary-sig-arg">word_sep</span>=<span class="summary-sig-default">None</span>,
- <span class="summary-sig-arg">word_fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- Returns:
- A MAC address in string form that is equivalent to value represented
- by a network byte order integer.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.int_to_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_words">int_to_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#words_to_int">words_to_int</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.EUI48Strategy-class.html#RE_MAC_FORMATS" class="summary-name">RE_MAC_FORMATS</a> = <code title="[re.compile(r'(?i)^([0-9A-F]{1,2}):([0-9A-F]{1,2}):([0-9A-F]{1,2}):([0\
--9A-F]{1,2}):([0-9A-F]{1,2}):([0-9A-F]{1,2})$'),
- re.compile(r'(?i)^([0-9A-F]{1,2})-([0-9A-F]{1,2})-([0-9A-F]{1,2})-([0\
--9A-F]{1,2})-([0-9A-F]{1,2})-([0-9A-F]{1,2})$'),
- re.compile(r'(?i)^([0-9A-F]{1,4}):([0-9A-F]{1,4}):([0-9A-F]{1,4})$'),
- re.compile(r'(?i)^([0-9A-F]{1,4})-([0-9A-F]{1,4})-([0-9A-F]{1,4})$'),
- re.compile(r'(?i)^([0-9A-F]{5,6})-([0-9A-F]{5,6})$'),
- re.compile(r'(?i)^([0-9A-F]{5,6}):([0-9A-F]{5,6})$'),
-..."><code class="variable-group">[</code>re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{</code><code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <a href="netaddr.strategy.EUI48Strategy-class.html#_" class="summary-name">_</a> = <code title="'^([0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-\
-9A-F][0-9A-F][0-9A-F])$'"><code class="variable-quote">'</code><code class="variable-string">^([0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F</code><code class="variable-ellipsis">...</code></code>
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS">STRUCT_FORMATS</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">word_fmt</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">%02x</code><code class="variable-quote">'</code></span>,
- <span class="sig-arg">word_sep</span>=<span class="sig-default"><code class="variable-quote">'</code><code class="variable-string">-</code><code class="variable-quote">'</code></span>,
- <span class="sig-arg">uppercase</span>=<span class="sig-default">True</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>word_sep</code></strong> - separator between each word. (Default: '-')</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - format string for each hextet. (Default: '%02x')</li>
- <li><strong class="pname"><code>uppercase</code></strong> - return uppercase MAC/EUI-48 addresses. (Default: True)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.valid_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An EUI-48 or MAC address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if MAC address string is valid,
- <code>False</code> otherwise.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#valid_str">AddrStrategy.valid_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="str_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">str_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.str_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An EUI-48 or MAC address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by EUI-48/MAC string address.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#str_to_int">AddrStrategy.str_to_int</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>,
- <span class="sig-arg">word_sep</span>=<span class="sig-default">None</span>,
- <span class="sig-arg">word_fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#EUI48Strategy.int_to_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- <li><strong class="pname"><code>word_sep</code></strong> - (optional) The separator used between words in an address string.</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - (optional) A Python format string used to format each word of
- address.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A MAC address in string form that is equivalent to value
- represented by a network byte order integer.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#int_to_str">AddrStrategy.int_to_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== CLASS VARIABLE DETAILS ==================== -->
-<a name="section-ClassVariableDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variable Details</span></td>
-</tr>
-</table>
-<a name="RE_MAC_FORMATS"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">RE_MAC_FORMATS</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-group">[</code>re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
- re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,2}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
- re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
- re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{1,4}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
- re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{5,6}</code><code class="re-group">)</code>-<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{5,6}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
- re.compile(r'<code class="re-flags">(?i)</code>^<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{5,6}</code><code class="re-group">)</code>:<code class="re-group">(</code><code class="re-group">[</code>0<code class="re-op">-</code>9A<code class="re-op">-</code>F<code class="re-group">]</code><code class="re-op">{5,6}</code><code class="re-group">)</code>$')<code class="variable-op">,</code>
-<code class="variable-ellipsis">...</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<a name="_"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <h3 class="epydoc">_</h3>
-
- <dl class="fields">
- </dl>
- <dl class="fields">
- <dt>Value:</dt>
- <dd><table><tr><td><pre class="variable">
-<code class="variable-quote">'</code><code class="variable-string">^([0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-</code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-<code class="variable-string">9A-F][0-9A-F][0-9A-F])$</code><code class="variable-quote">'</code>
-</pre></td></tr></table>
-</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy.IPv4StrategyOpt-class.html b/docs/api/netaddr.strategy.IPv4StrategyOpt-class.html
deleted file mode 100644
index 4811d2d..0000000
--- a/docs/api/netaddr.strategy.IPv4StrategyOpt-class.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy.IPv4StrategyOpt</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.strategy-module.html" onclick="show_private();">Module&nbsp;strategy</a> ::
- Class&nbsp;IPv4StrategyOpt
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy.IPv4StrategyOpt-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPv4StrategyOpt</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a> --+
- |
- <a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a> --+
- |
- <strong class="uidshort">IPv4StrategyOpt</strong>
-</pre>
-
-<hr />
-<p>An optimised <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses.</p>
- <p>It uses <code>pack()</code> and <code>unpack()</code> from the
- <code>struct</code> module along with the <code>inet_ntoa()</code> and
- <code>inet_aton()</code> from the <code>socket</code> module great
- improve the speed of certain operations (approx. 2.5 times faster than a
- standard <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> configured for IPv4).</p>
- <p>However, keep in mind that these modules might not be available
- everywhere that Python itself is. Runtimes such as Google App Engine gut
- the <code>socket</code> module. <code>struct</code> is also limited to
- processing 32-bit integers which is fine for IPv4 but isn't suitable for
- IPv6.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#valid_str" class="summary-sig-name">valid_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- <code>True</code> if network address in string form is valid for this
- address type, <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.valid_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#str_to_int" class="summary-sig-name">str_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by the IPv4 dotted decimal address string.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.str_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_str" class="summary-sig-name">int_to_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- An IPv4 dotted decimal address string that is equivalent to value
- represented by a 32 bit integer in network byte order.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.int_to_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#int_to_words" class="summary-sig-name">int_to_words</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>,
- <span class="summary-sig-arg">num_words</span>=<span class="summary-sig-default">None</span>,
- <span class="summary-sig-arg">word_size</span>=<span class="summary-sig-default">None</span>)</span><br />
- Returns:
- An integer word (octet) sequence that is equivalent to value
- represented by network byte order integer.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.int_to_words">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyOpt-class.html#words_to_int" class="summary-sig-name">words_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">octets</span>)</span><br />
- Returns:
- A network byte order integer that is equivalent to value represented
- by word (octet) sequence.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.words_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.IPv4StrategyStd-class.html">IPv4StrategyStd</a></code></b>:
- <code><a href="netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa">int_to_arpa</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS">STRUCT_FORMATS</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>width</code></strong> - size of address in bits. (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)</li>
- <li><strong class="pname"><code>word_size</code></strong> - size of each word. (e.g. 8 - octets, 16 - hextets)</li>
- <li><strong class="pname"><code>word_sep</code></strong> - separator between each word. (e.g. '.' - IPv4, ':' - IPv6, '-' -
- EUI-48)</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - format string for each word. (Default: '%x')</li>
- <li><strong class="pname"><code>addr_type</code></strong> - address type. (Default: AT_UNSPEC)</li>
- <li><strong class="pname"><code>word_base</code></strong> - number base used to convert each word using int(). (Default: 16)</li>
- <li><strong class="pname"><code>uppercase</code></strong> - uppercase address. (Default: False)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.valid_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An IP address in presentation (string) format.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if network address in string form is valid for
- this address type, <code>False</code> otherwise.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#valid_str">AddrStrategy.valid_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="str_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">str_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.str_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An IPv4 dotted decimal address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by the IPv4 dotted decimal address string.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#str_to_int">AddrStrategy.str_to_int</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.int_to_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>An IPv4 dotted decimal address string that is equivalent to value
- represented by a 32 bit integer in network byte order.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#int_to_str">AddrStrategy.int_to_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_words"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_words</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>,
- <span class="sig-arg">num_words</span>=<span class="sig-default">None</span>,
- <span class="sig-arg">word_size</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.int_to_words">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- <li><strong class="pname"><code>num_words</code></strong> - (unused) *** interface compatibility only ***</li>
- <li><strong class="pname"><code>word_size</code></strong> - (unused) *** interface compatibility only ***</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>An integer word (octet) sequence that is equivalent to value
- represented by network byte order integer.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#int_to_words">AddrStrategy.int_to_words</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="words_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">words_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">octets</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyOpt.words_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>octets</code></strong> - A list or tuple containing integer octets.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>A network byte order integer that is equivalent to value
- represented by word (octet) sequence.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#words_to_int">AddrStrategy.words_to_int</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy.IPv4StrategyStd-class.html b/docs/api/netaddr.strategy.IPv4StrategyStd-class.html
deleted file mode 100644
index d3acf63..0000000
--- a/docs/api/netaddr.strategy.IPv4StrategyStd-class.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy.IPv4StrategyStd</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.strategy-module.html" onclick="show_private();">Module&nbsp;strategy</a> ::
- Class&nbsp;IPv4StrategyStd
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy.IPv4StrategyStd-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPv4StrategyStd</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyStd">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a> --+
- |
- <strong class="uidshort">IPv4StrategyStd</strong>
-</pre>
-
-<dl><dt>Known Subclasses:</dt>
-<dd>
- <ul class="subclass-list">
-<li><a href="netaddr.strategy.IPv4StrategyOpt-class.html">IPv4StrategyOpt</a></li> </ul>
-</dd></dl>
-
-<hr />
-<p>A 'safe' <a href="netaddr.strategy.AddrStrategy-class.html"
- class="link">AddrStrategy</a> for IPv4 addresses. Unlike <a
- href="netaddr.strategy.IPv4StrategyOpt-class.html"
- class="link">IPv4StrategyOpt</a>.</p>
- <p>It contains all methods related to IPv4 addresses that the optimised
- version has, without the reliance on the socket or struct modules. There
- are several cases where the use of this class are preferable when either
- the modules mentioned do not exist on certain Python implementations or
- contain bugs like the infamous inet_aton('255.255.255.254') bug.</p>
- <p>All methods shared between the optimised class and this one should be
- defined here.</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyStd-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyStd.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv4StrategyStd-class.html#int_to_arpa" class="summary-sig-name">int_to_arpa</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- The reverse DNS lookup for an IPv4 address in network byte order
- integer form.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyStd.int_to_arpa">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_str">int_to_str</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_words">int_to_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#str_to_int">str_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_str">valid_str</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#words_to_int">words_to_int</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS">STRUCT_FORMATS</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyStd.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>width</code></strong> - size of address in bits. (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)</li>
- <li><strong class="pname"><code>word_size</code></strong> - size of each word. (e.g. 8 - octets, 16 - hextets)</li>
- <li><strong class="pname"><code>word_sep</code></strong> - separator between each word. (e.g. '.' - IPv4, ':' - IPv6, '-' -
- EUI-48)</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - format string for each word. (Default: '%x')</li>
- <li><strong class="pname"><code>addr_type</code></strong> - address type. (Default: AT_UNSPEC)</li>
- <li><strong class="pname"><code>word_base</code></strong> - number base used to convert each word using int(). (Default: 16)</li>
- <li><strong class="pname"><code>uppercase</code></strong> - uppercase address. (Default: False)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_arpa"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_arpa</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv4StrategyStd.int_to_arpa">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The reverse DNS lookup for an IPv4 address in network byte order
- integer form.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/netaddr.strategy.IPv6Strategy-class.html b/docs/api/netaddr.strategy.IPv6Strategy-class.html
deleted file mode 100755
index 325cb9d..0000000
--- a/docs/api/netaddr.strategy.IPv6Strategy-class.html
+++ /dev/null
@@ -1,464 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr.strategy.IPv6Strategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table width="100%" cellpadding="0" cellspacing="0">
- <tr valign="top">
- <td width="100%">
- <span class="breadcrumbs">
- <a href="netaddr-module.html">Package&nbsp;netaddr</a> ::
- <a href="netaddr.strategy-module.html" onclick="show_private();">Module&nbsp;strategy</a> ::
- Class&nbsp;IPv6Strategy
- </span>
- </td>
- <td>
- <table cellpadding="0" cellspacing="0">
- <!-- hide/show private -->
- <tr><td align="right"><span class="options"
- >[<a href="frames.html" target="_top">frames</a
- >]&nbsp;|&nbsp;<a href="netaddr.strategy.IPv6Strategy-class.html"
- target="_top">no&nbsp;frames</a>]</span></td></tr>
- </table>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IPv6Strategy</h1><p class="nomargin-top"><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy">source&nbsp;code</a></span></p>
-<pre class="base-tree">
- object --+
- |
-<a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a> --+
- |
- <strong class="uidshort">IPv6Strategy</strong>
-</pre>
-
-<hr />
-<p>Implements the operations that can be performed on an Internet
- Protocol version 6 network address in accordance with RFC 4291.</p>
- <p>NB - This class would benefit greatly from access to
- inet_pton/inet_ntop() function calls in Python's socket module. Sadly,
- they aren't available so we'll have to put up with the pure-Python
- implementation here (for now at least).</p>
-
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Instance Methods</span></td>
-</tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv6Strategy-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>)</span><br />
- Constructor.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.__init__">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv6Strategy-class.html#valid_str" class="summary-sig-name">valid_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- <code>True</code> if IPv6 network address string is valid,
- <code>False</code> otherwise.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.valid_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv6Strategy-class.html#str_to_int" class="summary-sig-name">str_to_int</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">addr</span>)</span><br />
- Returns:
- The equivalent network byte order integer for a given IPv6 address.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.str_to_int">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv6Strategy-class.html#int_to_str" class="summary-sig-name">int_to_str</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>,
- <span class="summary-sig-arg">compact</span>=<span class="summary-sig-default">True</span>,
- <span class="summary-sig-arg">word_fmt</span>=<span class="summary-sig-default">None</span>)</span><br />
- Returns:
- The IPv6 string form equal to the network byte order integer value
- provided.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.int_to_str">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
-<tr>
- <td width="15%" align="right" valign="top" class="summary">
- <span class="summary-type">&nbsp;</span>
- </td><td class="summary">
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td><span class="summary-sig"><a href="netaddr.strategy.IPv6Strategy-class.html#int_to_arpa" class="summary-sig-name">int_to_arpa</a>(<span class="summary-sig-arg">self</span>,
- <span class="summary-sig-arg">int_val</span>)</span><br />
- Returns:
- The reverse DNS lookup for an IPv6 address in network byte order
- integer form.</td>
- <td align="right" valign="top">
- <span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.int_to_arpa">source&nbsp;code</a></span>
-
- </td>
- </tr>
- </table>
-
- </td>
- </tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#__repr__">__repr__</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#bits_to_int">bits_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bin">int_to_bin</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_bits">int_to_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_packed">int_to_packed</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#int_to_words">int_to_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#packed_to_int">packed_to_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_bits">valid_bits</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_int">valid_int</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#valid_words">valid_words</a></code>,
- <code><a href="netaddr.strategy.AddrStrategy-class.html#words_to_int">words_to_int</a></code>
- </p>
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__delattr__</code>,
- <code>__getattribute__</code>,
- <code>__hash__</code>,
- <code>__new__</code>,
- <code>__reduce__</code>,
- <code>__reduce_ex__</code>,
- <code>__setattr__</code>,
- <code>__str__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== CLASS VARIABLES ==================== -->
-<a name="section-ClassVariables"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Class Variables</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code><a href="netaddr.strategy.AddrStrategy-class.html">AddrStrategy</a></code></b>:
- <code><a href="netaddr.strategy.AddrStrategy-class.html#STRUCT_FORMATS">STRUCT_FORMATS</a></code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Properties</span></td>
-</tr>
- <tr>
- <td colspan="2" class="summary">
- <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
- <code>__class__</code>
- </p>
- </td>
- </tr>
-</table>
-<!-- ==================== METHOD DETAILS ==================== -->
-<a name="section-MethodDetails"></a>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
- <td align="left" colspan="2" class="table-header">
- <span class="table-header">Method Details</span></td>
-</tr>
-</table>
-<a name="__init__"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>)</span>
- <br /><em class="fname">(Constructor)</em>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.__init__">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
- <p>Constructor.</p>
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>width</code></strong> - size of address in bits. (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)</li>
- <li><strong class="pname"><code>word_size</code></strong> - size of each word. (e.g. 8 - octets, 16 - hextets)</li>
- <li><strong class="pname"><code>word_sep</code></strong> - separator between each word. (e.g. '.' - IPv4, ':' - IPv6, '-' -
- EUI-48)</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - format string for each word. (Default: '%x')</li>
- <li><strong class="pname"><code>addr_type</code></strong> - address type. (Default: AT_UNSPEC)</li>
- <li><strong class="pname"><code>word_base</code></strong> - number base used to convert each word using int(). (Default: 16)</li>
- <li><strong class="pname"><code>uppercase</code></strong> - uppercase address. (Default: False)</li>
- </ul></dd>
- <dt>Overrides:
- object.__init__
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="valid_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">valid_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.valid_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An IPv6 address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd><code>True</code> if IPv6 network address string is valid,
- <code>False</code> otherwise.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#valid_str">AddrStrategy.valid_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="str_to_int"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">str_to_int</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">addr</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.str_to_int">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>addr</code></strong> - An IPv6 address in string form.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The equivalent network byte order integer for a given IPv6
- address.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#str_to_int">AddrStrategy.str_to_int</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_str"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_str</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>,
- <span class="sig-arg">compact</span>=<span class="sig-default">True</span>,
- <span class="sig-arg">word_fmt</span>=<span class="sig-default">None</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.int_to_str">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- <li><strong class="pname"><code>compact</code></strong> - (optional) A boolean flag indicating if compact formatting should
- be used. If True, this method uses the '::' string to represent
- the first adjacent group of words with a value of zero. Default:
- True</li>
- <li><strong class="pname"><code>word_fmt</code></strong> - (optional) The Python format string used to override formatting
- for each word.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The IPv6 string form equal to the network byte order integer
- value provided.</dd>
- <dt>Overrides:
- <a href="netaddr.strategy.AddrStrategy-class.html#int_to_str">AddrStrategy.int_to_str</a>
- </dt>
- </dl>
-</td></tr></table>
-</div>
-<a name="int_to_arpa"></a>
-<div>
-<table class="details" border="1" cellpadding="3"
- cellspacing="0" width="100%" bgcolor="white">
-<tr><td>
- <table width="100%" cellpadding="0" cellspacing="0" border="0">
- <tr valign="top"><td>
- <h3 class="epydoc"><span class="sig"><span class="sig-name">int_to_arpa</span>(<span class="sig-arg">self</span>,
- <span class="sig-arg">int_val</span>)</span>
- </h3>
- </td><td align="right" valign="top"
- ><span class="codelink"><a href="netaddr.strategy-pysrc.html#IPv6Strategy.int_to_arpa">source&nbsp;code</a></span>&nbsp;
- </td>
- </tr></table>
-
-
- <dl class="fields">
- <dt>Parameters:</dt>
- <dd><ul class="nomargin-top">
- <li><strong class="pname"><code>int_val</code></strong> - A network byte order integer.</li>
- </ul></dd>
- <dt>Returns:</dt>
- <dd>The reverse DNS lookup for an IPv6 address in network byte order
- integer form.</dd>
- </dl>
-</td></tr></table>
-</div>
-<br />
-<!-- ==================== NAVIGATION BAR ==================== -->
-<table class="navbar" border="0" width="100%" cellpadding="0"
- bgcolor="#a0c0ff" cellspacing="0">
- <tr valign="middle">
- <!-- Home link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="netaddr-module.html">Home</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Tree link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="module-tree.html">Trees</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Index link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="identifier-index.html">Indices</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Help link -->
- <th>&nbsp;&nbsp;&nbsp;<a
- href="help.html">Help</a>&nbsp;&nbsp;&nbsp;</th>
-
- <!-- Project homepage -->
- <th class="navbar" align="right" width="100%">
- <table border="0" cellpadding="0" cellspacing="0">
- <tr><th class="navbar" align="center"
- >netaddr</th>
- </tr></table></th>
- </tr>
-</table>
-<table border="0" cellpadding="0" cellspacing="0" width="100%%">
- <tr>
- <td align="left" class="footer">
- Generated by Epydoc 3.0.1 on Wed Jan 21 23:41:06 2009
- </td>
- <td align="right" class="footer">
- <a target="mainFrame" href="http://epydoc.sourceforge.net"
- >http://epydoc.sourceforge.net</a>
- </td>
- </tr>
-</table>
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/redirect.html b/docs/api/redirect.html
deleted file mode 100755
index 48c6c88..0000000
--- a/docs/api/redirect.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<html><head><title>Epydoc Redirect Page</title>
-<meta http-equiv="cache-control" content="no-cache" />
-<meta http-equiv="expires" content="0" />
-<meta http-equiv="pragma" content="no-cache" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-<body>
-<script type="text/javascript">
-<!--
-var pages = ["netaddr.address.AddrValueDescriptor-c", "netaddr.address.PrefixLenDescriptor-c", "netaddr.address.AddrTypeDescriptor-c", "netaddr.address.StrategyDescriptor-c", "netaddr.address.FormatDescriptor-c", "netaddr.strategy.IPv4StrategyOpt-c", "netaddr.strategy.IPv4StrategyStd-c", "netaddr.eui.NotRegisteredError-c", "netaddr.strategy.EUI48Strategy-c", "netaddr.strategy.AddrStrategy-c", "netaddr.strategy.IPv6Strategy-c", "netaddr.AddrConversionError-c", "netaddr.ip.LineRecordParser-c", "netaddr.address.IPRangeSet-c", "netaddr.core.PrettyPrinter-c", "netaddr.eui.IABIndexParser-c", "netaddr.eui.OUIIndexParser-c", "netaddr.ip.MulticastParser-c", "netaddr.address.Wildcard-c", "netaddr.AddrFormatError-c", "netaddr.address.IPRange-c", "netaddr.core.Subscriber-c", "netaddr.eui.FileIndexer-c", "netaddr.core.Publisher-c", "netaddr.ip.DictUpdater-c", "netaddr.ip.IPv4Parser-c", "netaddr.ip.IPv6Parser-c", "netaddr.address.Addr-c", "netaddr.address.CIDR-c", "netaddr.address.EUI-c", "netaddr.address.IP-c", "netaddr.strategy-m", "netaddr.address-m", "netaddr.eui.IAB-c", "netaddr.eui.OUI-c", "netaddr.core-m", "netaddr.misc-m", "netaddr.eui-m", "netaddr.ip-m", "netaddr-m"];
-var dottedName = get_anchor();
-if (dottedName) {
- var target = redirect_url(dottedName);
- if (target) window.location.replace(target);
-}
-// -->
-</script>
-
-<h3>Epydoc Auto-redirect page</h3>
-
-<p>When javascript is enabled, this page will redirect URLs of
-the form <tt>redirect.html#<i>dotted.name</i></tt> to the
-documentation for the object with the given fully-qualified
-dotted name.</p>
-<p><a id="message"> &nbsp; </a></p>
-
-<script type="text/javascript">
-<!--
-if (dottedName) {
- var msg = document.getElementById("message");
- msg.innerHTML = "No documentation found for <tt>"+
- dottedName+"</tt>";
-}
-// -->
-</script>
-
-</body>
-</html>
diff --git a/docs/api/toc-everything.html b/docs/api/toc-everything.html
deleted file mode 100755
index 4f8b91e..0000000
--- a/docs/api/toc-everything.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Everything</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Everything</h1>
-<hr />
- <h2 class="toc">All Classes</h2>
- <a target="mainFrame" href="netaddr.AddrConversionError-class.html"
- >netaddr.AddrConversionError</a><br /> <a target="mainFrame" href="netaddr.AddrFormatError-class.html"
- >netaddr.AddrFormatError</a><br /> <a target="mainFrame" href="netaddr.ip.DictUpdater-class.html"
- >netaddr.ip.DictUpdater</a><br /> <a target="mainFrame" href="netaddr.ip.IPv4Parser-class.html"
- >netaddr.ip.IPv4Parser</a><br /> <a target="mainFrame" href="netaddr.ip.IPv6Parser-class.html"
- >netaddr.ip.IPv6Parser</a><br /> <a target="mainFrame" href="netaddr.ip.LineRecordParser-class.html"
- >netaddr.ip.LineRecordParser</a><br /> <a target="mainFrame" href="netaddr.ip.MulticastParser-class.html"
- >netaddr.ip.MulticastParser</a><br /> <h2 class="toc">All Functions</h2>
- <a target="mainFrame" href="netaddr.ip-module.html#load_iana_info"
- >netaddr.ip.load_iana_info</a><br /> <a target="mainFrame" href="netaddr.ip-module.html#query"
- >netaddr.ip.query</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#ipv4_cidr_prefixes"
- >netaddr.misc.ipv4_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#ipv6_cidr_prefixes"
- >netaddr.misc.ipv6_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#print_ipv4_cidr_prefixes"
- >netaddr.misc.print_ipv4_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#print_ipv6_cidr_prefixes"
- >netaddr.misc.print_ipv6_cidr_prefixes</a><br /> <h2 class="toc">All Variables</h2>
- <a target="mainFrame" href="netaddr-module.html#AT_EUI64"
- >netaddr.AT_EUI64</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_INET"
- >netaddr.AT_INET</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_INET6"
- >netaddr.AT_INET6</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_LINK"
- >netaddr.AT_LINK</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_EUI48"
- >netaddr.ST_EUI48</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_EUI64"
- >netaddr.ST_EUI64</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_IPV4"
- >netaddr.ST_IPV4</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_IPV6"
- >netaddr.ST_IPV6</a><br /> <a target="mainFrame" href="netaddr.ip-module.html#IANA_INFO"
- >netaddr.ip.IANA_INFO</a><br /><hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr-module.html b/docs/api/toc-netaddr-module.html
deleted file mode 100755
index 8459bbf..0000000
--- a/docs/api/toc-netaddr-module.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>netaddr</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module netaddr</h1>
-<hr />
- <h2 class="toc">Classes</h2>
- <a target="mainFrame" href="netaddr.AddrConversionError-class.html"
- >AddrConversionError</a><br /> <a target="mainFrame" href="netaddr.AddrFormatError-class.html"
- >AddrFormatError</a><br /> <a target="mainFrame" href="netaddr.address.CIDR-class.html"
- >CIDR</a><br /> <a target="mainFrame" href="netaddr.address.EUI-class.html"
- >EUI</a><br /> <a target="mainFrame" href="netaddr.eui.IAB-class.html"
- >IAB</a><br /> <a target="mainFrame" href="netaddr.address.IP-class.html"
- >IP</a><br /> <a target="mainFrame" href="netaddr.address.IPRange-class.html"
- >IPRange</a><br /> <a target="mainFrame" href="netaddr.address.IPRangeSet-class.html"
- >IPRangeSet</a><br /> <a target="mainFrame" href="netaddr.eui.NotRegisteredError-class.html"
- >NotRegisteredError</a><br /> <a target="mainFrame" href="netaddr.eui.OUI-class.html"
- >OUI</a><br /> <a target="mainFrame" href="netaddr.address.Wildcard-class.html"
- >Wildcard</a><br /> <h2 class="toc">Functions</h2>
- <a target="mainFrame" href="netaddr-module.html#nrange"
- >nrange</a><br /> <h2 class="toc">Variables</h2>
- <a target="mainFrame" href="netaddr-module.html#AT_EUI64"
- >AT_EUI64</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_INET"
- >AT_INET</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_INET6"
- >AT_INET6</a><br /> <a target="mainFrame" href="netaddr-module.html#AT_LINK"
- >AT_LINK</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_EUI48"
- >ST_EUI48</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_EUI64"
- >ST_EUI64</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_IPV4"
- >ST_IPV4</a><br /> <a target="mainFrame" href="netaddr-module.html#ST_IPV6"
- >ST_IPV6</a><br /><hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.address-module.html b/docs/api/toc-netaddr.address-module.html
deleted file mode 100755
index db02fac..0000000
--- a/docs/api/toc-netaddr.address-module.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>address</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module address</h1>
-<hr />
- <h2 class="toc">Classes</h2>
- <h2 class="toc">Functions</h2>
- <h2 class="toc">Variables</h2>
-<hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.core-module.html b/docs/api/toc-netaddr.core-module.html
deleted file mode 100644
index 60c0465..0000000
--- a/docs/api/toc-netaddr.core-module.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>core</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module core</h1>
-<hr />
- <h2 class="toc">Classes</h2>
-<hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.eui-module.html b/docs/api/toc-netaddr.eui-module.html
deleted file mode 100644
index 5d11039..0000000
--- a/docs/api/toc-netaddr.eui-module.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>eui</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module eui</h1>
-<hr />
- <h2 class="toc">Classes</h2>
- <h2 class="toc">Functions</h2>
- <h2 class="toc">Variables</h2>
-<hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.ip-module.html b/docs/api/toc-netaddr.ip-module.html
deleted file mode 100644
index 860ba5f..0000000
--- a/docs/api/toc-netaddr.ip-module.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>ip</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module ip</h1>
-<hr />
- <h2 class="toc">Classes</h2>
- <a target="mainFrame" href="netaddr.ip.DictUpdater-class.html"
- >DictUpdater</a><br /> <a target="mainFrame" href="netaddr.ip.IPv4Parser-class.html"
- >IPv4Parser</a><br /> <a target="mainFrame" href="netaddr.ip.IPv6Parser-class.html"
- >IPv6Parser</a><br /> <a target="mainFrame" href="netaddr.ip.LineRecordParser-class.html"
- >LineRecordParser</a><br /> <a target="mainFrame" href="netaddr.ip.MulticastParser-class.html"
- >MulticastParser</a><br /> <h2 class="toc">Functions</h2>
- <a target="mainFrame" href="netaddr.ip-module.html#load_iana_info"
- >load_iana_info</a><br /> <a target="mainFrame" href="netaddr.ip-module.html#query"
- >query</a><br /> <h2 class="toc">Variables</h2>
- <a target="mainFrame" href="netaddr.ip-module.html#IANA_INFO"
- >IANA_INFO</a><br /><hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.misc-module.html b/docs/api/toc-netaddr.misc-module.html
deleted file mode 100644
index 00ee23a..0000000
--- a/docs/api/toc-netaddr.misc-module.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>misc</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module misc</h1>
-<hr />
- <h2 class="toc">Functions</h2>
- <a target="mainFrame" href="netaddr.misc-module.html#ipv4_cidr_prefixes"
- >ipv4_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#ipv6_cidr_prefixes"
- >ipv6_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#print_ipv4_cidr_prefixes"
- >print_ipv4_cidr_prefixes</a><br /> <a target="mainFrame" href="netaddr.misc-module.html#print_ipv6_cidr_prefixes"
- >print_ipv6_cidr_prefixes</a><br /><hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc-netaddr.strategy-module.html b/docs/api/toc-netaddr.strategy-module.html
deleted file mode 100755
index bd9810c..0000000
--- a/docs/api/toc-netaddr.strategy-module.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>strategy</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Module strategy</h1>
-<hr />
- <h2 class="toc">Classes</h2>
- <h2 class="toc">Variables</h2>
-<hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/docs/api/toc.html b/docs/api/toc.html
deleted file mode 100755
index bb9da0c..0000000
--- a/docs/api/toc.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>Table of Contents</title>
- <link rel="stylesheet" href="epydoc.css" type="text/css" />
- <script type="text/javascript" src="epydoc.js"></script>
-</head>
-
-<body bgcolor="white" text="black" link="blue" vlink="#204080"
- alink="#204080">
-<h1 class="toc">Table&nbsp;of&nbsp;Contents</h1>
-<hr />
- <a target="moduleFrame" href="toc-everything.html">Everything</a>
- <br />
- <h2 class="toc">Modules</h2>
- <a target="moduleFrame" href="toc-netaddr-module.html"
- onclick="setFrame('toc-netaddr-module.html','netaddr-module.html');" >netaddr</a><br /> <a target="moduleFrame" href="toc-netaddr.ip-module.html"
- onclick="setFrame('toc-netaddr.ip-module.html','netaddr.ip-module.html');" >netaddr.ip</a><br /> <a target="moduleFrame" href="toc-netaddr.misc-module.html"
- onclick="setFrame('toc-netaddr.misc-module.html','netaddr.misc-module.html');" >netaddr.misc</a><br /><hr />
-
-<script type="text/javascript">
- <!--
- // Private objects are initially displayed (because if
- // javascript is turned off then we want them to be
- // visible); but by default, we want to hide them. So hide
- // them unless we have a cookie that says to show them.
- checkCookie();
- // -->
-</script>
-</body>
-</html>
diff --git a/netaddr/__init__.py b/netaddr/__init__.py
index 6478176..1bbfb3b 100755
--- a/netaddr/__init__.py
+++ b/netaddr/__init__.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
#-----------------------------------------------------------------------------
# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
#
@@ -13,78 +12,42 @@ if _sys.version_info[0:2] < (2, 4):
__version__ = '0.7'
-import struct as _struct
-
-#-----------------------------------------------------------------------------
-# Constants.
-#-----------------------------------------------------------------------------
-
-#: True if platform is natively big endian, False otherwise.
-BIG_ENDIAN_PLATFORM = _struct.pack('=h', 1) == _struct.pack('>h', 1)
-
-AT_UNSPEC = 0x0 #: unspecified address type constant.
-AT_INET = 0x4 #: IPv4 address type constant.
-AT_INET6 = 0x6 #: IPv6 address type constant.
-AT_LINK = 0x30 #: MAC/EUI-48 address type constant.
-AT_EUI64 = 0x40 #: EUI-64 address type constant.
-
-#: Address type to address description lookup dictionary.
-AT_NAMES = {
- # Address Type : Descriptive Name.
- AT_UNSPEC : 'unspecified',
- AT_INET : 'IPv4',
- AT_INET6 : 'IPv6',
- AT_LINK : 'MAC',
- AT_EUI64 : 'EUI-64',
-}
-
-#-----------------------------------------------------------------------------
-# Custom exceptions.
-#-----------------------------------------------------------------------------
-
-class AddrFormatError(Exception):
- """
- An Exception indicating that a network address format is not recognised.
- """
- pass
-
-class AddrConversionError(Exception):
- """
- An Exception indicating a failure to convert between address types or
- notations.
- """
- pass
-
-#-----------------------------------------------------------------------------
-# Submodule imports.
-#-----------------------------------------------------------------------------
-
-from netaddr.address import nrange, IP, IPRange, IPRangeSet, CIDR, \
- IPGlob, EUI, CIDRGroup
-
-from netaddr.eui import OUI, IAB, NotRegisteredError
-
-import netaddr.ip
-
-from netaddr.strategy import ST_IPV4, ST_IPV6, ST_EUI48, ST_EUI64
-
-#-----------------------------------------------------------------------------
-# Public interface.
-#-----------------------------------------------------------------------------
-__all__ = [
- # type constants
- 'AT_UNSPEC', 'AT_INET', 'AT_INET6', 'AT_LINK', 'AT_EUI64',
-
- # module specific exceptions
- 'AddrFormatError', 'AddrConversionError', 'NotRegisteredError',
-
- # shared strategy objects
- 'ST_IPV4', 'ST_IPV6', 'ST_EUI48', 'ST_EUI64',
-
- # main interface classes
- 'CIDR', 'IP', 'IPRange', 'IPRangeSet', 'IPGlob', 'CIDRGroup',
- 'EUI', 'OUI', 'IAB',
-
- # functions
- 'nrange',
-]
+from netaddr.core import AddrConversionError, AddrFormatError
+
+from netaddr.ip import IP, cidr_abbrev_to_verbose, cidr_exclude, cidr_merge, \
+ iprange_to_cidrs, spanning_cidr, within_iprange, iter_iprange, \
+ iter_unique_ips
+
+from netaddr.ipglob import cidr_to_glob, glob_to_cidrs, glob_to_iprange, \
+ valid_glob, iprange_to_globs
+
+from netaddr.eui import NotRegisteredError, EUI, IAB, OUI
+
+from netaddr.strategy.eui48 import mac_eui48, mac_unix, mac_cisco, mac_bare, \
+ mac_pgsql
+
+__all__ = """AddrConversionError
+AddrFormatError
+EUI
+IAB
+IP
+NotRegisteredError
+OUI
+cidr_abbrev_to_verbose
+cidr_exclude
+cidr_merge
+cidr_to_glob
+glob_to_cidrs
+glob_to_iprange
+iprange_to_cidrs
+iprange_to_globs
+iter_iprange
+iter_unique_ips
+mac_bare
+mac_cisco
+mac_eui48
+mac_pgsql
+mac_unix
+spanning_cidr
+valid_glob
+within_iprange""".split("\n")
diff --git a/netaddr/address.py b/netaddr/address.py
deleted file mode 100755
index 06bcdf3..0000000
--- a/netaddr/address.py
+++ /dev/null
@@ -1,2926 +0,0 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-network address classes (IP, EUI) and associated aggregate classes (CIDR,
-IPGlob and IPRange).
-"""
-import math as _math
-import socket as _socket
-import re as _re
-
-from netaddr import AddrFormatError, AddrConversionError, AT_UNSPEC, \
- AT_INET, AT_INET6, AT_LINK, AT_EUI64, AT_NAMES
-
-from netaddr.strategy import ST_IPV4, ST_IPV6, ST_EUI48, ST_EUI64, \
- AddrStrategy
-
-from netaddr.eui import OUI, IAB
-
-from netaddr.util import num_bits
-
-#: Address type to strategy object lookup dict.
-AT_STRATEGIES = {
- AT_UNSPEC : None,
- AT_INET : ST_IPV4,
- AT_INET6 : ST_IPV6,
- AT_LINK : ST_EUI48,
- AT_EUI64 : ST_EUI64,
-}
-
-#-----------------------------------------------------------------------------
-class AddrTypeDescriptor(object):
- """
- A descriptor that checks addr_type property assignments for validity and
- also keeps the strategy property in sync with any changes made.
- """
- def __init__(self, addr_types):
- """
- Constructor.
-
- @param addr_types: a list of address types constants that are
- acceptable for assignment to the addr_type property.
- """
- self.addr_types = addr_types
-
- def __set__(self, instance, value):
- if value not in self.addr_types:
- raise ValueError('addr_type %r is invalid for objects of ' \
- 'the %s() class!' % (value, instance.__class__.__name__))
- instance.__dict__['addr_type'] = value
- instance.__dict__['strategy'] = AT_STRATEGIES[value]
-
-#-----------------------------------------------------------------------------
-class AddrValueDescriptor(object):
- """
- A descriptor that checks assignments to the named parameter passed to the
- constructor.
-
- It accepts network addresses in either strings format or as unsigned
- integers. String based addresses are converted to their integer
- equivalents before assignment to the named parameter. Also ensures that
- addr_type and strategy are set correctly when parsing string based
- addresses.
- """
- def __init__(self, name):
- """
- Descriptor constructor.
-
- @param name: the name of attribute which will be assigned the value.
- """
- self.name = name
-
- def __set__(self, instance, value):
- if issubclass(value.__class__, Addr):
- if instance.strategy is None:
- instance.strategy = value.strategy
- value = int(value)
- else:
- if instance.addr_type == AT_UNSPEC:
- # Select a strategy object for this address.
- for strategy in instance.__class__.STRATEGIES:
- if strategy.valid_str(value):
- instance.strategy = strategy
- break
-
- # Make sure we picked up a strategy object.
- if instance.strategy is None:
- raise AddrFormatError('%r is not a supported address ' \
- 'format!' % value)
-
- if isinstance(value, (str, unicode)):
- # Calculate the integer value for this address.
- value = instance.strategy.str_to_int(value)
- elif isinstance(value, (int, long)):
- if not instance.strategy.valid_int(value):
- raise OverflowError('value %r cannot be represented ' \
- 'in %d bit(s)!' % (value, instance.strategy.width))
- else:
- raise AddrFormatError('%r is an unsupported type!' % value)
-
- instance.__dict__[self.name] = value
-
-#-----------------------------------------------------------------------------
-class StrategyDescriptor(object):
- """
- A descriptor that checks strategy property assignments for validity and
- also keeps the addr_type property in sync with any changes made.
- """
- def __init__(self, strategies):
- """
- Constructor.
-
- @param strategies: a list of strategy objects that are acceptable for
- assignment to the strategy property.
- """
- self.strategies = strategies
-
- def __set__(self, instance, value):
- if value not in self.strategies:
- raise Exception('%r is not a supported strategy!' % value)
- instance.__dict__['strategy'] = value
- instance.__dict__['addr_type'] = instance.strategy.addr_type
-
-#-----------------------------------------------------------------------------
-class PrefixLenDescriptor(object):
- """
- A descriptor that checks prefixlen property assignments for validity based
- on address type. Also accepts netmasks and hostmasks which can easily be
- converted to the equivalent prefixlen integer.
- """
- def __init__(self, class_id=None):
- """
- Constructor.
-
- @param class_id: (optional) the name of the class that uses this
- descriptor.
- """
- self.class_id = class_id
-
- def __set__(self, instance, value):
- try:
- # Basic integer subnet prefix.
- prefixlen = int(value)
- except ValueError:
- # Convert possible subnet mask to integer subnet prefix.
- ip = IP(value)
-
- if instance.addr_type != ip.addr_type:
- raise ValueError('address and netmask type mismatch!')
-
- if ip.is_netmask():
- # prefixlen is a netmask address.
- prefixlen = ip.netmask_bits()
- elif ip.is_hostmask():
- # prefixlen is an ACL (hostmask) address.
- netmask = IP(ip.strategy.max_int ^ int(ip), ip.addr_type)
- prefixlen = netmask.netmask_bits()
- else:
- raise ValueError('%s is not a valid netmask/hostmask!' % ip)
-
- # Validate subnet prefix.
- if not 0 <= prefixlen <= instance.strategy.width:
- raise ValueError('%d is an invalid prefix for an %s CIDR!' \
- % (prefixlen, AT_NAMES[instance.addr_type]))
-
- # Make sure instance is not a subnet mask trying to set a prefix!
- if isinstance(instance, IP):
- if instance.is_netmask() and instance.addr_type == AT_INET \
- and prefixlen != 32 and instance.value != 0:
- raise ValueError('IPv4 netmasks must have a prefix of /32!')
-
- instance.__dict__['prefixlen'] = prefixlen
-
- # Don't run this on a CIDR that is initialising itself.
- if self.class_id == 'CIDR' and 'first' in instance.__dict__:
- first = instance.__dict__['first']
- strategy = instance.__dict__['strategy']
- hostmask = (1 << (strategy.width - prefixlen)) - 1
- instance.__dict__['first'] = (first | hostmask) - hostmask
- instance.__dict__['last'] = first | hostmask
-
-#-----------------------------------------------------------------------------
-class FormatDescriptor(object):
- """
- A descriptor that checks formatter property assignments for validity.
- """
- def __init__(self, default):
- """
- Constructor.
-
- @param default: the default callable to use if the formatter
- property is None.
- """
- self.default = default
-
- def __set__(self, instance, value):
- if callable(value) and \
- value in (str, int, Addr, IP, long, unicode, hex):
- pass
- elif value is None:
- # Use default.
- value = self.default
- else:
- raise TypeError("unsupported formatter callable: %r!" % value)
-
- instance.__dict__['fmt'] = value
-
-#-----------------------------------------------------------------------------
-class Addr(object):
- """
- The base class containing common functionality for all subclasses
- representing various network address types.
-
- It is a fully functioning class (as opposed to a virtual class) with a
- heuristic constructor that detects the type of address via the first
- argument if it is a string and sets itself up accordingly. If the first
- argument is an integer, then a constant must be provided via the second
- argument indicating the address type explicitly.
-
- Objects of this class behave differently dependent upon the type of address
- they represent.
- """
- STRATEGIES = (ST_IPV4, ST_IPV6, ST_EUI48, ST_EUI64)
- ADDR_TYPES = (AT_UNSPEC, AT_INET, AT_INET6, AT_LINK, AT_EUI64)
-
- # Descriptor registrations.
- value = AddrValueDescriptor('value')
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
-
- def __init__(self, addr, addr_type=AT_UNSPEC):
- """
- Constructor.
-
- @param addr: the string form of a network address, or a network byte
- order integer within the supported range for the address type.
-
- @param addr_type: (optional) the network address type. If addr is an
- integer, this argument becomes mandatory.
- """
- self.addr_type = addr_type
- self.value = addr
-
- def __hash__(self):
- """@return: hash of this address suitable for dict keys, sets etc"""
- return hash((self.value, self.addr_type))
-
- def __int__(self):
- """@return: value of this address as an unsigned integer"""
- return self.value
-
- def __long__(self):
- """@return: value of this address as an unsigned integer"""
- return self.value
-
- def __str__(self):
- """@return: common string representation of this address"""
- return self.strategy.int_to_str(self.value)
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object"""
- return "%s(%r)" % (self.__class__.__name__, str(self))
-
- def bits(self, word_sep=None):
- """
- @param word_sep: (optional) the separator to insert between words.
- Default: None - use default separator for address type.
-
- @return: human-readable binary digit string of this address"""
- return self.strategy.int_to_bits(self.value, word_sep)
-
- def packed(self):
- """@return: binary packed string of this address"""
- return self.strategy.int_to_packed(self.value)
-
- def bin(self):
- """
- @return: standard Python binary representation of this address. A back
- port of the format provided by the builtin bin() type available in
- Python 2.6.x and higher."""
- return self.strategy.int_to_bin(self.value)
-
- def __len__(self):
- """@return: The size (width) of this address in bits"""
- return self.strategy.width
-
- def __iter__(self):
- """@return: An iterator over individual words in this address"""
- return iter(self.strategy.int_to_words(self.value))
-
- def __getitem__(self, index):
- """
- @return: The integer value of the word referenced by index (both
- positive and negative). Raises C{IndexError} if index is out
- of bounds. Also supports Python list slices for accessing
- word groups.
- """
- if isinstance(index, (int, long)):
- # Indexing, including negative indexing goodness.
- num_words = self.strategy.num_words
- if not (-num_words) <= index <= (num_words - 1):
- raise IndexError('index out range for address type!')
- return self.strategy.int_to_words(self.value)[index]
- elif isinstance(index, slice):
- # Slicing baby!
- words = self.strategy.int_to_words(self.value)
- return [words[i] for i in range(*index.indices(len(words)))]
- else:
- raise TypeError('unsupported type %r!' % index)
-
- def __setitem__(self, index, value):
- """Sets the value of the word referenced by index in this address"""
- if isinstance(index, slice):
- # TODO - settable slices.
- raise NotImplementedError('settable slices not yet supported!')
-
- if not isinstance(index, (int, long)):
- raise TypeError('index not an integer!')
-
- if not 0 <= index <= (self.strategy.num_words - 1):
- raise IndexError('index %d outside address type boundary!' % index)
-
- if not isinstance(value, (int, long)):
- raise TypeError('value not an integer!')
-
- if not 0 <= value <= self.strategy.max_word:
- raise IndexError('value %d outside word size maximum of %d bits!'
- % (value, self.strategy.word_size))
-
- words = list(self.strategy.int_to_words(self.value))
- words[index] = value
- self.value = self.strategy.words_to_int(words)
-
- def __hex__(self):
- """
- @return: hexadecimal string representation of this address (in network
- byte order).
- """
- return hex(self.value).rstrip('L').lower()
-
- def __iadd__(self, num):
- """
- Increment value of network address by specified amount. Behaves like
- an unsigned integer, rolling over to zero when it reaches the maximum
- value threshold.
-
- @param num: size of increment
- """
- try:
- new_value = self.value + num
- if new_value > self.strategy.max_int:
- self.value = new_value - (self.strategy.max_int + 1)
- else:
- self.value = new_value
- except TypeError:
- raise TypeError('Increment value must be an integer!')
- return self
-
- def __isub__(self, num):
- """
- Decrement value of network address by specified amount. Behaves like
- an unsigned integer, rolling over to maximum value when it goes below
- zero.
-
- @param num: size of decrement
- """
- try:
- new_value = self.value - num
- if new_value < 0:
- self.value = new_value + (self.strategy.max_int + 1)
- else:
- self.value = new_value
- except TypeError:
- raise TypeError('Decrement value must be an integer!')
- return self
-
- def __add__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: A new (potentially larger) Addr class/subclass instance.
- """
- return self.__class__(self.value + int(other), self.addr_type)
-
- def __sub__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: A new (potentially smaller) Addr class/subclass instance.
- """
- return self.__class__(self.value - int(other), self.addr_type)
-
- def __eq__(self, other):
- """
- @return: C{True} if this address is numerically the same as other,
- C{False} otherwise.
- """
- try:
- return (self.addr_type, self.value) == (other.addr_type,
- other.value)
- except AttributeError:
- return False
-
- def __ne__(self, other):
- """
- @return: C{False} if this address is numerically the same as the
- other, C{True} otherwise.
- """
- try:
- return (self.addr_type, self.value) != (other.addr_type,
- other.value)
- except AttributeError:
- return True
-
- def __lt__(self, other):
- """
- @return: C{True} if this address is numerically lower in value than
- other, C{False} otherwise.
- """
- try:
- return (self.addr_type, self.value) < (other.addr_type,
- other.value)
- except AttributeError:
- return False
-
- def __le__(self, other):
- """
- @return: C{True} if this address is numerically lower or equal in
- value to other, C{False} otherwise.
- """
- try:
- return (self.addr_type, self.value) <= (other.addr_type,
- other.value)
- except AttributeError:
- return False
-
- def __gt__(self, other):
- """
- @return: C{True} if this address is numerically greater in value than
- other, C{False} otherwise.
- """
- try:
- return (self.addr_type, self.value) > (other.addr_type,
- other.value)
- except AttributeError:
- return False
-
- def __ge__(self, other):
- """
- @return: C{True} if this address is numerically greater or equal in
- value to other, C{False} otherwise.
- """
- try:
- return (self.addr_type, self.value) >= (other.addr_type,
- other.value)
- except AttributeError:
- return False
-
- def __or__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: bitwise OR (x | y) of self.value with other.value.
- """
- return self.__class__(self.value | other.value, self.addr_type)
-
- def __and__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: bitwise AND (x & y) of self.value with other.value.
- """
- return self.__class__(self.value | other.value, self.addr_type)
-
- def __xor__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: bitwise exclusive OR (x ^ y) of self.value with other.value.
- """
- return self.__class__(self.value ^ other.value, self.addr_type)
-
- def __lshift__(self, numbits):
- """
- @param numbits: size of shift (in bits).
-
- @return: integer value of this IP address shifted left by x bits.
- """
- return self.__class__(self.value << numbits, self.addr_type)
-
- def __rshift__(self, numbits):
- """
- @param numbits: size of shift (in bits).
-
- @return: integer value of this IP address right shifted by x bits.
- """
- return self.__class__(self.value >> numbits, self.addr_type)
-
- def __invert__(self, other):
- """
- @param other: an integer or int-like object.
-
- @return: inversion (~x) of self.value.
- """
- return self.__class__(~self.value)
-
-#-----------------------------------------------------------------------------
-class EUI(Addr):
- """
- Represents an IEEE EUI (Extended Unique Identifier) indentifier.
-
- Input parser is flexible, supporting EUI-48 (including the many Media
- Access Control variants) and EUI-64.
- """
- STRATEGIES = (ST_EUI48, ST_EUI64)
- ADDR_TYPES = (AT_UNSPEC, AT_LINK, AT_EUI64)
-
- # Descriptor registrations.
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
-
- def __init__(self, addr, addr_type=AT_UNSPEC):
- """
- Constructor.
-
- @param addr: an EUI-48 (MAC) or EUI-64 address in string format or as
- an unsigned integer.
-
- @param addr_type: (optional) the specific EUI address type (C{AT_LINK}
- or C{AT_EUI64}). This argument is used mainly to differentiate
- EUI48 and EUI48 identifiers that may be numerically equivalent.
- """
- # Choose a sensible default when addr is an integer and addr_type is
- # not specified.
- if addr_type == AT_UNSPEC:
- if 0 <= addr <= 0xffffffffffff:
- addr_type = AT_LINK
- elif 0xffffffffffff < addr <= 0xffffffffffffffff:
- addr_type = AT_EUI64
-
- super(EUI, self).__init__(addr, addr_type)
-
- def oui(self, fmt=OUI):
- """
- @param fmt: callable used on return values. Default: L{OUI} object.
- Also Supports str(), unicode(), int() and long().
-
- @return: The OUI (Organisationally Unique Identifier) for this EUI.
- """
- if callable(fmt) and fmt in (OUI, int, long):
- return fmt(self.value >> 24)
- elif callable(fmt) and fmt in (str, unicode, None):
- return '-'.join(["%02x" % i for i in self[0:3]]).upper()
- else:
- raise TypeError("unsupported formatter callable: %r!" % fmt)
-
- def ei(self):
- """@return: The EI (Extension Identifier) for this EUI"""
- if self.strategy == ST_EUI48:
- return '-'.join(["%02x" % i for i in self[3:6]]).upper()
- elif self.strategy == ST_EUI64:
- return '-'.join(["%02x" % i for i in self[3:8]]).upper()
-
- def isiab(self):
- """@return: True if this EUI is an IAB address, False otherwise"""
- return 0x50c2000 <= (self.value >> 12) <= 0x50c2fff
-
- def iab(self, fmt=IAB):
- """
- @param fmt: callable used on return values. Default: L{IAB} object.
- Also Supports str(), unicode(), int() and long().
-
- @return: If isiab() is True, the IAB (Individual Address Block)
- is returned, None otherwise.
- """
- if self.isiab():
- if callable(fmt) and fmt in (IAB, int, long):
- return fmt(self.value >> 12)
- elif callable(fmt) and fmt in (str, unicode, None):
- usermask = (1 << (self.strategy.width - 36)) - 1
- last_eui = self.value | usermask
- first_eui = last_eui - usermask
- iab_words = self.strategy.int_to_words(first_eui)
- return '-'.join(["%02x" % i for i in iab_words]).upper()
- else:
- raise TypeError("unsupported formatter callable: %r!" % fmt)
-
- def eui64(self):
- """
- @return: The value of this EUI object as a new 64-bit EUI object.
- - If this object represents an EUI-48 it is converted to EUI-64
- as per the standard.
- - If this object is already and EUI-64, it just returns a new,
- numerically equivalent object is returned instead.
- """
- if self.addr_type == AT_LINK:
- eui64_words = ["%02x" % i for i in self[0:3]] + ['ff', 'fe'] + \
- ["%02x" % i for i in self[3:6]]
-
- return self.__class__('-'.join(eui64_words))
- else:
- return EUI(str(self))
-
- def ipv6_link_local(self):
- """
- @return: new link local IPv6 L{IP} object based on this L{EUI} using
- technique described in RFC 4291. B{Please Note:} this technique
- poses security risks in certain scenarios. Please read RFC 4941 for
- details. Reference: RFCs 4291 and 4941.
- """
- prefix = 'fe80:0000:0000:0000:'
-
- # Add 2 to the first octet of this EUI address (temporarily).
- self[0] += 2
-
- if self.addr_type == AT_LINK:
- # Modify MAC to make it an EUI-64.
- suffix = ["%02x" % i for i in self[0:3]] + ['ff', 'fe'] + \
- ["%02x" % i for i in self[3:6]]
- else:
- suffix = ["%02x" % i for i in list(self)]
-
- suffix = ["%02x%02x" % (int(x[0], 16), int(x[1], 16)) for x in \
- zip(suffix[::2], suffix[1::2])]
-
- # Subtract 2 again to return EUI to its original value.
- self[0] -= 2
-
- eui64 = ':'.join(suffix)
- addr = prefix + eui64 + '/64'
- return IP(addr)
-
- def info(self):
- """
- @return: A record dict containing IEEE registration details for this
- EUI (MAC-48) if available, None otherwise.
- """
- data = {'OUI': self.oui().registration()}
- if self.isiab():
- data['IAB'] = self.iab().registration()
- return data
-
-#-----------------------------------------------------------------------------
-class IP(Addr):
- """
- Represents B{individual} IPv4 and IPv6 addresses.
-
- B{Please Note:} this class is intended to provide low-level functionality
- to individual IP addresses such as octet/hextet access, integer/hex/binary
- conversions, etc. If you are coming from other libraries you may expect to
- find much higher level networking operations here. While the inclusion of
- a bitmask prefix or netmask to indicate subnet membership is permitted by
- the class constructor they are provided only as a convenience to the user.
-
- All higher level subnet and network operations can be found in objects of
- classes L{CIDR}, L{IPRange} and L{IPGlob}. There are handy helper methods
- here, (C{.cidr()}, C{.iprange()} and C{.ipglob()}) that return
- pre-initialised objects of those classes without you having to call them
- explicitly.
-
- Example usage ::
-
- >>> ip = IP('10.0.0.1')
- >>> list(ip) == [10, 0, 0, 1]
- True
- >>> ip += 1
- >>> str(ip) == '10.0.0.2'
- True
-
- >>> IP('10.0.0.0/28').iprange()
- IPRange('10.0.0.0', '10.0.0.15')
-
- >>> IP('10.0.0.64/24').cidr()
- CIDR('10.0.0.0/24')
-
- >>> IP('192.168.0.1/255.255.253.0').ipglob()
- IPGlob('192.168.0-1.*')
-
- >>> ipv6 = IP('fe80::20f:1fff:fe12:e733')
- >>> ipv6[0:4]
- [65152, 0, 0, 0]
-
- >>> IP('fe80::20f:1fff:fe12:e733/64').cidr()
- CIDR('fe80::/64')
-
- See those classes for details on the functionality they provide.
- """
- STRATEGIES = (ST_IPV4, ST_IPV6)
- ADDR_TYPES = (AT_UNSPEC, AT_INET, AT_INET6)
- TRANSLATE_STR = ''.join([chr(_) for _ in range(256)]) #FIXME: replace this
-
- # Descriptor registrations.
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
- prefixlen = PrefixLenDescriptor()
-
- def __init__(self, addr, addr_type=AT_UNSPEC):
- """
- Constructor.
-
- @param addr: an IPv4 or IPv6 address string with an optional subnet
- prefix or an unsigned integer.
-
- @param addr_type: (optional) the IP address type (C{AT_INET} or
- C{AT_INET6}). This argument is used mainly to differentiate IPv4
- and IPv6 addresses that may be numerically equivalent.
- """
- prefixlen = None
- # Check for prefix in address and split it out.
- try:
- if '/' in addr:
- (addr, prefixlen) = addr.split('/', 1)
- except TypeError:
- # addr is an int - let it pass through.
- pass
-
- # Choose a sensible default when addr is an integer and addr_type is
- # not specified.
- if addr_type == AT_UNSPEC:
- if 0 <= addr <= 0xffffffff:
- addr_type = AT_INET
- elif 0xffffffff < addr <= 0xffffffffffffffffffffffffffffffff:
- addr_type = AT_INET6
-
- # Call superclass constructor before processing subnet prefix to
- # assign the strategyn object.
- super(IP, self).__init__(addr, addr_type)
-
- # Set the subnet prefix.
- if prefixlen is None:
- self.__dict__['prefixlen'] = self.strategy.width
- else:
- self.prefixlen = prefixlen
-
- def is_netmask(self):
- """
- @return: C{True} if this addr is a mask that would return a host id,
- C{False} otherwise.
- """
- int_val = (self.value ^ self.strategy.max_int) + 1
- return (int_val & (int_val - 1) == 0)
-
- def netmask_bits(self): #FIXME: replace this
- """
- @return: If this address is a valid netmask, the number of non-zero
- bits are returned, otherwise it returns the width in bits for
- based on the version, 32 for IPv4 and 128 for IPv6.
- """
- if not self.is_netmask():
- return self.strategy.width
-
- bits = self.strategy.int_to_bits(self.value)
- mask_bits = bits.translate(IP.TRANSLATE_STR, ':.0')
- mask_length = len(mask_bits)
-
- if not 1 <= mask_length <= self.strategy.width:
- raise ValueError('Unexpected mask length %d for address type!' \
- % mask_length)
-
- return mask_length
-
- def reverse_dns(self):
- """@return: The reverse DNS lookup string for this IP address"""
- return self.strategy.int_to_arpa(self.value)
-
- def is_hostmask(self):
- """
- @return: C{True} if this address is a mask that would return a host
- id, C{False} otherwise.
- """
- int_val = self.value + 1
- return (int_val & (int_val-1) == 0)
-
- def hostname(self):
- """
- @return: Returns the FQDN for this IP address via a DNS query
- using gethostbyaddr() Python's socket module.
- """
- try:
- return _socket.gethostbyaddr(str(self))[0]
- except:
- return
-
- def cidr(self, strict=True):
- """
- @param strict: (optional) If True and non-zero bits are found to the
- right of the subnet mask/prefix a ValueError is raised. If False,
- CIDR returned has these bits automatically truncated.
- (default: True)
-
- @return: A L{CIDR} object based on this IP address
- """
- hostmask = (1 << (self.strategy.width - self.prefixlen)) - 1
- start = (self.value | hostmask) - hostmask
- network = self.strategy.int_to_str(start)
- return CIDR("%s/%d" % (network, self.prefixlen), strict=strict)
-
- def ipglob(self):
- """@return: A L{IPGlob} object based on this IP address"""
- if self.addr_type == AT_INET6:
- raise AddrConversionError('ipglobs not support by IPv6!')
- return self.iprange().ipglob()
-
- def iprange(self):
- """@return: A L{CIDR} object based on this IP address"""
- hostmask = (1 << (self.strategy.width - self.prefixlen)) - 1
- netmask = self.strategy.max_int ^ hostmask
- first = (self.value | hostmask) - hostmask
- last = first | hostmask
- return IPRange(self.strategy.int_to_str(first),
- self.strategy.int_to_str(last))
-
- def ipv4(self):
- """
- @return: A new version 4 L{IP} object numerically equivalent this
- address. If this object is already IPv4 then a copy is returned. If
- this object is IPv6 and its value is compatible with IPv4, a new IPv4
- L{IP} object is returned.
-
- Raises an L{AddrConversionError} is IPv6 address cannot be converted.
- """
- ip_addr = None
- if self.addr_type == AT_INET:
- ip_addr = IP(self.value, AT_INET)
- ip_addr.prefixlen = self.prefixlen
- elif self.addr_type == AT_INET6:
- words = self.strategy.int_to_words(self.value)
- #TODO: Replace these with bit shifts.
- if words[0:6] == (0, 0, 0, 0, 0, 0):
- ip_addr = IP(self.value, AT_INET)
- ip_addr.prefixlen = self.prefixlen - 96
- #TODO: Replace these with bit shifts.
- elif words[0:6] == (0, 0, 0, 0, 0, 0xffff):
- ip_addr = IP(self.value - 0xffff00000000, AT_INET)
- ip_addr.prefixlen = self.prefixlen - 96
- else:
- raise AddrConversionError('IPv6 address %s not suitable for' \
- 'IPv4 conversion!' % self)
- return ip_addr
-
- def ipv6(self, ipv4_compatible=False):
- """
- B{Please Note:} the IPv4-Mapped IPv6 address format is now considered
- deprecated. Reference: RFC 4291
-
- @param ipv4_compatible: If C{True} returns an IPv4-Mapped address
- (::ffff:x.x.x.x), an IPv4-Compatible (::x.x.x.x) address
- otherwise. Default: False (IPv4-Mapped).
-
- @return: A new L{IP} version 6 object that is numerically equivalent
- this address. If this object is already IPv6 then a copy of this
- object is returned. If this object is IPv4, a new version 6 L{IP}
- object is returned.
- """
- ip_addr = None
- if self.addr_type == AT_INET6:
- ip_addr = IP(self.value, AT_INET6)
- ip_addr.prefixlen = self.prefixlen - 96
- elif self.addr_type == AT_INET:
- ip_addr = IP(self.value, AT_INET6)
- if ipv4_compatible:
- # IPv4-Compatible IPv6 address
- ip_addr[5] = 0
- else:
- # IPv4-Mapped IPv6 address
- ip_addr[5] = 0xffff
- ip_addr.prefixlen = self.prefixlen + 96
- return ip_addr
-
- def is_unicast(self):
- """@return: C{True} if this IP is unicast, C{False} otherwise"""
- return not self.is_multicast()
-
- def is_loopback(self):
- """
- @return: C{True} if this IP is loopback address (not for network
- transmission), C{False} otherwise.
- References: RFC 3330 and 4291.
- """
- if self.addr_type == AT_INET:
- return self in CIDR('127/8')
- elif self.addr_type == AT_INET6:
- return self == IP('::1')
-
- def is_multicast(self):
- """@return: C{True} if this IP is multicast, C{False} otherwise"""
- if self.addr_type == AT_INET:
- return self in CIDR('224/4')
- elif self.addr_type == AT_INET6:
- return self in CIDR('ff00::/8')
-
- def is_private(self):
- """
- @return: C{True} if this IP is for internal/private use only
- (i.e. non-public), C{False} otherwise. Reference: RFCs 1918,
- 3330, 4193, 3879 and 2365.
- """
- if self.addr_type == AT_INET:
- for cidr in (CIDR('192.168/16'), CIDR('10/8'),CIDR('172.16/12'),
- CIDR('192.0.2.0/24'), CIDR('239.192/14')):
- if self in cidr:
- return True
- elif self.addr_type == AT_INET6:
- # Please Note: FEC0::/10 has been deprecated! See RFC 3879.
- return self in CIDR('fc00::/7') # ULAs - Unique Local Addresses
-
- if self.is_link_local():
- return True
-
- return False
-
- def is_link_local(self):
- """
- @return: C{True} if this IP is link-local address C{False} otherwise.
- Reference: RFCs 3927 and 4291.
- """
- if self.addr_type == AT_INET:
- return self in CIDR('169.254/16')
- elif self.addr_type == AT_INET6:
- return self in CIDR('fe80::/10')
-
- def is_reserved(self):
- """
- @return: C{True} if this IP is in IANA reserved range, C{False}
- otherwise. Reference: RFCs 3330 and 3171.
- """
- if self.addr_type == AT_INET:
- # Use of ipglobs here much more concise than CIDR...
- for cidr in (CIDR('240/4'), CIDR('234/7'), CIDR('236/7'),
- IPGlob('225-231.*.*.*'), IPGlob('234-238.*.*.*')):
- if self in cidr:
- return True
- if self.addr_type == AT_INET6:
- for cidr in (CIDR('ff00::/12'),CIDR('::/8'), CIDR('0100::/8'),
- CIDR('0200::/7'), CIDR('0400::/6'), CIDR('0800::/5'),
- CIDR('1000::/4'), CIDR('4000::/3'), CIDR('6000::/3'),
- CIDR('8000::/3'), CIDR('A000::/3'), CIDR('C000::/3'),
- CIDR('E000::/4'), CIDR('F000::/5'), CIDR('F800::/6'),
- CIDR('FE00::/9')):
- if self in cidr:
- return True
- return False
-
- def is_ipv4_mapped(self):
- """
- @return: C{True} if this IP is IPv4-compatible IPv6 address, C{False}
- otherwise.
- """
- return self.addr_type == AT_INET6 and (self.value >> 32) == 0xffff
-
- def is_ipv4_compat(self):
- """
- @return: C{True} if this IP is IPv4-mapped IPv6 address, C{False}
- otherwise.
- """
- return self.addr_type == AT_INET6 and (self.value >> 32) == 0
-
- def info(self):
- """
- @return: A record dict containing IANA registration details for this
- IP address if available, None otherwise.
- """
- # This import is placed here for efficiency. If you don't call this
- # method, you don't take the (small), one time, import start up
- # penalty. Also gets around a nasty module dependency issue.
- # Two birds, one stone ...
- import netaddr.ip
- return netaddr.ip.query(self)
-
- def __str__(self):
- """@return: common string representation for this IP address"""
- return self.strategy.int_to_str(self.value)
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object."""
- if self.prefixlen == self.strategy.width:
- return "%s('%s')" % (self.__class__.__name__, str(self))
-
- return "%s('%s/%d')" % (self.__class__.__name__, str(self),
- self.prefixlen)
-
-#-----------------------------------------------------------------------------
-def nrange(start, stop, step=1, fmt=None):
- """
- An xrange work alike generator that produces sequences of IP addresses
- based on start and stop addresses, in intervals of step size.
-
- @param start: first IP address string or L{IP} object in range.
-
- @param stop: last IP address string or L{IP} object in range
-
- @param step: (optional) size of step between address in range.
- (Default: 1)
-
- @param fmt: (optional) callable used on addresses returned.
- (Default: None - L{IP} objects). Supported options :-
- - C{str} - IP address in string format
- - C{int}, C{long} - IP address as an unsigned integer
- - C{hex} - IP address as a hexadecimal number
- - L{IP} class/subclass or callable that accepts C{addr_value} and
- C{addr_type} arguments.
- """
- if not isinstance(start, IP):
- if isinstance(start, (str, unicode)):
- start = IP(start)
- else:
- raise TypeError('start is not recognised address in string ' \
- 'format or IP class/subclass instance!')
- else:
- # Use start object's constructor as formatter.
- if fmt is None:
- fmt = start.__class__
-
- if not isinstance(stop, IP):
- if isinstance(stop, (str, unicode)):
- stop = IP(stop)
- else:
- raise TypeError('stop is not recognised address string ' \
- 'or IP class/subclass instance!')
-
- if not isinstance(step, (int, long)):
- raise TypeError('step must be type int|long, not %s!' % type(step))
-
- if start.addr_type != stop.addr_type:
- raise TypeError('start and stop are not the same address type!')
-
- if step == 0:
- raise ValueError('step argument cannot be zero')
-
- negative_step = False
- addr_type = start.addr_type
-
- # We don't need objects from here onwards. Basic integer values will do
- # just fine.
- start_fmt = start.__class__
- start = int(start)
- stop = int(stop)
-
- if step < 0:
- negative_step = True
-
- index = start - step
-
- # Default formatter.
- if fmt is None:
- fmt = IP
-
- if fmt in (int, long, hex):
- # Yield network address integer values.
- while True:
- index += step
- if negative_step:
- if not index >= stop:
- return
- else:
- if not index <= stop:
- return
- yield fmt(index)
- elif fmt in (str, unicode):
- # Yield address string values.
- while True:
- index += step
- if negative_step:
- if not index >= stop:
- return
- else:
- if not index <= stop:
- return
- yield str(start_fmt(index, addr_type))
- else:
- # Yield network address objects.
- while True:
- index += step
- if negative_step:
- if not index >= stop:
- return
- else:
- if not index <= stop:
- return
-
- yield fmt(index, addr_type)
-
-#-----------------------------------------------------------------------------
-class IPRange(object):
- """
- Represents arbitrary contiguous blocks of IPv4 and IPv6 addresses using
- only a lower and upper bound IP address.
-
- It is the base class for more specialised block types such as L{CIDR()}
- and L{IPGlob()}. There is no requirement that the boundary IP addresses
- fall on strict bitmask boundaries.
-
- The sort order for sequence of mixed version L{IPRange} objects is IPv4
- followed by IPv6, based on the range's magnitude (size).
- """
- STRATEGIES = (ST_IPV4, ST_IPV6)
- ADDR_TYPES = (AT_UNSPEC, AT_INET, AT_INET6)
-
- # Descriptor registrations.
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
- first = AddrValueDescriptor('first')
- last = AddrValueDescriptor('last')
- fmt = FormatDescriptor(IP)
-
- def __init__(self, first, last, fmt=IP):
- """
- Constructor.
-
- @param first: start address for this IP address range.
-
- @param last: stop address for this IP address range.
-
- @param fmt: (optional) callable used to create return values.
- Default: L{IP()} objects. See L{nrange()} documentations for
- more details on the various options.
- """
- #TODO: this can be optimised, consider accepting addr_type via the
- #TODO: constructor.
- self.addr_type = AT_UNSPEC
- self.first = first
- self.last = last
- if self.last < self.first:
- raise IndexError('start address is greater than stop address!')
- self.fmt = fmt
-
- def __hash__(self):
- """
- @return: The hash of this address range. Allow them to be used in sets
- and as keys in dictionaries.
- """
- return hash((self.first, self.last, self.addr_type))
-
- def tuple(self):
- """
- @return: A 3-element tuple (first, last, addr_type) which represent
- the basic details of this IPRange object.
- """
- return self.first, self.last, self.addr_type
-
- def __len__(self):
- """
- @return: The total number of network addresses in this range.
- - Use this method only for ranges that contain less than
- C{2^31} addresses or try the L{size()} method. Raises an
- C{IndexError} if size is exceeded.
- """
- size = self.size()
- if size > (2 ** 31):
- # Use size() method in this class instead as len() will b0rk!
- raise IndexError("range contains greater than 2^31 addresses! " \
- "Use obj.size() instead.")
- return size
-
- def size(self):
- """
- @return: The total number of network addresses in this range.
- - Use this method in preference to L{__len__()} when size of
- ranges potentially exceeds C{2^31} addresses.
- """
- return self.last - self.first + 1
-
- def format(self, int_addr, fmt=None):
- """
- @param int_addr: a network address as an unsigned integer.
-
- @param fmt: (optional) a callable used on return values.
- Default: None. If set to None, this method uses the self.fmt
- setting instead. The argument is provided as an override option.
-
- @return: a network address in the format returned after passing it
- through this object's fmt property callable.
- """
- if fmt is None:
- fmt = self.fmt
-
- if fmt in (str, unicode):
- return self.strategy.int_to_str(int_addr)
- elif fmt in (int, long, hex):
- return fmt(int_addr)
- else:
- return fmt(int_addr, self.addr_type)
-
- def __getitem__(self, index):
- """
- @return: The IP address(es) in this address range referenced by
- index/slice. Slicing objects can produce large sequences so
- generator objects are returned instead of a list. Wrapping a slice
- with C{list()} or C{tuple()} may be required dependent on context
- in which it is called.
- """
-
- if isinstance(index, (int, long)):
- if (- self.size()) <= index < 0:
- # negative index.
- return self.format(self.last + index + 1)
- elif 0 <= index <= (self.size() - 1):
- # Positive index or zero index.
- return self.format(self.first + index)
- else:
- raise IndexError('index out range for address range size!')
- elif isinstance(index, slice):
- # slices
- #FIXME: IPv6 breaks the .indices() method on the slice object
- #FIXME: spectacularly. We'll have to work out the start, stop and
- #FIXME: step ourselves :-(
- #
- #FIXME: see PySlice_GetIndicesEx function in Python SVN
- #FIXME: repository for implementation details :-
- # http://svn.python.org/view/python/trunk/Objects/sliceobject.c
- (start, stop, step) = index.indices(self.size())
-
- start_addr = IP(self.first + start, self.addr_type)
- end_addr = IP(self.first + stop - step, self.addr_type)
- return nrange(start_addr, end_addr, step, fmt=self.fmt)
- else:
- raise TypeError('unsupported type %r!' % index)
-
- def __iter__(self):
- """
- @return: An iterator object providing access to all network addresses
- within this range.
- """
- start_addr = IP(self.first, self.addr_type)
- end_addr = IP(self.last, self.addr_type)
- return nrange(start_addr, end_addr, fmt=self.fmt)
-
- def __contains__(self, addr):
- """
- @param addr: and IP/IPRange class/subclass instance or IP string value
- to be compared.
-
- @return: C{True} if given address or range falls within this range,
- C{False} otherwise.
- """
- if isinstance(addr, (str, unicode)):
- # string address or address range.
- c_addr = IP(addr)
- if c_addr.addr_type == self.addr_type:
- if self.first <= int(c_addr) <= self.last:
- return True
- elif isinstance(addr, IP):
- # Single value check.
- if self.first <= int(addr) <= self.last:
- return True
- elif issubclass(addr.__class__, IPRange):
- # Range value check.
- if addr.first >= self.first and addr.last <= self.last:
- return True
- else:
- raise TypeError('%r is an unsupported type or class!' % addr)
-
- return False
-
- def __eq__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{True} if the boundaries of this range are the same as
- other, C{False} otherwise.
- """
- try:
- return (self.addr_type, self.first, self.last) == \
- (other.addr_type, other.first, other.last)
- except AttributeError:
- return False
-
- def __ne__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{False} if the boundaries of this range are the same as
- other, C{True} otherwise.
- """
- try:
- return (self.addr_type, self.first, self.last) != \
- (other.addr_type, other.first, other.last)
- except AttributeError:
- return True
-
- def __lt__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{True} if the boundaries of this range are less than other,
- C{False} otherwise.
- """
- try:
- # A sort key is essentially a CIDR prefixlen value.
- # Required as IPRange (and subclasses other than CIDR) do not
- # calculate it.
- s_sortkey = self.strategy.width - num_bits(self.size())
- o_sortkey = other.strategy.width - num_bits(other.size())
-
- return (self.addr_type, self.first, s_sortkey) < \
- (other.addr_type, other.first, o_sortkey)
- except AttributeError:
- return False
-
- def __le__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{True} if the boundaries of this range are less or equal to
- other, C{False} otherwise.
- """
- try:
- # A sort key is essentially a CIDR prefixlen value.
- # Required as IPRange (and subclasses other than CIDR) do not
- # calculate it.
- s_sortkey = self.strategy.width - num_bits(self.size())
- o_sortkey = other.strategy.width - num_bits(other.size())
-
- return (self.addr_type, self.first, s_sortkey) <= \
- (other.addr_type, other.first, o_sortkey)
- except AttributeError:
- return False
-
- def __gt__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{True} if the boundaries of this range are greater than
- other, C{False} otherwise.
- """
- try:
- # A sort key is essentially a CIDR prefixlen value.
- # Required as IPRange (and subclasses other than CIDR) do not
- # calculate it.
- s_sortkey = self.strategy.width - num_bits(self.size())
- o_sortkey = other.strategy.width - num_bits(other.size())
-
- return (self.addr_type, self.first, s_sortkey) > \
- (other.addr_type, other.first, o_sortkey)
- except AttributeError:
- return False
-
- def __ge__(self, other):
- """
- @param other: an address object of the same address type as C{self}.
-
- @return: C{True} if the boundaries of this range are greater or equal
- to other, C{False} otherwise.
- """
- try:
- # A sort key is essentially a CIDR prefixlen value.
- # Required as IPRange (and subclasses other than CIDR) do not
- # calculate it.
- s_sortkey = self.strategy.width - num_bits(self.size())
- o_sortkey = other.strategy.width - num_bits(other.size())
-
- return (self.addr_type, self.first, s_sortkey) >= \
- (other.addr_type, other.first, o_sortkey)
- except AttributeError:
- return False
-
- def __iadd__(self, i):
- """
- Increments start and end addresses of this range by the current size.
-
- Raises IndexError if the result exceeds address range maximum.
- """
- try:
- new_first = self.first + (self.size() * i)
- new_last = self.last + (self.size() * i)
- except TypeError:
- raise TypeError('Increment value must be an integer!')
-
- if new_last > self.strategy.max_int:
- raise IndexError('Invalid increment is outside address boundary!')
-
- self.first = new_first
- self.last = new_last
-
- return self
-
- def __isub__(self, i):
- """
- Decrements start and end addresses of this range by the current size.
-
- Raises IndexError if the result is less than zero.
- """
- try:
- new_first = self.first - (self.size() * i)
- new_last = self.last - (self.size() * i)
- except TypeError:
- raise TypeError('Decrement value must be an integer!')
-
- if new_last < 0:
- raise IndexError('Invalid decrement is outside address boundary!')
-
- self.first = new_first
- self.last = new_last
-
- return self
-
- def iprange(self):
- """
- @return: A valid L{IPRange} object for this address range.
- """
- #TODO: this can be optimised.
- ip_range = IPRange(self.strategy.int_to_str(self.first),
- self.strategy.int_to_str(self.last))
- if self.fmt == str:
- return str(ip_range)
- return ip_range
-
- def cidrs(self):
- """
- @return: A list of one or more L{CIDR} objects covering this address
- range. B{Please Note:} a list is returned even if this range maps
- to a single CIDR because arbitrary ranges may not be aligned with
- base 2 subnet sizes and will therefore return multiple CIDRs.
- """
- # This can probably be tidied up a bit but I'm really proud of this
- # method. It is one seriously sweet piece of code!!!
- cidr_list = []
-
- # Get spanning CIDR covering both addresses.
- start = IP(self.first, self.addr_type)
- end = IP(self.last, self.addr_type)
-
- cidr_span = CIDR.span_addrs([start, end])
-
- if cidr_span.first == self.first and cidr_span.last == self.last:
- # Spanning CIDR matches start and end exactly.
- cidr_list = [cidr_span]
- elif cidr_span.last == self.last:
- # Spanning CIDR matches end exactly.
- ip = IP(start)
- first_int_val = int(ip)
- ip -= 1
- cidr_remainder = cidr_span - ip
-
- first_found = False
- for cidr in cidr_remainder:
- if cidr.first == first_int_val:
- first_found = True
- if first_found:
- cidr_list.append(cidr)
- elif cidr_span.first == self.first:
- # Spanning CIDR matches start exactly.
- ip = IP(end)
- last_int_val = int(ip)
- ip += 1
- cidr_remainder = cidr_span - ip
-
- last_found = False
- for cidr in cidr_remainder:
- cidr_list.append(cidr)
- if cidr.last == last_int_val:
- break
- elif cidr_span.first <= self.first and cidr_span.last >= self.last:
- # Spanning CIDR overlaps start and end.
- ip = IP(start)
- first_int_val = int(ip)
- ip -= 1
- cidr_remainder = cidr_span - ip
-
- # Fix start.
- first_found = False
- for cidr in cidr_remainder:
- if cidr.first == first_int_val:
- first_found = True
- if first_found:
- cidr_list.append(cidr)
-
- # Fix end.
- ip = IP(end)
- last_int_val = int(ip)
- ip += 1
- cidr_remainder = cidr_list.pop() - ip
-
- last_found = False
- for cidr in cidr_remainder:
- cidr_list.append(cidr)
- if cidr.last == last_int_val:
- break
-
- # Return address list in requested format.
- if self.fmt in (str, unicode):
- cidr_list = [self.fmt(c) for c in cidr_list]
-
- return cidr_list
-
- def ipglob(self):
- """
- @return: A L{IPGlob} object equivalent to this CIDR.
- - If CIDR was initialised with C{fmt=str}, a ipglob string
- is returned, in all other cases a L{IPGlob} object is
- returned.
- - Only supports IPv4 CIDR addresses.
- """
- t1 = self.strategy.int_to_words(self.first)
- t2 = self.strategy.int_to_words(self.last)
-
- if self.addr_type != AT_INET:
- raise AddrConversionError('ipglobs only suitable for IPv4 ' \
- 'ranges!')
-
- tokens = []
-
- seen_hyphen = False
- seen_asterisk = False
-
- for i in range(4):
- if t1[i] == t2[i]:
- # A normal octet.
- tokens.append(str(t1[i]))
- elif (t1[i] == 0) and (t2[i] == 255):
- # An asterisk octet.
- tokens.append('*')
- seen_asterisk = True
- else:
- # Create a hyphenated octet - only one allowed per ipglob.
- if not seen_asterisk:
- if not seen_hyphen:
- tokens.append('%s-%s' % (t1[i], t2[i]))
- seen_hyphen = True
- else:
- raise SyntaxError('only one hyphenated octet per ' \
- 'ipglob permitted!')
- else:
- raise SyntaxError("* chars aren't permitted before ' \
- 'hyphenated octets!")
-
- ipglob = '.'.join(tokens)
-
- if self.fmt == str:
- return ipglob
-
- return IPGlob(ipglob)
-
- def issubnet(self, other):
- """
- @return: True if other's boundary is equal to or within this range.
- False otherwise.
- """
- if isinstance(other, (str, unicode)):
- other = CIDR(other)
-
- if not hasattr(other, 'addr_type'):
- raise TypeError('%r is an unsupported argument type!' % other)
-
- if self.addr_type != other.addr_type:
- raise TypeError('Ranges must be the same address type!')
-
- return self.first >= other.first and self.last <= other.last
-
- def issupernet(self, other):
- """
- @return: True if other's boundary is equal to or contains this range.
- False otherwise.
- """
- if isinstance(other, (str, unicode)):
- other = CIDR(other)
-
- if not hasattr(other, 'addr_type'):
- raise TypeError('%r is an unsupported argument type!' % other)
-
- if self.addr_type != other.addr_type:
- raise TypeError('Ranges must be the same address type!')
-
- return self.first <= other.first and self.last >= other.last
-
- def adjacent(self, other):
- """
- @return: True if other's boundary touches the boundary of this
- address range, False otherwise.
- """
- if isinstance(other, (str, unicode)):
- other = CIDR(other)
-
- if not hasattr(other, 'addr_type'):
- raise TypeError('%r is an unsupported argument type!' % other)
-
- if self.addr_type != other.addr_type:
- raise TypeError('addresses must be of the same type!')
-
- if isinstance(other, IPRange):
- # Left hand side of this address range.
- if self.first == (other.last + 1):
- return True
-
- # Right hand side of this address range.
- if self.last == (other.first - 1):
- return True
- elif isinstance(other, IP):
- # Left hand side of this address range.
- if self.first == (other.value + 1):
- return True
-
- # Right hand side of this address range.
- if self.last == (other.value - 1):
- return True
- else:
- raise TypeError('unexpected error for argument: %r!')
-
- return False
-
- def overlaps(self, other):
- """
- @return: True if other's boundary crosses the boundary of this address
- range, False otherwise.
- """
- if isinstance(other, (str, unicode)):
- other = CIDR(other)
-
- if not hasattr(other, 'addr_type'):
- raise TypeError('%r is an unsupported argument type!' % other)
-
- if self.addr_type != other.addr_type:
- raise TypeError('Ranges must be the same address type!')
-
- # Left hand side of this address range.
- if self.first <= other.last <= self.last:
- return True
-
- # Right hand side of this address range.
- if self.first <= other.first <= self.last:
- return True
-
- return False
-
- def __str__(self):
- return "%s-%s" % (self.strategy.int_to_str(self.first),
- self.strategy.int_to_str(self.last))
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object."""
- return "%s(%r, %r)" % (self.__class__.__name__,
- self.strategy.int_to_str(self.first),
- self.strategy.int_to_str(self.last))
-
-#-----------------------------------------------------------------------------
-def cidr_to_bits(cidr):
- """
- @param cidr: a CIDR object or CIDR string value (acceptable by CIDR class
- constructor).
-
- @return: a tuple containing CIDR in binary string format and addr_type.
- """
- if not hasattr(cidr, 'network'):
- cidr = CIDR(cidr, strict=False)
-
- bits = cidr.network.bits(word_sep='')
- return (bits[0:cidr.prefixlen], cidr.addr_type)
-
-#-----------------------------------------------------------------------------
-def bits_to_cidr(bits, addr_type=AT_UNSPEC, fmt=None):
- """
- @param bits: a CIDR in binary string format.
-
- @param addr_type: (optional) CIDR address type (IP version).
- (Default: AT_UNSPEC - auto-select) If not specified AT_INET (IPv4) is
- assumed if length of binary string is <= /32. If binary string
- is > /32 and <= /128 AT_INET6 (IPv6) is assumed. Useful when you have
- IPv6 addresses with a prefixlen of /32 or less.
-
- @param fmt: (optional) callable invoked on return CIDR.
- (Default: None - CIDR object). Also accepts str() and unicode().
-
- @return: a CIDR object or string (determined by fmt).
- """
- if _re.match('^[01]+$', bits) is None:
- raise ValueError('%r is an invalid bit string!' % bits)
-
- num_bits = len(bits)
- strategy = None
- if addr_type == AT_UNSPEC:
- if 0 <= num_bits <= 32:
- strategy = ST_IPV4
- elif 33 < num_bits <= 128:
- strategy = ST_IPV6
- else:
- raise ValueError('Invalid number of bits: %s!' % bits)
- elif addr_type == AT_INET:
- strategy = ST_IPV4
- elif addr_type == AT_INET6:
- strategy = ST_IPV6
- else:
- raise ValueError('strategy auto-select failure for %r!' % bits)
-
- if bits == '':
- return CIDR('%s/0' % strategy.int_to_str(0))
-
- cidr = None
- bits = bits + '0' * (strategy.width - num_bits)
- ip = strategy.int_to_str(strategy.bits_to_int(bits))
- cidr = CIDR('%s/%d' % (ip, num_bits))
-
- if fmt is not None:
- return fmt(cidr)
-
- return cidr
-
-#-----------------------------------------------------------------------------
-class CIDR(IPRange):
- """
- Represents blocks of IPv4 and IPv6 addresses using CIDR (Classless
- Inter-Domain Routing) notation.
-
- CIDR is a method of categorising contiguous blocks of both IPv4 and IPv6
- addresses. It is very scalable allowing for the optimal usage of the IP
- address space. It permits the aggregation of networks via route
- summarisation (supernetting) where adjacent routes can be combined into a
- single route easily. This greatly assists in the reduction of routing
- table sizes and improves network router efficiency.
-
- CIDR blocks are represented by a base network address and a prefix
- indicating the size of the (variable length) subnet mask. These are
- separated by a single '/' character. Subnet sizes increase in powers of
- base 2 aligning to bit boundaries.
-
- It is technically invalid to have non-zero bits in a CIDR address to the
- right of the implied netmask. For user convenience this is however
- configurable and can be disabled using a constructor argument.
-
- The constructor accepts CIDRs expressed in one of 4 different ways :-
-
- A) Standard CIDR format :-
-
- IPv4::
-
- x.x.x.x/y -> 192.0.2.0/24
-
- where the x's represent the network address and y is the netmask
- prefix between 0 and 32.
-
- IPv6::
-
- x::/y -> fe80::/10
-
- where the x's represent the network address and y is the netmask
- prefix between 0 and 128.
-
- B) Abbreviated CIDR format (IPv4 only)::
-
- x -> 192
- x/y -> 10/8
- x.x/y -> 192.168/16
- x.x.x/y -> 192.168.0/24
-
- which are equivalent to::
-
- x.0.0.0/y -> 192.0.0.0/24
- x.0.0.0/y -> 10.0.0.0/8
- x.x.0.0/y -> 192.168.0.0/16
- x.x.x.0/y -> 192.168.0.0/24
-
- - The trailing zeros are implicit.
- - Old classful IP address rules apply if y is omitted.
-
- C) Hybrid CIDR format (prefix replaced by netmask) :-
-
- IPv4::
-
- x.x.x.x/y.y.y.y -> 192.0.2.0/255.255.255.0
-
- IPv6::
-
- x::/y:: -> fe80::/ffc0::
-
- where the y's represent a valid netmask.
-
- D) ACL-style CIDR format (prefix is replaced by a hostmask) :-
-
- Akin to Cisco's ACL (Access Control List) bitmasking (reverse
- netmasks).
-
- IPv4::
-
- x.x.x.x/y.y.y.y -> 192.0.2.0/0.0.0.255
-
- IPv6::
-
- x::/y:: -> fe80::/3f:ffff:ffff:ffff:ffff:ffff:ffff:ffff
-
- where the y's represent a valid hostmask.
-
- Reference: RFCs 1338 and 4632.
- """
- STRATEGIES = (ST_IPV4, ST_IPV6)
- ADDR_TYPES = (AT_UNSPEC, AT_INET, AT_INET6)
-
- # Descriptor registrations.
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
- prefixlen = PrefixLenDescriptor('CIDR')
- fmt = FormatDescriptor(IP)
-
- @staticmethod
- def abbrev_to_verbose(abbrev_cidr):
- """
- A static method that converts abbreviated IPv4 CIDRs to their more
- verbose equivalent.
-
- @param abbrev_cidr: an abbreviated CIDR.
-
- Uses the old-style classful IP address rules to decide on a default
- subnet prefix if one is not explicitly provided.
-
- Only supports IPv4 addresses.
-
- Examples ::
-
- 10 - 10.0.0.0/8
- 10/16 - 10.0.0.0/16
- 128 - 128.0.0.0/16
- 128/8 - 128.0.0.0/8
- 192.168 - 192.168.0.0/16
-
- @return: A verbose CIDR from an abbreviated CIDR or old-style classful
- network address, C{None} if format provided was not recognised or
- supported.
- """
- # Internal function that returns a prefix value based on the old IPv4
- # classful network scheme that has been superseded (almost) by CIDR.
- def classful_prefix(octet):
- octet = int(octet)
- if not 0 <= octet <= 255:
- raise IndexError('Invalid octet: %r!' % octet)
- if 0 <= octet <= 127: # Legacy class 'A' classification.
- return 8
- elif 128 <= octet <= 191: # Legacy class 'B' classification.
- return 16
- elif 192 <= octet <= 223: # Legacy class 'C' classification.
- return 24
- elif octet == 224: # Multicast address range.
- return 4
- elif 225 <= octet <= 239: # Reserved.
- return 8
- return 32 # Default.
-
- start = ''
- tokens = []
- prefix = None
-
- #FIXME: # Check for IPv4 mapped IPv6 addresses.
- if isinstance(abbrev_cidr, (str, unicode)):
- ################
- # Don't support IPv6 for now...
- if ':' in abbrev_cidr:
- return None
- ################
- #FIXME: if abbrev_cidr.startswith('::ffff:'):
- #FIXME: abbrev_cidr = abbrev_cidr.replace('::ffff:', '')
- #FIXME: start = '::ffff:'
- #FIXME: if '/' not in abbrev_cidr:
- #FIXME: prefix = 128
- #FIXME: elif abbrev_cidr.startswith('::'):
- #FIXME: abbrev_cidr = abbrev_cidr.replace('::', '')
- #FIXME: start = '::'
- #FIXME: if '/' not in abbrev_cidr:
- #FIXME: prefix = 128
- ################
-
- try:
- # Single octet partial integer or string address.
- i = int(abbrev_cidr)
- tokens = [str(i), '0', '0', '0']
- return "%s%s/%s" % (start, '.'.join(tokens), classful_prefix(i))
-
- except ValueError:
- # Multi octet partial string address with optional prefix.
- part_addr = abbrev_cidr
- tokens = []
-
- if part_addr == '':
- # Not a recognisable format.
- return None
-
- if '/' in part_addr:
- (part_addr, prefix) = part_addr.split('/', 1)
-
- # Check prefix for validity.
- if prefix is not None:
- try:
- if not 0 <= int(prefix) <= 32:
- return None
- except ValueError:
- return None
-
- if '.' in part_addr:
- tokens = part_addr.split('.')
- else:
- tokens = [part_addr]
-
- if 1 <= len(tokens) < 4:
- for i in range(4 - len(tokens)):
- tokens.append('0')
- elif len(tokens) == 4:
- if prefix is None:
- # Non-partial addresses without a prefix.
- prefix = 32
- else:
- # Not a recognisable format.
- return None
-
- if prefix is None:
- try:
- prefix = classful_prefix(tokens[0])
- except ValueError:
- return None
-
- return "%s%s/%s" % (start, '.'.join(tokens), prefix)
-
- except TypeError:
- pass
- except IndexError:
- pass
-
- # Not a recognisable format.
- return None
-
- @staticmethod
- def span_addrs(addrs, fmt=None):
- """
- Static method that accepts a sequence of IP addresses and/or CIDRs,
- IPGlobs and IPRanges returning a single CIDR that is large enough
- to span the lowest and highest IP addresses in the sequence (with
- a possible overlap on either end).
-
- @param addrs: a sequence of IP, CIDR, IPGlob or IPRange objects
- and/or their string representations.
-
- @param fmt: (optional) callable used on return values.
- (Default: None - L{CIDR} object) Also accepts str() and unicode().
-
- @return: a single CIDR object spanning all addresses.
- """
- if not isinstance(addrs, (list, tuple)): # Required - DO NOT CHANGE!
- raise TypeError('expected address sequence is not iterable!')
-
- if not len(addrs) > 1:
- raise ValueError('sequence must contain 2 or more elements!')
-
- if fmt not in (None, str, unicode):
- raise ValueError('unsupported formatter %r!' % fmt)
-
- # List is required.
- if not isinstance(addrs, list):
- addrs = list(addrs)
-
- # Detect type of string address or address range and create the
- # equivalent instance.
- for (i, addr) in enumerate(addrs):
- if isinstance(addr, (str, unicode)):
- try:
- obj = IP(addr)
- addrs[i] = obj
- continue
- except:
- pass
- try:
- obj = CIDR(addr)
- addrs[i] = obj
- continue
- except:
- pass
- try:
- obj = IPGlob(addr)
- addrs[i] = obj
- continue
- except:
- pass
-
- # Find lowest and highest IP objects in address list.
- addrs.sort()
- lowest = addrs[0]
- highest = addrs[-1]
-
- if isinstance(lowest, IPRange):
- # Create new IP as user may be returning address strings.
- lowest = IP(lowest.first, lowest.addr_type)
-
- if isinstance(highest, IPRange):
- # Create new IP as user may be returning address strings.
- highest = IP(highest.last, highest.addr_type)
-
- if lowest.addr_type != highest.addr_type:
- raise TypeError('address types are not the same!')
-
- cidr = highest.cidr()
-
- while cidr.prefixlen > 0:
- if highest in cidr and lowest not in cidr:
- cidr.prefixlen -= 1
- else:
- break
-
- # Return address in string format.
- if fmt is not None:
- return fmt(cidr)
-
- return cidr
-
- @staticmethod
- def span_size(base_ip, num_hosts, fmt=None):
- """
- Static method that calculates the optimum CIDR when provided a base
- network address and the number of expected hosts to be found in the
- network segment. Overlaps do occur when the number of hosts added to
- base address do not fall on bit boundaries.
-
- @param base_ip: An IP address (not necessarily the base network
- address).
-
- @param num_hosts: number of hosts to be included in the same network
- segment as base IP.
-
- @param fmt: callable used on return values.
- (Default: None - L{CIDR} objects). str() and unicode() supported.
-
- @return: A CIDR object.
- """
- ip = IP(base_ip)
-
- prefixlen = ip.strategy.width - num_bits(num_hosts-1)
-
- cidr = CIDR('%s/%d' % (ip, prefixlen), strict=False)
-
- if fmt is None:
- return cidr
- else:
- return fmt(cidr)
-
- @staticmethod
- def summarize(cidrs, fmt=None):
- """
- Static method that accepts a sequence of IP addresses and/or CIDRs
- returning a summarized sequence of merged CIDRs where possible. This
- method doesn't create any CIDR that are inclusive of any addresses
- other than those found in the original sequence provided.
-
- @param addrs: a list or tuple of IP and/or CIDR objects.
-
- @param fmt: callable used on return values.
- (Default: None - L{CIDR} objects). str() and unicode() supported.
-
- @return: a possibly smaller list of CIDRs covering sequence passed in.
- """
- if not hasattr(cidrs, '__iter__'):
- raise ValueError('A sequence or iterable is expected!')
-
- # Start off using set as we'll remove any duplicates at the start.
- ipv4_bit_cidrs = set()
- ipv6_bit_cidrs = set()
-
- # Convert CIDRs into bit strings separating IPv4 from IPv6
- # (required).
- for cidr in cidrs:
- (bits, addr_type) = cidr_to_bits(cidr)
- if addr_type == AT_INET:
- ipv4_bit_cidrs.add(bits)
- elif addr_type == AT_INET6:
- ipv6_bit_cidrs.add(bits)
- else:
- raise ValueError('Unknown address type found!')
-
- # Merge binary CIDRs into their smallest equivalents.
- def _reduce_bit_cidrs(cidrs):
- new_cidrs = []
-
- cidrs.sort()
-
- # Multiple passes are required to obtain precise results.
- while 1:
- finished = True
- while len(cidrs) > 0:
- if len(new_cidrs) == 0:
- new_cidrs.append(cidrs.pop(0))
- if len(cidrs) == 0:
- break
- # lhs and rhs are same size and adjacent.
- (new_cidr, subs) = _re.subn(r'^([01]+)0 \1[1]$',
- r'\1', '%s %s' % (new_cidrs[-1], cidrs[0]))
- if subs:
- # merge lhs with rhs.
- new_cidrs[-1] = new_cidr
- cidrs.pop(0)
- finished = False
- else:
- # lhs contains rhs.
- (new_cidr, subs) = _re.subn(r'^([01]+) \1[10]+$',
- r'\1', '%s %s' % (new_cidrs[-1], cidrs[0]))
- if subs:
- # keep lhs, discard rhs.
- new_cidrs[-1] = new_cidr
- cidrs.pop(0)
- finished = False
- else:
- # no matches - accept rhs.
- new_cidrs.append(cidrs.pop(0))
- if finished:
- break
- else:
- # still seeing matches, reset.
- cidrs = new_cidrs
- new_cidrs = []
-
- return new_cidrs
-
- new_cidrs = []
-
- # Reduce and format IPv4 CIDRs.
- for bit_cidr in _reduce_bit_cidrs(list(ipv4_bit_cidrs)):
- new_cidrs.append(bits_to_cidr(bit_cidr, fmt=fmt))
-
- # Reduce and format IPv6 CIDRs.
- for bit_cidr in _reduce_bit_cidrs(list(ipv6_bit_cidrs)):
- new_cidrs.append(bits_to_cidr(bit_cidr, fmt=fmt))
-
- return new_cidrs
-
- def __init__(self, cidr, fmt=IP, strict=True, expand_abbrev=True):
- """
- Constructor.
-
- @param cidr: a valid IPv4/IPv6 CIDR address or abbreviated IPv4
- network address.
-
- @param fmt: (optional) callable used on return values.
- Default: L{IP} class. See L{nrange()} documentations for
- more details on the various options.
-
- @param strict: (optional) If True and non-zero bits are found to the
- right of the subnet mask/prefix a ValueError is raised. If False,
- CIDR returned has these bits automatically truncated.
- (default: True)
-
- @param expand_abbrev: (optional) If True, enables the abbreviated CIDR
- expansion routine. If False, abbreviated CIDRs will be considered
- invalid addresses, raising an AddrFormatError exception.
- (default: True)
- """
- cidr_arg = cidr # Keep a copy of original argument.
-
- if expand_abbrev:
- # Replace an abbreviation with a verbose CIDR.
- verbose_cidr = CIDR.abbrev_to_verbose(cidr)
- if verbose_cidr is not None:
- cidr = verbose_cidr
-
- if not isinstance(cidr, (str, unicode)):
- raise TypeError('%r is not a valid CIDR!' % cidr)
-
- # Check for prefix in address and extract it.
- try:
- (network, mask) = cidr.split('/', 1)
- except ValueError:
- network = cidr
- mask = None
-
- #FIXME: Are IP objects for first and last really necessary?
- #FIXME: Should surely just be integer values.
- first = IP(network)
- self.strategy = first.strategy
-
- if mask is None:
- # If no mask is specified, assume maximum CIDR prefix.
- self.__dict__['prefixlen'] = first.strategy.width
- else:
- self.prefixlen = mask
-
- strategy = first.strategy
- addr_type = strategy.addr_type
-
- hostmask = (1 << (strategy.width - self.prefixlen)) - 1
-
- last = IP(first.value | hostmask, addr_type)
-
- if strict:
- # Strict CIDRs enabled.
- netmask = strategy.max_int ^ hostmask
- host = (first.value | netmask) - netmask
- if host != 0:
- raise ValueError('%s contains non-zero bits right of the ' \
- '%d-bit mask! Did you mean %s instead?' \
- % (first, self.prefixlen,
- strategy.int_to_str(int(last) - hostmask)))
- else:
- # Strict CIDRs disabled.
- first.value = strategy.int_to_str(int(last) - hostmask)
-
- super(CIDR, self).__init__(first, last, fmt)
-
- def __sub__(self, other):
- """
- Subtract another CIDR from this one.
-
- @param other: a CIDR object that is greater than or equal to C{self}.
-
- @return: A list of CIDR objects than remain after subtracting C{other}
- from C{self}.
- """
- cidrs = []
-
- if self.prefixlen == self.strategy.width:
- # Fail fast. Nothing to do in this case.
- return cidrs
-
- new_prefixlen = self.prefixlen + 1
- i_lower = self.first
- i_upper = self.first + (2 ** (self.strategy.width - new_prefixlen))
-
- lower = CIDR('%s/%d' % (self.strategy.int_to_str(i_lower),
- new_prefixlen))
- upper = CIDR('%s/%d' % (self.strategy.int_to_str(i_upper),
- new_prefixlen))
-
- while other.prefixlen >= new_prefixlen:
- if other in lower:
- matched = i_lower
- unmatched = i_upper
- elif other in upper:
- matched = i_upper
- unmatched = i_lower
-
- cidr = CIDR('%s/%d' % (self.strategy.int_to_str(unmatched),
- new_prefixlen))
-
- cidrs.append(cidr)
-
- new_prefixlen += 1
-
- if new_prefixlen > self.strategy.width:
- break
-
- i_lower = matched
- i_upper = matched + (2 ** (self.strategy.width - new_prefixlen))
-
- lower = CIDR('%s/%d' % (self.strategy.int_to_str(i_lower),
- new_prefixlen))
- upper = CIDR('%s/%d' % (self.strategy.int_to_str(i_upper),
- new_prefixlen))
-
- cidrs.sort()
-
- # Return string based CIDR address values at user's request.
- if self.fmt is str:
- return [str(cidr) for cidr in cidrs]
-
- return cidrs
-
- def __add__(self, other):
- """
- Add another CIDR to this one returning a CIDR supernet that will
- contain both in the smallest possible sized range.
-
- @param other: a CIDR object.
-
- @return: A new (potentially larger) CIDR object.
- """
- cidr = CIDR.span_addrs([self, other])
- if self.fmt is str:
- return str(cidr)
- return cidr
-
- @property
- def network(self):
- """@return: The network (first) address in this CIDR block."""
- return self[0]
-
- @property
- def broadcast(self):
- """
- B{Please Note:} although IPv6 doesn't actually recognise the concept of
- broadcast addresses per se (as in IPv4), so many other libraries do
- this that it isn't worth trying to resist the trend just for the sake
- of making a theoretical point.
-
- @return: The broadcast (last) address in this CIDR block.
- """
- return self[-1]
-
- @property
- def netmask(self):
- """@return: The subnet mask address of this CIDR block."""
- hostmask = (1 << (self.strategy.width - self.prefixlen)) - 1
- netmask = self.strategy.max_int ^ hostmask
- return self.format(netmask)
-
- @property
- def hostmask(self):
- """@return: The host mask address of this CIDR block."""
- hostmask = (1 << (self.strategy.width - self.prefixlen)) - 1
- return self.format(hostmask)
-
- def previous(self, step=1):
- """
- @param step: the number of CIDRs between this CIDR and the expected
- one. Default: 1 - the preceding CIDR.
-
- @return: The immediate (adjacent) predecessor of this CIDR.
- """
- cidr_copy = CIDR('%s/%d' % (self.strategy.int_to_str(self.first),
- self.prefixlen))
- cidr_copy -= step
- # Respect formatting.
- if self.fmt in (str, unicode):
- return self.fmt(cidr_copy)
- return cidr_copy
-
- def next(self, step=1):
- """
- @param step: the number of CIDRs between this CIDR and the expected
- one. Default: 1 - the succeeding CIDR.
-
- @return: The immediate (adjacent) successor of this CIDR.
- """
- cidr_copy = CIDR('%s/%d' % (self.strategy.int_to_str(self.first),
- self.prefixlen))
- cidr_copy += step
- # Respect formatting.
- if self.fmt in (str, unicode):
- return self.fmt(cidr_copy)
- return cidr_copy
-
- def iter_host_addrs(self):
- """
- @return: An iterator object providing access to all valid host IP
- addresses within the specified CIDR block.
- - with IPv4 the network and broadcast addresses are always
- excluded. Any smaller than 4 hosts yields an emtpy list.
- - with IPv6 only the unspecified address '::' is excluded from
- the yielded list.
- """
- if self.addr_type == AT_INET:
- # IPv4
- if self.size() >= 4:
- return nrange( IP(self.first+1, self.addr_type),
- IP(self.last-1, self.addr_type), fmt=self.fmt)
- else:
- return iter([])
- elif self.addr_type == AT_INET6:
- # IPv6
- if self.first == 0:
- # Don't return '::'.
- return nrange(IP(self.first+1, self.addr_type),
- IP(self.last, self.addr_type), fmt=self.fmt)
- else:
- return iter(self)
-
- def supernet(self, prefixlen=0, fmt=None):
- """
- Provides a list of supernet CIDRs for the current CIDR between the size
- of the current prefix and (if specified) the end CIDR prefix.
-
- @param prefixlen: (optional) a CIDR prefix for the maximum supernet.
- Default: 0 - returns all possible supernets.
-
- @param fmt: callable used on return values.
- Default: None - L{CIDR} objects. str() and unicode() supported.
-
- @return: an tuple containing CIDR supernets that contain this one.
- """
- if not 0 <= prefixlen <= self.strategy.width:
- raise ValueError('prefixlen %r invalid for IP version!' \
- % prefixlen)
-
- # Use a copy of self as we'll be editing it.
- cidr = self.cidrs()[0]
- cidr.fmt = fmt
-
- supernets = []
- while cidr.prefixlen > prefixlen:
- cidr.prefixlen -= 1
- supernets.append(cidr.cidrs()[0])
-
- return list(reversed(supernets))
-
- def subnet(self, prefixlen, count=None, fmt=None):
- """
- A generator that returns CIDR subnets based on the current network
- base address and provided CIDR prefix and count.
-
- @param prefixlen: a CIDR prefix.
-
- @param count: number of consecutive CIDRs to be returned.
-
- @param fmt: callable used on return values.
- Default: None - L{CIDR} objects. str() and unicode() supported.
-
- @return: an iterator (as lists could potentially be very large)
- containing CIDR subnets below this CIDR's base address.
- """
- if not 0 <= self.prefixlen <= self.strategy.width:
- raise ValueError('prefixlen %d out of bounds for address type!' \
- % prefixlen)
-
- if not self.prefixlen <= prefixlen:
- raise ValueError('prefixlen less than current CIDR prefixlen!')
-
- # Calculate number of subnets to be returned.
- width = self.strategy.width
- max_count = 2 ** (width - self.prefixlen) / 2 ** (width - prefixlen)
-
- if count is None:
- count = max_count
-
- if not 1 <= count <= max_count:
- raise ValueError('count not within current CIDR boundaries!')
-
- base_address = self.strategy.int_to_str(self.first)
-
- # Respect self.fmt value if one wasn't passed to the method.
- if fmt is None and self.fmt in (str, unicode):
- fmt = self.fmt
-
- if fmt is None:
- # Create new CIDR instances for each subnet returned.
- for i in xrange(count):
- cidr = CIDR('%s/%d' % (base_address, prefixlen))
- cidr.first += cidr.size() * i
- cidr.prefixlen = prefixlen
- yield cidr
- elif fmt in (str, unicode):
- # Keep the same CIDR and just modify it.
- for i in xrange(count):
- cidr = CIDR('%s/%d' % (base_address, prefixlen))
- cidr.first += cidr.size() * i
- cidr.prefixlen = prefixlen
- yield fmt(cidr)
- else:
- raise TypeError('unsupported fmt callable %r' % fmt)
-
- def cidrs(self):
- """
- @return: A list of a copy of this L{CIDR} object. This method is here
- mainly for compatibility with IPRange interface.
- """
- cidr_copy = CIDR('%s/%d' % (self.strategy.int_to_str(self.first),
- self.prefixlen))
-
- # Respect formatting.
- if self.fmt in (str, unicode):
- return [self.fmt(cidr_copy)]
-
- return [cidr_copy]
-
- def __str__(self):
- return "%s/%s" % (self.strategy.int_to_str(self.first), self.prefixlen)
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object."""
- return "%s('%s/%d')" % (self.__class__.__name__,
- self.strategy.int_to_str(self.first), self.prefixlen)
-
-#-----------------------------------------------------------------------------
-class IPGlob(IPRange):
- """
- Represents blocks of IPv4 addresses using a ipglob or glob style syntax.
-
- Individual octets can be represented using the following shortcuts :
-
- 1. C{*} - the asterisk octet (represents values 0 through 255)
- 2. C{'x-y'} - the hyphenated octet (represents values x through y)
-
- A few basic rules also apply :
-
- 1. x must always be greater than y, therefore :
-
- - x can only be 0 through 254
- - y can only be 1 through 255
-
- 2. only one hyphenated octet per ipglob is allowed
- 3. only asterisks are permitted after a hyphenated octet
-
- Example ipglobs ::
-
- '192.168.0.1' # a single address
- '192.168.0.0-31' # 32 addresses
- '192.168.0.*' # 256 addresses
- '192.168.0-1.*' # 512 addresses
- '192.168-169.*.*' # 131,072 addresses
- '*.*.*.*' # the whole IPv4 address space
-
- Aside
- =====
- I{IPGlob ranges are not directly equivalent to CIDR blocks as they
- can represent address ranges that do not fall on strict bit mask
- boundaries. They are very suitable in configuration files being more
- obvious and readable than their CIDR equivalents, especially for admins
- and users without much networking knowledge or experience.}
-
- I{All CIDR blocks can always be represented as ipglob ranges but the
- reverse is not true. IPGlobs are almost but not quite as flexible
- as IPRange objects.}
- """
- STRATEGIES = (ST_IPV4,)
- ADDR_TYPES = (AT_UNSPEC, AT_INET)
-
- # Descriptor registrations.
- strategy = StrategyDescriptor(STRATEGIES)
- addr_type = AddrTypeDescriptor(ADDR_TYPES)
- fmt = FormatDescriptor(IP)
-
- def is_valid(ipglob):
- """
- A static method that validates ipglob address ranges.
-
- @param ipglob: an IPv4 ipglob address.
-
- @return: True if ipglob address is valid, False otherwise.
- """
- #TODO: Add support for abbreviated ipglobs
- #TODO: e.g. 192.168.*.* == 192.168.*
- #TODO: *.*.*.* == *
- #TODO: Add strict flag to enable verbose ipglob checking.
- seen_hyphen = False
- seen_asterisk = False
- try:
- octets = ipglob.split('.')
- if len(octets) != 4:
- return False
- for o in octets:
- if '-' in o:
- if seen_hyphen:
- return False
- seen_hyphen = True
- if seen_asterisk:
- # Asterisks cannot precede hyphenated octets.
- return False
- (o1, o2) = [int(i) for i in o.split('-')]
- if o1 >= o2:
- return False
- if not 0 <= o1 <= 254:
- return False
- if not 1 <= o2 <= 255:
- return False
- elif o == '*':
- seen_asterisk = True
- else:
- if seen_hyphen is True:
- return False
- if seen_asterisk is True:
- return False
- if not 0 <= int(o) <= 255:
- return False
- except AttributeError:
- return False
- except ValueError:
- return False
- return True
-
- is_valid = staticmethod(is_valid)
-
- def __init__(self, ipglob, fmt=IP):
- """
- Constructor.
-
- @param ipglob: a valid IPv4 ipglob address
-
- @param fmt: (optional) callable used on return values.
- Default: L{IP} objects. See L{nrange()} documentations for
- more details on the various options..
- """
- if not IPGlob.is_valid(ipglob):
- raise AddrFormatError('%r is not a recognised ipglob address!' \
- % ipglob)
- t1 = []
- t2 = []
-
- for octet in ipglob.split('.'):
- if '-' in octet:
- oct_tokens = octet.split('-')
- t1 += [oct_tokens[0]]
- t2 += [oct_tokens[1]]
- elif octet == '*':
- t1 += ['0']
- t2 += ['255']
- else:
- t1 += [octet]
- t2 += [octet]
-
- first = '.'.join(t1)
- last = '.'.join(t2)
- super(IPGlob, self).__init__(first, last, fmt=fmt)
-
- if self.addr_type != AT_INET:
- raise AddrFormatError('IPGlob syntax only supports IPv4!')
-
- def __add__(self, other):
- """
- Add another IPGlob, CIDR or IP to this IPGlob object.
-
- @param other: a IPGlob, CIDR or IP object that is either adjacent to
- or intersects with this address.
-
- @return: A new (most likely larger) IPGlob object. Raises an
- Exception if other is not adjacent or intersects with this
- IPGlob object.
- """
- raise NotImplementedError('TODO')
-
- def __sub__(self, other):
- """
- Subtract a IPGlob, CIDR or IP from this IPGlob object.
-
- @param other: a IPGlob, CIDR or IP object.
-
- @return: A list of either one or two IPGlob objects remaining after
- subtracting C{other} from C{self}.
- """
- raise NotImplementedError('TODO')
-
- def __str__(self):
- t1 = self.strategy.int_to_words(self.first)
- t2 = self.strategy.int_to_words(self.last)
-
- tokens = []
-
- seen_hyphen = False
- seen_asterisk = False
-
- for i in range(4):
- if t1[i] == t2[i]:
- # A normal octet.
- tokens.append(str(t1[i]))
- elif (t1[i] == 0) and (t2[i] == 255):
- # An asterisk octet.
- tokens.append('*')
- seen_asterisk = True
- else:
- # Create a hyphenated octet - only one allowed per ipglob.
- if not seen_asterisk:
- if not seen_hyphen:
- tokens.append('%s-%s' % (t1[i], t2[i]))
- seen_hyphen = True
- else:
- raise AddrFormatError('only one hyphenated octet ' \
- ' per ipglob allowed!')
- else:
- raise AddrFormatError('asterisks not permitted before ' \
- 'hyphenated octets!')
-
- return '.'.join(tokens)
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object."""
- return "%s(%r)" % (self.__class__.__name__, str(self))
-
-
-#-----------------------------------------------------------------------------
-class IPRangeSet(set):
- """
- B{*EXPERIMENTAL*} A customised Python set class that deals with collections
- of IPRange class and subclass instances.
- """
- def __init__(self, addrs):
- """
- Constructor.
-
- @param addrs: A sequence of IPRange class/subclass instances used to
- pre-populate the set. Individual CIDR objects can be added and
- removed after instantiation with the usual set methods, add() and
- remove().
- """
- for addr in addrs:
- if isinstance(addr, IP):
- self.add(addr.cidr())
- if isinstance(addr, str):
- try:
- self.add(CIDR(addr))
- except:
- pass
- try:
- ip = IP(addr)
- self.add(ip.cidr())
- except:
- pass
- try:
- ipglob = IPGlob(addr)
- try:
- self.add(ipglob.cidr())
- except:
- self.add(ipglob)
- except:
- pass
- else:
- self.add(addr)
-
- def __contains__(self, other):
- """
- @return: True if C{other} IP or IPRange class/subclass instance
- matches any of the members in this IPRangeSet, False otherwise.
- """
- for addr in self:
- if other in addr:
- return True
-
- def any_match(self, other):
- """
- @param other: An IP or IPRange class/subclass instance.
-
- @return: The first IP or IPRange class/subclass instance object that
- matches C{other} from any of the members in this IPRangeSet, None
- otherwise.
- """
- for addr in self:
- if other in addr:
- return addr
-
- def all_matches(self, other):
- """
- @param other: An IP or IPRange class/subclass instance.
-
- @return: All IP or IPRange class/subclass instances matching C{other}
- from this IPRangeSet, an empty list otherwise.
- """
- addrs = []
- for addr in self:
- if other in addr:
- addrs.append(addr)
- return addrs
-
- def min_match(self, other):
- """
- @param other: An IP or IPRange class/subclass instance.
-
- @return: The smallest IP or IPRange class/subclass instance matching
- C{other} from this IPRangeSet, None otherwise.
- """
- addrs = self.all_matches(other)
- addrs.sort()
- return addrs[0]
-
- def max_match(self, other):
- """
- @param other: An IP or IPRange class/subclass instance.
-
- @return: The largest IP or IPRange class/subclass instance matching
- C{other} from this IPRangeSet, None otherwise.
- """
- addrs = self.all_matches(other)
- addrs.sort()
- return addrs[-1]
-
- def __repr__(self):
- raise NotImplementedError('TODO')
-
- def __str__(self):
- raise NotImplementedError('TODO')
-
-#-----------------------------------------------------------------------------
-class CIDRGroup(object):
- """
- A collection of one of more CIDR subnets manipulated by a set of common
- operations.
-
- B{Please note}: this class does not preserve the original CIDRs and/or IP
- addresses passed to it and will actively attempt to merges and/or combines
- all inputs received into the smallest possible list of summarized subnets.
-
- Do not use this class if you expect to get back your original data intact!
- """
- def __init__(self, cidrs=None, fmt=None):
- """
- Constructor.
-
- @param cidrs: an initial list of CIDRs for this group.
-
- """
- self._cidrs = []
- self._dirty = False
- self.fmt = fmt
-
- if cidrs is not None:
- if hasattr(cidrs, '__iter__'):
- for cidr in cidrs:
- self.add(cidr)
- else:
- raise ValueError('%r is not a CIDR or IP address iterable!' \
- % cidrs)
-
- def compact(self):
- """
- Compact/summarize internal list of IP addresses and CIDRs.
-
- """
- if self._dirty:
- self._cidrs = CIDR.summarize(self._cidrs)
- self._dirty = False
-
- def add(self, cidr):
- """
- Adds a CIDR or IP address to this group.
-
- @param cidr: the CIDR/IP address to be added.
-
- """
- if hasattr(cidr, 'value'):
- # An IP object.
- cidr = cidr.cidr()
- elif not hasattr(cidr, 'first'):
- # Anything that isn't a CIDR object or IP object.
- cidr = CIDR(cidr, strict=False, expand_abbrev=False)
-
- self._cidrs.append(cidr)
- self._dirty = True
-
- def remove(self, cidr):
- """
- Remove a CIDR or IP address from this group.
-
- @param cidr: the CIDR/IP address to be removed.
-
- """
- if hasattr(cidr, 'value'):
- # An IP object.
- cidr = cidr.cidr()
- elif not hasattr(cidr, 'first'):
- # Anything that isn't a CIDR object or IP object.
- cidr = CIDR(cidr, strict=False, expand_abbrev=False)
-
- self.add(cidr)
- self.compact()
-
- remainder = None
- for i, c in enumerate(self._cidrs):
- if cidr in c:
- remainder = (c - cidr)
- break
-
- if remainder is not None:
- del self._cidrs[i]
- if len(remainder) != 0:
- self._cidrs.extend(remainder)
-
- def cidrs(self, fmt=None):
- """
- The list of cidrs comprising this group.
-
- @param fmt: (optional) callable used on return values.
- (Default: None - L{CIDR} objects) Also accepts str() and unicode().
-
- """
- self.compact()
-
- if fmt is None:
- return self._cidrs
- return [fmt(c) for c in self._cidrs]
-
- def __contains__(self, other):
- """
- Check membership of CIDR or IP address against this group.
-
- @param other: a CIDR or IP address in object or string format.
-
- """
- self.compact()
-
- if hasattr(other, 'value'):
- # An IP object.
- other = other.cidr()
- elif not hasattr(other, 'first'):
- # Anything that isn't a CIDR object or IP object.
- other = CIDR(other, strict=False, expand_abbrev=False)
-
- for cidr in self._cidrs:
- if other in cidr:
- return True
-
- def iter_ip_addrs(self, iterable=None, fmt=None):
- """
- Returns an iterator that flattens all CIDRs in this group into a
- single non repeating list of IP addresses.
-
- @param iterable: an IP address iterator (optional). Mainly used for
- the recursive calls that this method employs.
-
- @param fmt: (optional) callable used on return values.
- (Default: None - L{IP} objects) Also accepts str() and unicode().
-
- """
- self.compact()
-
- if iterable is None:
- iterable = self._cidrs
-
- if fmt is None:
- fmt = self.fmt
-
- for i in iterable:
- if not hasattr(i, 'value') and hasattr(i, '__iter__'):
- for j in self.iter_ip_addrs(i):
- if fmt is None:
- yield j
- else:
- yield fmt(j)
- else:
- if fmt is None:
- yield i
- else:
- yield fmt(i)
-
- __iter__ = iter_ip_addrs
-
- def __str__(self):
- tokens = []
- for cidr in self._cidrs:
- tokens.append('%s (%s -> %s, %d hosts)' \
- % (cidr, cidr.network, cidr.broadcast, cidr.size()))
- return "\n".join(tokens)
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object"""
- return "%s(%s)" % (self.__class__.__name__,
- ', '.join(['%r' % str(c) for c in self._cidrs]))
-
-#-----------------------------------------------------------------------------
-def flatten_ip_addrs(iterable):
- """
- Given an iterator which may contain several IP iterators, flatten all into
- a single IP iterator.
- """
- for i in iterable:
- if not hasattr(i, 'value') and hasattr(i, '__iter__'):
- for j in flatten_ip_addrs(i):
- yield j
- else:
- yield i
diff --git a/netaddr/core.py b/netaddr/core.py
index d6909eb..b4a45af 100755
--- a/netaddr/core.py
+++ b/netaddr/core.py
@@ -1,81 +1,111 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-Classes and routines that are common to various netaddr sub modules.
-"""
-import sys as _sys
-import pprint as _pprint
-
-#-----------------------------------------------------------------------------
-class Subscriber(object):
- """
- Abstract class defining interface expected by a Publisher that concrete
- subclass instances register with to receive updates from.
- """
- def update(self, data):
- """
- Callback function used by Publisher to notify this Subscriber about
- an update.
- """
- raise NotImplementedError('cannot invoke virtual method!')
-
-#-----------------------------------------------------------------------------
-class PrettyPrinter(Subscriber):
- """
- Concrete Subscriber that uses the pprint module to format all data from
- updates received writing them to any file-like object. Useful for
- debugging.
- """
- def __init__(self, fh=_sys.stdout, write_eol=True):
- """
- Constructor.
-
- fh - file or file like object to write to. Default: sys.stdout.
- """
- self.fh = fh
- self.write_eol = write_eol
-
- def update(self, data):
- """
- Callback function used by Publisher to notify this Subscriber about
- an update.
- """
- self.fh.write(_pprint.pformat(data))
- if self.write_eol:
- self.fh.write("\n")
-
-#-----------------------------------------------------------------------------
-class Publisher(object):
- """
- A 'push' publisher that maintains a list of Subscriber objects notifying
- them of state changes when its subclasses encounter events of interest.
- """
- def __init__(self):
- """Constructor"""
- self.subscribers = []
-
- def attach(self, subscriber):
- """Add a new subscriber"""
- if hasattr(subscriber, 'update') and \
- callable(eval('subscriber.update')):
- if subscriber not in self.subscribers:
- self.subscribers.append(subscriber)
- else:
- raise TypeError('%r does not support required interface!' \
- % subscriber)
-
- def detach(self, subscriber):
- """Remove an existing subscriber"""
- try:
- self.subscribers.remove(subscriber)
- except ValueError:
- pass
-
- def notify(self, data):
- """Send notification message to all registered subscribers"""
- for subscriber in self.subscribers:
- subscriber.update(data)
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""common code shared between various modules"""
+
+import sys as _sys
+import struct as _struct
+import pprint as _pprint
+
+#: True if platform is natively big endian, False otherwise.
+BIG_ENDIAN_PLATFORM = _struct.pack('=h', 1) == _struct.pack('>h', 1)
+
+#-----------------------------------------------------------------------------
+# Custom exceptions.
+#-----------------------------------------------------------------------------
+class AddrFormatError(Exception):
+ """
+ An Exception indicating that a network address format is not recognised.
+ """
+ pass
+
+#-----------------------------------------------------------------------------
+class AddrConversionError(Exception):
+ """
+ An Exception indicating a failure to convert between address types or
+ notations.
+ """
+ pass
+
+#-----------------------------------------------------------------------------
+def num_bits(n):
+ """Minimum number of bits needed to represent a given unsigned integer."""
+ n = abs(n)
+ numbits = 0
+ while n:
+ numbits += 1
+ n >>= 1
+ return numbits
+
+#-----------------------------------------------------------------------------
+class Subscriber(object):
+ """
+ Abstract class defining interface expected by a Publisher that concrete
+ subclass instances register with to receive updates from.
+ """
+ def update(self, data):
+ """
+ Callback function used by Publisher to notify this Subscriber about
+ an update.
+ """
+ raise NotImplementedError('cannot invoke virtual method!')
+
+#-----------------------------------------------------------------------------
+class PrettyPrinter(Subscriber):
+ """
+ Concrete Subscriber that uses the pprint module to format all data from
+ updates received writing them to any file-like object. Useful for
+ debugging.
+ """
+ def __init__(self, fh=_sys.stdout, write_eol=True):
+ """
+ Constructor.
+
+ fh - file or file like object to write to. Default: sys.stdout.
+ """
+ self.fh = fh
+ self.write_eol = write_eol
+
+ def update(self, data):
+ """
+ Callback function used by Publisher to notify this Subscriber about
+ an update.
+ """
+ self.fh.write(_pprint.pformat(data))
+ if self.write_eol:
+ self.fh.write("\n")
+
+#-----------------------------------------------------------------------------
+class Publisher(object):
+ """
+ A 'push' publisher that maintains a list of Subscriber objects notifying
+ them of state changes when its subclasses encounter events of interest.
+ """
+ def __init__(self):
+ """Constructor"""
+ self.subscribers = []
+
+ def attach(self, subscriber):
+ """Add a new subscriber"""
+ if hasattr(subscriber, 'update') and \
+ callable(eval('subscriber.update')):
+ if subscriber not in self.subscribers:
+ self.subscribers.append(subscriber)
+ else:
+ raise TypeError('%r does not support required interface!' \
+ % subscriber)
+
+ def detach(self, subscriber):
+ """Remove an existing subscriber"""
+ try:
+ self.subscribers.remove(subscriber)
+ except ValueError:
+ pass
+
+ def notify(self, data):
+ """Send notification message to all registered subscribers"""
+ for subscriber in self.subscribers:
+ subscriber.update(data)
+
diff --git a/netaddr/eui/__init__.py b/netaddr/eui/__init__.py
index d2e42c9..d25daaf 100755
--- a/netaddr/eui/__init__.py
+++ b/netaddr/eui/__init__.py
@@ -5,217 +5,26 @@
# Released under the BSD license. See the LICENSE file for details.
#-----------------------------------------------------------------------------
"""
-Provides access to public network address information published by the IEEE.
-
-More details can be found at the following URLs :-
-
-Institute of Electrical and Electronics Engineers (IEEE)
-
- - http://www.ieee.org/
- - http://standards.ieee.org/regauth/oui/
+classes and functions for dealing with MAC, OUI, IAB and EUI-64 identifiers.
"""
import sys as _sys
import os as _os
import os.path as _path
+import re as _re
import csv as _csv
import pprint as _pprint
-from netaddr.core import Subscriber, Publisher
-
-#-----------------------------------------------------------------------------
-# Constants.
-#-----------------------------------------------------------------------------
-
-#: Path to local copy of IEEE OUI Registry data file.
-IEEE_OUI_REGISTRY = _path.join(_path.dirname(__file__), 'oui.txt')
-#: Path to netaddr OUI index file.
-IEEE_OUI_METADATA = _path.join(_path.dirname(__file__), 'oui.idx')
-
-#: OUI index lookup dictionary.
-IEEE_OUI_INDEX = {}
-
-#: Path to local copy of IEEE IAB Registry data file.
-IEEE_IAB_REGISTRY = _path.join(_path.dirname(__file__), 'iab.txt')
-
-#: Path to netaddr IAB index file.
-IEEE_IAB_METADATA = _path.join(_path.dirname(__file__), 'iab.idx')
-
-#: IAB index lookup dictionary.
-IEEE_IAB_INDEX = {}
-
-class NotRegisteredError(Exception):
- """
- An Exception indicating that an OUI or IAB was not found in the IEEE
- Registry.
- """
- pass
-
-#-----------------------------------------------------------------------------
-class FileIndexer(Subscriber):
- """Stores index data found by a parser in a CSV file"""
- def __init__(self, filename):
- """
- Constructor.
-
- filename - location of CSV index file.
- """
- self.fh = open(filename, 'w')
- self.writer = _csv.writer(self.fh, lineterminator="\n")
-
- def update(self, data):
- """
- Write received record to a CSV file
-
- @param data: record containing offset record information.
- """
- self.writer.writerow(data)
-
-#-----------------------------------------------------------------------------
-class OUIIndexParser(Publisher):
- """
- A parser that processes OUI (Organisationally Unique Identifier)
- registration file data published by the IEEE.
-
- It sends out notifications to registered subscribers for each record it
- encounters, passing on the record's position relative to file start
- (offset) and the size of the record (in bytes).
-
- The file is available online here :-
-
- http://standards.ieee.org/regauth/oui/oui.txt
-
- Sample record::
-
- 00-CA-FE (hex) ACME CORPORATION
- 00CAFE (base 16) ACME CORPORATION
- 1 MAIN STREET
- SPRINGFIELD
- UNITED STATES
- """
- def __init__(self, filename):
- """
- Constructor.
-
- filename - location of file containing OUI records.
- """
- super(OUIIndexParser, self).__init__()
- self.fh = open(filename, 'rb')
-
- def parse(self):
- """Parse an OUI registration file for records notifying subscribers"""
- skip_header = True
- record = None
- size = 0
+from netaddr.core import AddrFormatError, AddrConversionError, Subscriber, \
+ Publisher
+from netaddr.strategy import eui48 as _eui48
+from netaddr.strategy import eui64 as _eui64
+from netaddr.strategy.eui48 import mac_eui48
+from netaddr.ip import IP
- while True:
- line = self.fh.readline() # unbuffered to obtain correct offsets
-
- if not line:
- break # EOF, we're done
-
- if skip_header and '(hex)' in line:
- skip_header = False
-
- if skip_header:
- # ignoring header section
- continue
-
- if '(hex)' in line:
- # record start
- if record is not None:
- # a complete record.
- record.append(size)
- self.notify(record)
-
- size = len(line)
- offset = (self.fh.tell() - len(line))
- oui = line.split()[0]
- index = int(oui.replace('-', ''), 16)
- record = [index, offset]
- else:
- # within record
- size += len(line)
-
- # process final record on loop exit
- record.append(size)
- self.notify(record)
-
-#-----------------------------------------------------------------------------
-class IABIndexParser(Publisher):
- """
- A parser that processes IAB (Individual Address Block) registration file
- data published by the IEEE.
-
- It sends out notifications to registered Subscriber objects for each
- record it encounters, passing on the record's position relative to file
- start (offset) and the size of the record (in bytes).
-
- The file is available online here :-
-
- http://standards.ieee.org/regauth/oui/iab.txt
-
- Sample record::
-
- 00-50-C2 (hex) ACME CORPORATION
- ABC000-ABCFFF (base 16) ACME CORPORATION
- 1 MAIN STREET
- SPRINGFIELD
- UNITED STATES
- """
- def __init__(self, filename):
- """
- Constructor.
-
- filename - location of file containing IAB records.
- """
- super(IABIndexParser, self).__init__()
- self.fh = open(filename, 'rb')
-
- def parse(self):
- """Parse an IAB registration file for records notifying subscribers"""
- skip_header = True
- record = None
- size = 0
- while True:
- line = self.fh.readline() # unbuffered
-
- if not line:
- break # EOF, we're done
-
- if skip_header and '(hex)' in line:
- skip_header = False
-
- if skip_header:
- # ignoring header section
- continue
-
- if '(hex)' in line:
- # record start
- if record is not None:
- record.append(size)
- self.notify(record)
-
- offset = (self.fh.tell() - len(line))
- iab_prefix = line.split()[0]
- index = iab_prefix
- record = [index, offset]
- size = len(line)
- elif '(base 16)' in line:
- # within record
- size += len(line)
- prefix = record[0].replace('-', '')
- suffix = line.split()[0]
- suffix = suffix.split('-')[0]
- record[0] = (int(prefix + suffix, 16)) >> 12
- else:
- # within record
- size += len(line)
-
- # process final record on loop exit
- record.append(size)
- self.notify(record)
+from netaddr.eui.ieee import IEEE_OUI_INDEX, IEEE_OUI_REGISTRY, \
+ IEEE_IAB_INDEX, IEEE_IAB_REGISTRY, NotRegisteredError
#-----------------------------------------------------------------------------
class OUI(object):
@@ -237,7 +46,7 @@ class OUI(object):
self.records = []
if isinstance(oui, str):
-#FIXME: Improve string parsing here. Accept full MAC/EUI-48 addressse as
+#FIXME: Improve string parsing here. Accept full MAC/EUI-48 addressses as
#FIXME: well as XX-XX-XX and just take /16 (see IAB for details)!
self.value = int(oui.replace('-', ''), 16)
elif isinstance(oui, (int, long)):
@@ -286,8 +95,9 @@ class OUI(object):
self.records.append(record)
- def org_count(self):
- """@return: number of organisations with this OUI"""
+ @property
+ def reg_count(self):
+ """Number of registered organisations with this OUI"""
return len(self.records)
def address(self, index=0):
@@ -331,8 +141,9 @@ class OUI(object):
int_val >>= 8
return '-'.join(reversed(words)).upper()
+ @property
def registration(self):
- """@return: registration details for this IAB"""
+ """ The IEEE registration details for this OUI"""
return self.records
def __repr__(self):
@@ -346,6 +157,7 @@ class IAB(object):
For online details see - http://standards.ieee.org/regauth/oui/
"""
+ @staticmethod
def split_iab_mac(eui_int, strict=False):
"""
@param eui_int: a MAC IAB as an unsigned integer.
@@ -370,8 +182,6 @@ class IAB(object):
return iab_bits, user_bits
- split_iab_mac = staticmethod(split_iab_mac)
-
def __init__(self, iab, strict=False):
"""
Constructor
@@ -466,64 +276,340 @@ class IAB(object):
int_val >>= 8
return '-'.join(reversed(words)).upper()
+ @property
def registration(self):
- """@return: registration details for this IAB"""
+ """The IEEE registration details for this IAB"""
return self.record
def __repr__(self):
"""@return: executable Python string to recreate equivalent object."""
- return '%s(%r)' % (self.__class__.__name__, str(self))
+ return 'IAB(%s)' % self
#-----------------------------------------------------------------------------
-def create_ieee_indices():
- """Create indices for OUI and IAB file based lookups"""
- oui_parser = OUIIndexParser(IEEE_OUI_REGISTRY)
- oui_parser.attach(FileIndexer(IEEE_OUI_METADATA))
- oui_parser.parse()
+class EUI(object):
+ """
+ Represents an IEEE EUI (Extended Unique Identifier). Both EUI-48, better
+ known as a MAC (Media Access Control) address and EUI-64 are supported.
- iab_parser = IABIndexParser(IEEE_IAB_REGISTRY)
- iab_parser.attach(FileIndexer(IEEE_IAB_METADATA))
- iab_parser.parse()
+ Input parsing for EUI-48 addresses is flexible, supporting many MAC
+ variants.
+ """
+ def __init__(self, addr, version=None, dialect=None):
+ """
+ Constructor.
-#-----------------------------------------------------------------------------
-def load_ieee_indices():
- """Load OUI and IAB indices into memory"""
- for row in _csv.reader(open(IEEE_OUI_METADATA)):
- (key, offset, size) = [int(_) for _ in row]
- IEEE_OUI_INDEX.setdefault(key, [])
- IEEE_OUI_INDEX[key].append((offset, size))
-
- for row in _csv.reader(open(IEEE_IAB_METADATA)):
- (key, offset, size) = [int(_) for _ in row]
- IEEE_IAB_INDEX.setdefault(key, [])
- IEEE_IAB_INDEX[key].append((offset, size))
+ @param addr: an EUI-48 (MAC) or EUI-64 address in string format or an
+ unsigned integer. May also be another EUI object (copy construction).
-#-----------------------------------------------------------------------------
-def get_latest_files():
- """Download the latest files from the IEEE"""
- import urllib2
-
- urls = [
- 'http://standards.ieee.org/regauth/oui/oui.txt',
- 'http://standards.ieee.org/regauth/oui/iab.txt',
- ]
-
- for url in urls:
- print 'downloading latest copy of %s' % url
- request = urllib2.Request(url)
- response = urllib2.urlopen(request)
- save_path = _path.dirname(__file__)
- filename = _path.join(save_path, _os.path.basename(response.geturl()))
- fh = open(filename, 'wb')
- fh.write(response.read())
- fh.close()
+ @param version: the explict EUI address version. Mainly used to
+ distinguish between EUI-48 and EUI-64 identifiers specified as
+ integers that may be numerically equivalent.
+ """
+ self._value = None
+ self._module = None
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- # Generate indices when module is executed as a script.
- get_latest_files()
- create_ieee_indices()
+ if version is not None and version not in (48, 64):
+ raise ValueError('Unsupport EUI version: %r!' % version)
+
+ if dialect is None:
+ self._dialect = mac_eui48
+ else:
+ self._dialect = dialect
+
+ # Choose a default version when addr is an integer and version is
+ # not specified.
+ if 0 <= addr <= 0xffffffffffff:
+ self._module = _eui48
+ elif 0xffffffffffff < addr <= 0xffffffffffffffff:
+ self._module = _eui64
+
+ self.value = addr
+
+ def _get_value(self):
+ return self._value
+
+ def _set_value(self, value):
+ if self._module is None:
+ # EUI version is implicit, detect it from value.
+ for module in (_eui48, _eui64):
+ try:
+ self._value = module.str_to_int(value)
+ self._module = module
+ break
+ except AddrFormatError:
+ try:
+ if 0 <= int(value) <= module.max_int:
+ self._value = int(value)
+ self._module = module
+ break
+ except ValueError:
+ pass
+
+ if self._module is None:
+ raise AddrFormatError('failed to detect EUI version: %r'
+ % value)
+ else:
+ # EUI version is explicit.
+ if hasattr(value, 'upper'):
+ try:
+ self._value = self._module.str_to_int(value)
+ except AddrFormatError:
+ raise AddrFormatError('address %r is not an EUIv%d'
+ % (value, self._module.version))
+ else:
+ if 0 <= int(value) <= self._module.max_int:
+ self._value = int(value)
+ else:
+ raise AddrFormatError('bad address format: %r' % value)
+
+ value = property(_get_value, _set_value, None,
+ 'a positive integer representing the value of this EUI indentifier.')
+
+ def _get_dialect(self):
+ return self._dialect
+
+ def _set_dialect(self, value):
+ if not issubclass(value, mac_eui48):
+ raise TypeError('custom dialects should subclass mac_eui48!')
+ else:
+ self._dialect = value
+
+ dialect = property(_get_dialect, _set_dialect, None,
+ 'a Python class providing support for the interpretation of various'
+ ' MAC address formats.')
+
+ @property
+ def oui(self):
+ """The OUI (Organisationally Unique Identifier) for this EUI."""
+ if self._module == _eui48:
+ return OUI(self.value >> 24)
+ elif self._module == _eui64:
+ return OUI(self.value >> 40)
+
+ @property
+ def ei(self):
+ """The EI (Extension Identifier) for this EUI"""
+ if self._module == _eui48:
+ return '-'.join(["%02x" % i for i in self[3:6]]).upper()
+ elif self._module == _eui64:
+ return '-'.join(["%02x" % i for i in self[3:8]]).upper()
+
+ def isiab(self):
+ """@return: True if this EUI is an IAB address, False otherwise"""
+ return 0x50c2000 <= (self._value >> 12) <= 0x50c2fff
+
+ @property
+ def iab(self):
+ """
+ If isiab() is True, the IAB (Individual Address Block) is returned,
+ C{None} otherwise.
+ """
+ if self.isiab():
+ return IAB(self._value >> 12)
+
+ @property
+ def version(self):
+ """The EUI version represented by this EUI object."""
+ return self._module.version
+
+ def __getitem__(self, idx):
+ """
+ @return: The integer value of the word referenced by index (both
+ positive and negative). Raises C{IndexError} if index is out
+ of bounds. Also supports Python list slices for accessing
+ word groups.
+ """
+ if isinstance(idx, (int, long)):
+ # Indexing, including negative indexing goodness.
+ num_words = self._dialect.num_words
+ if not (-num_words) <= idx <= (num_words - 1):
+ raise IndexError('index out range for address type!')
+ return self._module.int_to_words(self._value, self._dialect)[idx]
+ elif isinstance(idx, slice):
+ words = self._module.int_to_words(self._value, self._dialect)
+ return [words[i] for i in range(*idx.indices(len(words)))]
+ else:
+ raise TypeError('unsupported type %r!' % idx)
+
+ def __setitem__(self, idx, value):
+ """Sets the value of the word referenced by index in this address"""
+ if isinstance(idx, slice):
+ # TODO - settable slices.
+ raise NotImplementedError('settable slices are not supported!')
+ if not isinstance(idx, (int, long)):
+ raise TypeError('index not an integer!')
+
+ if not 0 <= idx <= (self._dialect.num_words - 1):
+ raise IndexError('index %d outside address type boundary!' % idx)
+
+ if not isinstance(value, (int, long)):
+ raise TypeError('value not an integer!')
+
+ if not 0 <= value <= self._dialect.max_word:
+ raise IndexError('value %d outside word size maximum of %d bits!'
+ % (value, self._dialect.word_size))
+
+ words = list(self._module.int_to_words(self._value, self._dialect))
+ words[idx] = value
+ self._value = self._module.words_to_int(words)
+
+ def __hash__(self):
+ """@return: hash of this EUI object suitable for dict keys, sets etc"""
+ return hash((self.version, self._value))
+
+ def __int__(self):
+ """@return: value of this EUI object as an unsigned integer"""
+ return self._value
+
+ def __long__(self):
+ """@return: value of this EUI object as an unsigned integer"""
+ return self._value
+
+ def __hex__(self):
+ """
+ @return: hexadecimal string representation of this EUI identifier.
+ """
+ return hex(self._value).rstrip('L').lower()
+
+ def __str__(self):
+ """@return: EUI in representational format"""
+ return self._module.int_to_str(self._value, self._dialect)
+
+ def __repr__(self):
+ """@return: Python statement to create equivalent EUI object"""
+ return "EUI('%s')" % self
+
+ def __eq__(self, other):
+ """
+ @return: C{True} if this EUI object is numerically the same as other,
+ C{False} otherwise.
+ """
+ try:
+ return(self.version, self._value) == (other.version, other._value)
+ except AttributeError:
+ return False
-# On module load read indices in memory to enable lookups.
-load_ieee_indices()
+ def __ne__(self, other):
+ """
+ @return: C{False} if this EUI object is numerically the same as the
+ other, C{True} otherwise.
+ """
+ try:
+ return(self.version, self._value) != (other.version, other._value)
+ except AttributeError:
+ return True
+
+ def __lt__(self, other):
+ """
+ @return: C{True} if this EUI object is numerically lower in value than
+ other, C{False} otherwise.
+ """
+ try:
+ return (self.version, self._value) < (other.version, other._value)
+ except AttributeError:
+ return False
+
+ def __le__(self, other):
+ """
+ @return: C{True} if this EUI object is numerically lower or equal in
+ value to other, C{False} otherwise.
+ """
+ try:
+ return(self.version, self._value) <= (other.version, other._value)
+ except AttributeError:
+ return False
+
+ def __gt__(self, other):
+ """
+ @return: C{True} if this EUI object is numerically greater in value than
+ other, C{False} otherwise.
+ """
+ try:
+ return (self.version, self._value) > (other.version, other._value)
+ except AttributeError:
+ return False
+
+ def __ge__(self, other):
+ """
+ @return: C{True} if this EUI object is numerically greater or equal in
+ value to other, C{False} otherwise.
+ """
+ try:
+ return(self.version, self._value) >= (other.version, other._value)
+ except AttributeError:
+ return False
+
+ def bits(self, word_sep=None):
+ """
+ @param word_sep: (optional) the separator to insert between words.
+ Default: None - use default separator for address type.
+
+ @return: human-readable binary digit string of this address"""
+ return self._module.int_to_bits(self._value, word_sep)
+
+ def packed(self):
+ """@return: binary packed string of this address"""
+ return self._module.int_to_packed(self._value)
+
+ def bin(self):
+ """
+ @return: standard Python binary representation of this address. A back
+ port of the format provided by the builtin bin() type available in
+ Python 2.6.x and higher."""
+ return self._module.int_to_bin(self._value)
+
+ def eui64(self):
+ """
+ @return: The value of this EUI object as a new 64-bit EUI object.
+ - If this object represents an EUI-48 it is converted to EUI-64
+ as per the standard.
+ - If this object is already and EUI-64, it just returns a new,
+ numerically equivalent object is returned instead.
+ """
+ if self.version == 48:
+ eui64_words = ["%02x" % i for i in self[0:3]] + ['ff', 'fe'] + \
+ ["%02x" % i for i in self[3:6]]
+
+ return self.__class__('-'.join(eui64_words))
+ else:
+ return EUI(str(self))
+
+ def ipv6_link_local(self):
+ """
+ @return: new link local IPv6 L{IP} object based on this L{EUI} using
+ technique described in RFC 4291. B{Please Note:} this technique
+ poses security risks in certain scenarios. Please read RFC 4941 for
+ details. Reference: RFCs 4291 and 4941.
+ """
+ prefix = 'fe80:0000:0000:0000:'
+
+ # Add 2 to the first octet of this EUI address (temporarily).
+ self[0] += 2
+
+ if self.version == 48:
+ # Modify MAC to make it an EUI-64.
+ suffix = ["%02x" % i for i in self[0:3]] + ['ff', 'fe'] + \
+ ["%02x" % i for i in self[3:6]]
+ else:
+ suffix = ["%02x" % i for i in list(self)]
+
+ suffix = ["%02x%02x" % (int(x[0], 16), int(x[1], 16)) for x in \
+ zip(suffix[::2], suffix[1::2])]
+
+ # Subtract 2 again to return EUI to its original value.
+ self[0] -= 2
+
+ ipv6_addr = ':'.join(suffix)
+ addr = prefix + ipv6_addr + '/64'
+ return IP(addr)
+
+ def info(self):
+ """
+ @return: A record dict containing IEEE registration details for this
+ EUI (MAC-48) if available, None otherwise.
+ """
+ data = {'OUI': self.oui().registration()}
+ if self.isiab():
+ data['IAB'] = self.iab().registration()
+ return data
diff --git a/netaddr/eui/iab.idx b/netaddr/eui/iab.idx
index 6181807..b435c63 100644
--- a/netaddr/eui/iab.idx
+++ b/netaddr/eui/iab.idx
@@ -502,2215 +502,2283 @@
84681207,74917,178
84681208,75095,175
84681209,75270,118
-84681210,75388,150
-84681211,75538,147
-84681212,75685,132
-84681213,75817,133
-84681214,75950,187
-84681215,76137,227
-84681216,76364,183
-84681217,76547,119
-84681218,76666,132
-84681219,76798,57
-84681220,76855,155
-84681221,77010,119
-84681222,77129,143
-84681223,77272,244
-84681224,77516,143
-84681225,77659,152
-84681226,77811,140
-84681227,77951,128
-84681228,78079,228
-84681229,78307,172
-84681230,78479,161
-84681231,78640,139
-84681232,78779,167
-84681233,78946,221
-84681234,79167,179
-84681235,79346,128
-84681236,79474,156
-84681237,79630,123
-84681238,79753,147
-84681239,79900,155
-84681240,80055,194
-84681241,80249,161
-84681242,80410,150
-84681243,80560,194
-84681244,80754,163
-84681245,80917,176
-84681246,81093,175
-84681247,81268,169
-84681248,81437,152
-84681249,81589,149
-84681250,81738,132
-84681251,81870,148
-84681252,82018,132
-84681253,82150,145
-84681254,82295,130
-84681255,82425,159
-84681256,82584,184
-84681257,82768,152
-84681258,82920,134
-84681259,83054,185
-84681260,83239,150
-84681261,83389,117
-84681262,83506,147
-84681263,83653,141
-84681264,83794,182
-84681265,83976,152
-84681266,84128,111
-84681267,84239,180
-84681268,84419,152
-84681269,84571,186
-84681270,84757,142
-84681271,84899,164
-84681272,85063,147
-84681273,85210,142
-84681274,85352,157
-84681275,85509,129
-84681276,85638,152
-84681277,85790,153
-84681278,85943,137
-84681279,86080,141
-84681280,86221,147
-84681281,86368,161
-84681282,86529,125
-84681283,86654,134
-84681284,86788,121
-84681285,86909,169
-84681286,87078,104
-84681287,87182,196
-84681288,87378,183
-84681289,87561,170
-84681290,87731,151
-84681291,87882,140
-84681292,88022,137
-84681293,88159,151
-84681294,88310,190
-84681295,88500,126
-84681296,88626,147
-84681297,88773,141
-84681298,88914,138
-84681299,89052,148
-84681300,89200,161
-84681301,89361,204
-84681302,89565,163
-84681303,89728,138
-84681304,89866,166
-84681305,90032,137
-84681306,90169,151
-84681307,90320,145
-84681308,90465,167
-84681309,90632,119
-84681310,90751,164
-84681311,90915,185
-84681312,91100,133
-84681313,91233,135
-84681314,91368,201
-84681315,91569,156
-84681316,91725,149
-84681317,91874,135
-84681318,92009,138
-84681319,92147,180
-84681320,92327,140
-84681321,92467,152
-84681322,92619,131
-84681323,92750,187
-84681324,92937,187
-84681325,93124,173
-84681326,93297,130
-84681327,93427,160
-84681328,93587,164
-84681329,93751,158
-84681330,93909,142
-84681331,94051,212
-84681332,94263,153
-84681333,94416,175
-84681334,94591,155
-84681335,94746,141
-84681336,94887,120
-84681337,95007,143
-84681338,95150,130
-84681339,95280,122
-84681340,95402,134
-84681341,95536,137
-84681342,95673,143
-84681343,95816,184
-84681344,96000,135
-84681345,96135,127
-84681346,96262,106
-84681347,96368,166
-84681348,96534,117
-84681349,96651,151
-84681350,96802,124
-84681351,96926,214
-84681352,97140,173
-84681353,97313,129
-84681354,97442,144
-84681355,97586,189
-84681356,97775,154
-84681357,97929,108
-84681358,98037,135
-84681359,98172,182
-84681360,98354,125
-84681361,98479,130
-84681362,98609,129
-84681363,98738,122
-84681364,98860,126
-84681365,98986,165
-84681366,99151,118
-84681367,99269,115
-84681368,99384,136
-84681369,99520,119
-84681370,99639,157
-84681371,99796,147
-84681372,99943,151
-84681373,100094,157
-84681374,100251,190
-84681375,100441,152
-84681376,100593,173
-84681377,100766,137
-84681378,100903,113
-84681379,101016,164
-84681380,101180,156
-84681381,101336,161
-84681382,101497,161
-84681383,101658,173
-84681384,101831,123
-84681385,101954,173
-84681386,102127,126
-84681387,102253,190
-84681388,102443,151
-84681389,102594,143
-84681390,102737,177
-84681391,102914,179
-84681392,103093,177
-84681393,103270,57
-84681394,103327,138
-84681395,103465,147
-84681396,103612,157
-84681397,103769,177
-84681398,103946,115
-84681399,104061,148
-84681400,104209,168
-84681401,104377,155
-84681402,104532,172
-84681403,104704,181
-84681404,104885,143
-84681405,105028,152
-84681406,105180,168
-84681407,105348,134
-84681408,105482,157
-84681409,105639,220
-84681410,105859,157
-84681411,106016,155
-84681412,106171,177
-84681413,106348,126
-84681414,106474,185
-84681415,106659,146
-84681416,106805,106
-84681417,106911,141
-84681418,107052,176
-84681419,107228,157
-84681420,107385,145
-84681421,107530,158
-84681422,107688,161
-84681423,107849,197
-84681424,108046,138
-84681425,108184,162
-84681426,108346,152
-84681427,108498,172
-84681428,108670,218
-84681429,108888,111
-84681430,108999,142
-84681431,109141,167
-84681432,109308,142
-84681433,109450,57
-84681434,109507,145
-84681435,109652,182
-84681436,109834,146
-84681437,109980,177
-84681438,110157,143
-84681439,110300,134
-84681440,110434,151
-84681441,110585,157
-84681442,110742,167
-84681443,110909,148
-84681444,111057,109
-84681445,111166,161
-84681446,111327,114
-84681447,111441,151
-84681448,111592,157
-84681449,111749,145
-84681450,111894,125
-84681451,112019,133
-84681452,112152,214
-84681453,112366,159
-84681454,112525,172
-84681455,112697,140
-84681456,112837,145
-84681457,112982,138
-84681458,113120,136
-84681459,113256,154
-84681460,113410,179
-84681461,113589,162
-84681462,113751,164
-84681463,113915,123
-84681464,114038,141
-84681465,114179,123
-84681466,114302,159
-84681467,114461,205
-84681468,114666,159
-84681469,114825,157
-84681470,114982,121
-84681471,115103,144
-84681472,115247,140
-84681473,115387,175
-84681474,115562,185
-84681475,115747,162
-84681476,115909,137
-84681477,116046,149
-84681478,116195,172
-84681479,116367,171
-84681480,116538,114
-84681481,116652,167
-84681482,116819,146
-84681483,116965,149
-84681484,117114,122
-84681485,117236,116
-84681486,117352,136
-84681487,117488,166
-84681488,117654,171
-84681489,117825,128
-84681490,117953,175
-84681491,118128,148
-84681492,118276,151
-84681493,118427,140
-84681494,118567,119
-84681495,118686,160
-84681496,118846,158
-84681497,119004,169
-84681498,119173,164
-84681499,119337,108
-84681500,119445,137
-84681501,119582,150
-84681502,119732,136
-84681503,119868,152
-84681504,120020,139
-84681505,120159,162
-84681506,120321,184
-84681507,120505,133
-84681508,120638,121
-84681509,120759,183
-84681510,120942,134
-84681511,121076,137
-84681512,121213,191
-84681513,121404,118
-84681514,121522,158
-84681515,121680,167
-84681516,121847,239
-84681517,122086,151
-84681518,122237,174
-84681519,122411,128
-84681520,122539,131
-84681521,122670,155
-84681522,122825,166
-84681523,122991,149
-84681524,123140,149
-84681525,123289,138
-84681526,123427,178
-84681527,123605,129
-84681528,123734,110
-84681529,123844,143
-84681530,123987,175
-84681531,124162,144
-84681532,124306,119
-84681533,124425,194
-84681534,124619,156
-84681535,124775,120
-84681536,124895,116
-84681537,125011,152
-84681538,125163,158
-84681539,125321,222
-84681540,125543,141
-84681541,125684,124
-84681542,125808,145
-84681543,125953,124
-84681544,126077,142
-84681545,126219,140
-84681546,126359,167
-84681547,126526,166
-84681548,126692,175
-84681549,126867,178
-84681550,127045,214
-84681551,127259,181
-84681552,127440,179
-84681553,127619,164
-84681554,127783,133
-84681555,127916,163
-84681556,128079,169
-84681557,128248,109
-84681558,128357,146
-84681559,128503,146
-84681560,128649,150
-84681561,128799,142
-84681562,128941,194
-84681563,129135,158
-84681564,129293,117
-84681565,129410,121
-84681566,129531,127
-84681567,129658,130
-84681568,129788,181
-84681569,129969,101
-84681570,130070,135
-84681571,130205,139
-84681572,130344,140
-84681573,130484,121
-84681574,130605,163
-84681575,130768,186
-84681576,130954,129
-84681577,131083,133
-84681578,131216,134
-84681579,131350,139
-84681580,131489,117
-84681581,131606,158
-84681582,131764,149
-84681583,131913,138
-84681584,132051,174
-84681585,132225,144
-84681586,132369,143
-84681587,132512,150
-84681588,132662,175
-84681589,132837,148
-84681590,132985,112
-84681591,133097,121
-84681592,133218,162
-84681593,133380,148
-84681594,133528,138
-84681595,133666,147
-84681596,133813,156
-84681597,133969,144
-84681598,134113,135
-84681599,134248,184
-84681600,134432,133
-84681601,134565,154
-84681602,134719,139
-84681603,134858,140
-84681604,134998,168
-84681605,135166,205
-84681606,135371,166
-84681607,135537,151
-84681608,135688,125
-84681609,135813,136
-84681610,135949,154
-84681611,136103,119
-84681612,136222,125
-84681613,136347,161
-84681614,136508,122
-84681615,136630,112
-84681616,136742,141
-84681617,136883,147
-84681618,137030,160
-84681619,137190,152
-84681620,137342,114
-84681621,137456,135
-84681622,137591,138
-84681623,137729,121
-84681624,137850,167
-84681625,138017,159
-84681626,138176,155
-84681627,138331,150
-84681628,138481,141
-84681629,138622,157
-84681630,138779,189
-84681631,138968,125
-84681632,139093,172
-84681633,139265,108
-84681634,139373,134
-84681635,139507,215
-84681636,139722,192
-84681637,139914,149
-84681638,140063,146
-84681639,140209,180
-84681640,140389,120
-84681641,140509,148
-84681642,140657,180
-84681643,140837,153
-84681644,140990,136
-84681645,141126,240
-84681646,141366,180
-84681647,141546,114
-84681648,141660,189
-84681649,141849,183
-84681650,142032,196
-84681651,142228,136
-84681652,142364,157
-84681653,142521,149
-84681654,142670,148
-84681655,142818,164
-84681656,142982,136
-84681657,143118,143
-84681658,143261,160
-84681659,143421,182
-84681660,143603,129
-84681661,143732,128
-84681662,143860,189
-84681663,144049,174
-84681664,144223,142
-84681665,144365,171
-84681666,144536,150
-84681667,144686,168
-84681668,144854,144
-84681669,144998,171
-84681670,145169,140
-84681671,145309,177
-84681672,145486,147
-84681673,145633,138
-84681674,145771,139
-84681675,145910,145
-84681676,146055,215
-84681677,146270,151
-84681678,146421,165
-84681679,146586,170
-84681680,146756,155
-84681681,146911,127
-84681682,147038,149
-84681683,147187,155
-84681684,147342,201
-84681685,147543,197
-84681686,147740,132
-84681687,147872,163
-84681688,148035,139
-84681689,148174,159
-84681690,148333,150
-84681691,148483,135
-84681692,148618,132
-84681693,148750,118
-84681694,148868,140
-84681695,149008,125
-84681696,149133,125
-84681697,149258,150
-84681698,149408,114
-84681699,149522,177
-84681700,149699,121
-84681701,149820,105
-84681702,149925,117
-84681703,150042,182
-84681704,150224,163
-84681705,150387,164
-84681706,150551,156
-84681707,150707,161
-84681708,150868,144
-84681709,151012,145
-84681710,151157,138
-84681711,151295,207
-84681712,151502,147
-84681713,151649,170
-84681714,151819,137
-84681715,151956,143
-84681716,152099,131
-84681717,152230,180
-84681718,152410,154
-84681719,152564,132
-84681720,152696,123
-84681721,152819,130
-84681722,152949,104
-84681723,153053,145
-84681724,153198,159
-84681725,153357,150
-84681726,153507,160
-84681727,153667,151
-84681728,153818,135
-84681729,153953,150
-84681730,154103,139
-84681731,154242,192
-84681732,154434,187
-84681733,154621,184
-84681734,154805,148
-84681735,154953,121
-84681736,155074,122
-84681737,155196,121
-84681738,155317,177
-84681739,155494,134
-84681740,155628,160
-84681741,155788,184
-84681742,155972,153
-84681743,156125,124
-84681744,156249,154
-84681745,156403,208
-84681746,156611,160
-84681747,156771,153
-84681748,156924,147
-84681749,157071,147
-84681750,157218,131
-84681751,157349,129
-84681752,157478,117
-84681753,157595,115
-84681754,157710,166
-84681755,157876,163
-84681756,158039,159
-84681757,158198,132
-84681758,158330,178
-84681759,158508,131
-84681760,158639,148
-84681761,158787,126
-84681762,158913,159
-84681763,159072,145
-84681764,159217,171
-84681765,159388,151
-84681766,159539,156
-84681767,159695,155
-84681768,159850,128
-84681769,159978,143
-84681770,160121,172
-84681771,160293,163
-84681772,160456,192
-84681773,160648,124
-84681774,160772,154
-84681775,160926,153
-84681776,161079,125
-84681777,161204,146
-84681778,161350,190
-84681779,161540,174
-84681780,161714,123
-84681781,161837,152
-84681782,161989,167
-84681783,162156,139
-84681784,162295,233
-84681785,162528,155
-84681786,162683,124
-84681787,162807,134
-84681788,162941,128
-84681789,163069,176
-84681790,163245,126
-84681791,163371,149
-84681792,163520,233
-84681793,163753,187
-84681794,163940,159
-84681795,164099,164
-84681796,164263,157
-84681797,164420,133
-84681798,164553,124
-84681799,164677,128
-84681800,164805,160
-84681801,164965,144
-84681802,165109,143
-84681803,165252,165
-84681804,165417,189
-84681805,165606,177
-84681806,165783,185
-84681807,165968,126
-84681808,166094,172
-84681809,166266,117
-84681810,166383,135
-84681811,166518,153
-84681812,166671,160
-84681813,166831,166
-84681814,166997,154
-84681815,167151,110
-84681816,167261,120
-84681817,167381,160
-84681818,167541,172
-84681819,167713,151
-84681820,167864,170
-84681821,168034,160
-84681822,168194,188
-84681823,168382,154
-84681824,168536,117
-84681825,168653,139
-84681826,168792,138
-84681827,168930,149
-84681828,169079,162
-84681829,169241,110
-84681830,169351,141
-84681831,169492,168
-84681832,169660,131
-84681833,169791,163
-84681834,169954,126
-84681835,170080,126
-84681836,170206,113
-84681837,170319,161
-84681838,170480,153
-84681839,170633,129
-84681840,170762,160
-84681841,170922,201
-84681842,171123,138
-84681843,171261,157
-84681844,171418,149
-84681845,171567,138
-84681846,171705,125
-84681847,171830,133
-84681848,171963,129
-84681849,172092,165
-84681850,172257,179
-84681851,172436,153
-84681852,172589,120
-84681853,172709,113
-84681854,172822,171
-84681855,172993,146
-84681856,173139,132
-84681857,173271,166
-84681858,173437,163
-84681859,173600,126
-84681860,173726,150
-84681861,173876,159
-84681862,174035,147
-84681863,174182,165
-84681864,174347,128
-84681865,174475,143
-84681866,174618,167
-84681867,174785,152
-84681868,174937,123
-84681869,175060,135
-84681870,175195,143
-84681871,175338,149
-84681872,175487,146
-84681873,175633,123
-84681874,175756,119
-84681875,175875,144
-84681876,176019,156
-84681877,176175,139
-84681878,176314,158
-84681879,176472,193
-84681880,176665,155
-84681881,176820,130
-84681882,176950,182
-84681883,177132,144
-84681884,177276,171
-84681885,177447,136
-84681886,177583,176
-84681887,177759,141
-84681888,177900,194
-84681889,178094,165
-84681890,178259,112
-84681891,178371,159
-84681892,178530,145
-84681893,178675,150
-84681894,178825,190
-84681895,179015,168
-84681896,179183,173
-84681897,179356,151
-84681898,179507,137
-84681899,179644,162
-84681900,179806,156
-84681901,179962,151
-84681902,180113,153
-84681903,180266,105
-84681904,180371,172
-84681905,180543,208
-84681906,180751,126
-84681907,180877,176
-84681908,181053,140
-84681909,181193,167
-84681910,181360,187
-84681911,181547,126
-84681912,181673,190
-84681913,181863,161
-84681914,182024,168
-84681915,182192,128
-84681916,182320,154
-84681917,182474,123
-84681918,182597,152
-84681919,182749,166
-84681920,182915,152
-84681921,183067,156
-84681922,183223,116
-84681923,183339,141
-84681924,183480,170
-84681925,183650,144
-84681926,183794,115
-84681927,183909,146
-84681928,184055,96
-84681929,184151,114
-84681930,184265,158
-84681931,184423,130
-84681932,184553,152
-84681933,184705,118
-84681934,184823,213
-84681935,185036,147
-84681936,185183,168
-84681937,185351,153
-84681938,185504,206
-84681939,185710,159
-84681940,185869,132
-84681941,186001,142
-84681942,186143,145
-84681943,186288,161
-84681944,186449,136
-84681945,186585,196
-84681946,186781,122
-84681947,186903,169
-84681948,187072,151
-84681949,187223,210
-84681950,187433,180
-84681951,187613,150
-84681952,187763,129
-84681953,187892,135
-84681954,188027,168
-84681955,188195,131
-84681956,188326,128
-84681957,188454,143
-84681958,188597,156
-84681959,188753,167
-84681960,188920,131
-84681961,189051,147
-84681962,189198,117
-84681963,189315,147
-84681964,189462,153
-84681965,189615,174
-84681966,189789,228
-84681967,190017,177
-84681968,190194,164
-84681969,190358,150
-84681970,190508,120
-84681971,190628,148
-84681972,190776,146
-84681973,190922,156
-84681974,191078,129
-84681975,191207,123
-84681976,191330,152
-84681977,191482,157
-84681978,191639,161
-84681979,191800,155
-84681980,191955,199
-84681981,192154,143
-84681982,192297,152
-84681983,192449,133
-84681984,192582,144
-84681985,192726,137
-84681986,192863,189
-84681987,193052,154
-84681988,193206,142
-84681989,193348,139
-84681990,193487,113
-84681991,193600,140
-84681992,193740,198
-84681993,193938,187
-84681994,194125,180
-84681995,194305,137
-84681996,194442,212
-84681997,194654,159
-84681998,194813,159
-84681999,194972,160
-84682000,195132,142
-84682001,195274,122
-84682002,195396,158
-84682003,195554,234
-84682004,195788,148
-84682005,195936,172
-84682006,196108,172
-84682007,196280,163
-84682008,196443,146
-84682009,196589,126
-84682010,196715,158
-84682011,196873,175
-84682012,197048,140
-84682013,197188,108
-84682014,197296,165
-84682015,197461,154
-84682016,197615,145
-84682017,197760,141
-84682018,197901,142
-84682019,198043,218
-84682020,198261,140
-84682021,198401,119
-84682022,198520,134
-84682023,198654,116
-84682024,198770,153
-84682025,198923,159
-84682026,199082,156
-84682027,199238,131
-84682028,199369,133
-84682029,199502,184
-84682030,199686,172
-84682031,199858,220
-84682032,200078,163
-84682033,200241,173
-84682034,200414,149
-84682035,200563,195
-84682036,200758,161
-84682037,200919,142
-84682038,201061,168
-84682039,201229,124
-84682040,201353,165
-84682041,201518,149
-84682042,201667,184
-84682043,201851,148
-84682044,201999,125
-84682045,202124,186
-84682046,202310,138
-84682047,202448,138
-84682048,202586,155
-84682049,202741,133
-84682050,202874,195
-84682051,203069,122
-84682052,203191,130
-84682053,203321,204
-84682054,203525,188
-84682055,203713,179
-84682056,203892,144
-84682057,204036,120
-84682058,204156,146
-84682059,204302,108
-84682060,204410,120
-84682061,204530,139
-84682062,204669,164
-84682063,204833,135
-84682064,204968,160
-84682065,205128,170
-84682066,205298,143
-84682067,205441,121
-84682068,205562,156
-84682069,205718,192
-84682070,205910,144
-84682071,206054,180
-84682072,206234,136
-84682073,206370,148
-84682074,206518,143
-84682075,206661,156
-84682076,206817,153
-84682077,206970,135
-84682078,207105,148
-84682079,207253,154
-84682080,207407,147
-84682081,207554,139
-84682082,207693,189
-84682083,207882,115
-84682084,207997,135
-84682085,208132,199
-84682086,208331,188
-84682087,208519,116
-84682088,208635,141
-84682089,208776,199
-84682090,208975,128
-84682091,209103,132
-84682092,209235,179
-84682093,209414,169
-84682094,209583,176
-84682095,209759,123
-84682096,209882,155
-84682097,210037,124
-84682098,210161,174
-84682099,210335,154
-84682100,210489,154
-84682101,210643,133
-84682102,210776,183
-84682103,210959,163
-84682104,211122,169
-84682105,211291,153
-84682106,211444,145
-84682107,211589,118
-84682108,211707,132
-84682109,211839,149
-84682110,211988,129
-84682111,212117,129
-84682112,212246,195
-84682113,212441,123
-84682114,212564,127
-84682115,212691,166
-84682116,212857,137
-84682117,212994,152
-84682118,213146,132
-84682119,213278,128
-84682120,213406,154
-84682121,213560,123
-84682122,213683,131
-84682123,213814,159
-84682124,213973,195
-84682125,214168,120
-84682126,214288,169
-84682127,214457,151
-84682128,214608,160
-84682129,214768,193
-84682130,214961,145
-84682131,215106,110
-84682132,215216,166
-84682133,215382,141
-84682134,215523,152
-84682135,215675,142
-84682136,215817,151
-84682137,215968,190
-84682138,216158,170
-84682139,216328,105
-84682140,216433,144
-84682141,216577,165
-84682142,216742,140
-84682143,216882,153
-84682144,217035,164
-84682145,217199,173
-84682146,217372,158
-84682147,217530,134
-84682148,217664,266
-84682149,217930,209
-84682150,218139,171
-84682151,218310,157
-84682152,218467,118
-84682153,218585,162
-84682154,218747,127
-84682155,218874,253
-84682156,219127,138
-84682157,219265,150
-84682158,219415,139
-84682159,219554,154
-84682160,219708,128
-84682161,219836,144
-84682162,219980,117
-84682163,220097,174
-84682164,220271,155
-84682165,220426,99
-84682166,220525,193
-84682167,220718,196
-84682168,220914,134
-84682169,221048,167
-84682170,221215,148
-84682171,221363,149
-84682172,221512,243
-84682173,221755,165
-84682174,221920,188
-84682175,222108,150
-84682176,222258,147
-84682177,222405,146
-84682178,222551,139
-84682179,222690,127
-84682180,222817,125
-84682181,222942,171
-84682182,223113,167
-84682183,223280,172
-84682184,223452,182
-84682185,223634,191
-84682186,223825,198
-84682187,224023,167
-84682188,224190,136
-84682189,224326,161
-84682190,224487,176
-84682191,224663,128
-84682192,224791,134
-84682193,224925,156
-84682194,225081,118
-84682195,225199,121
-84682196,225320,195
-84682197,225515,163
-84682198,225678,184
-84682199,225862,129
-84682200,225991,132
-84682201,226123,161
-84682202,226284,142
-84682203,226426,143
-84682204,226569,180
-84682205,226749,165
-84682206,226914,139
-84682207,227053,138
-84682208,227191,159
-84682209,227350,166
-84682210,227516,145
-84682211,227661,148
-84682212,227809,198
-84682213,228007,125
-84682214,228132,124
-84682215,228256,144
-84682216,228400,165
-84682217,228565,184
-84682218,228749,161
-84682219,228910,165
-84682220,229075,177
-84682221,229252,164
-84682222,229416,157
-84682223,229573,123
-84682224,229696,139
-84682225,229835,151
-84682226,229986,160
-84682227,230146,134
-84682228,230280,127
-84682229,230407,175
-84682230,230582,175
-84682231,230757,133
-84682232,230890,130
-84682233,231020,143
-84682234,231163,117
-84682235,231280,175
-84682236,231455,141
-84682237,231596,183
-84682238,231779,140
-84682239,231919,171
-84682240,232090,177
-84682241,232267,164
-84682242,232431,130
-84682243,232561,123
-84682244,232684,133
-84682245,232817,130
-84682246,232947,220
-84682247,233167,133
-84682248,233300,166
-84682249,233466,148
-84682250,233614,212
-84682251,233826,197
-84682252,234023,108
-84682253,234131,131
-84682254,234262,193
-84682255,234455,201
-84682256,234656,162
-84682257,234818,154
-84682258,234972,136
-84682259,235108,135
-84682260,235243,145
-84682261,235388,166
-84682262,235554,149
-84682263,235703,170
-84682264,235873,195
-84682265,236068,149
-84682266,236217,171
-84682267,236388,152
-84682268,236540,154
-84682269,236694,146
-84682270,236840,184
-84682271,237024,151
-84682272,237175,175
-84682273,237350,140
-84682274,237490,145
-84682275,237635,144
-84682276,237779,134
-84682277,237913,123
-84682278,238036,166
-84682279,238202,182
-84682280,238384,136
-84682281,238520,185
-84682282,238705,138
-84682283,238843,157
-84682284,239000,135
-84682285,239135,134
-84682286,239269,133
-84682287,239402,97
-84682288,239499,150
-84682289,239649,131
-84682290,239780,131
-84682291,239911,143
-84682292,240054,152
-84682293,240206,136
-84682294,240342,142
-84682295,240484,157
-84682296,240641,160
-84682297,240801,164
-84682298,240965,164
-84682299,241129,144
-84682300,241273,168
-84682301,241441,130
-84682302,241571,204
-84682303,241775,174
-84682304,241949,117
-84682305,242066,229
-84682306,242295,196
-84682307,242491,130
-84682308,242621,157
-84682309,242778,159
-84682310,242937,178
-84682311,243115,196
-84682312,243311,156
-84682313,243467,125
-84682314,243592,136
-84682315,243728,104
-84682316,243832,147
-84682317,243979,179
-84682318,244158,136
-84682319,244294,165
-84682320,244459,153
-84682321,244612,110
-84682322,244722,129
-84682323,244851,135
-84682324,244986,146
-84682325,245132,172
-84682326,245304,195
-84682327,245499,160
-84682328,245659,118
-84682329,245777,166
-84682330,245943,123
-84682331,246066,137
-84682332,246203,111
-84682333,246314,164
-84682334,246478,114
-84682335,246592,138
-84682336,246730,152
-84682337,246882,116
-84682338,246998,223
-84682339,247221,151
-84682340,247372,148
-84682341,247520,147
-84682342,247667,158
-84682343,247825,181
-84682344,248006,139
-84682345,248145,172
-84682346,248317,257
-84682347,248574,156
-84682348,248730,109
-84682349,248839,144
-84682350,248983,149
-84682351,249132,117
-84682352,249249,135
-84682353,249384,154
-84682354,249538,136
-84682355,249674,151
-84682356,249825,201
-84682357,250026,161
-84682358,250187,113
-84682359,250300,130
-84682360,250430,96
-84682361,250526,169
-84682362,250695,108
-84682363,250803,148
-84682364,250951,166
-84682365,251117,141
-84682366,251258,148
-84682367,251406,157
-84682368,251563,191
-84682369,251754,175
-84682370,251929,126
-84682371,252055,158
-84682372,252213,194
-84682373,252407,121
-84682374,252528,165
-84682375,252693,168
-84682376,252861,150
-84682377,253011,146
-84682378,253157,207
-84682379,253364,129
-84682380,253493,144
-84682381,253637,149
-84682382,253786,108
-84682383,253894,132
-84682384,254026,191
-84682385,254217,151
-84682386,254368,161
-84682387,254529,137
-84682388,254666,125
-84682389,254791,162
-84682390,254953,150
-84682391,255103,140
-84682392,255243,153
-84682393,255396,173
-84682394,255569,155
-84682395,255724,153
-84682396,255877,143
-84682397,256020,177
-84682398,256197,103
-84682399,256300,132
-84682400,256432,123
-84682401,256555,166
-84682402,256721,155
-84682403,256876,156
-84682404,257032,134
-84682405,257166,172
-84682406,257338,184
-84682407,257522,167
-84682408,257689,168
-84682409,257857,180
-84682410,258037,191
-84682411,258228,152
-84682412,258380,140
-84682413,258520,149
-84682414,258669,117
-84682415,258786,130
-84682416,258916,211
-84682417,259127,138
-84682418,259265,120
-84682419,259385,154
-84682420,259539,116
-84682421,259655,149
-84682422,259804,134
-84682423,259938,174
-84682424,260112,138
-84682425,260250,124
-84682426,260374,219
-84682427,260593,125
-84682428,260718,160
-84682429,260878,116
-84682430,260994,142
-84682431,261136,120
-84682432,261256,168
-84682433,261424,130
-84682434,261554,173
-84682435,261727,163
-84682436,261890,132
-84682437,262022,143
-84682438,262165,182
-84682439,262347,160
-84682440,262507,187
-84682441,262694,135
-84682442,262829,145
-84682443,262974,142
-84682444,263116,162
-84682445,263278,109
-84682446,263387,153
-84682447,263540,118
-84682448,263658,133
-84682449,263791,168
-84682450,263959,163
-84682451,264122,194
-84682452,264316,160
-84682453,264476,148
-84682454,264624,162
-84682455,264786,162
-84682456,264948,159
-84682457,265107,120
-84682458,265227,147
-84682459,265374,158
-84682460,265532,175
-84682461,265707,146
-84682462,265853,184
-84682463,266037,129
-84682464,266166,153
-84682465,266319,182
-84682466,266501,160
-84682467,266661,114
-84682468,266775,104
-84682469,266879,163
-84682470,267042,132
-84682471,267174,190
-84682472,267364,120
-84682473,267484,205
-84682474,267689,145
-84682475,267834,146
-84682476,267980,192
-84682477,268172,156
-84682478,268328,166
-84682479,268494,169
-84682480,268663,176
-84682481,268839,116
-84682482,268955,163
-84682483,269118,129
-84682484,269247,173
-84682485,269420,149
-84682486,269569,111
-84682487,269680,205
-84682488,269885,152
-84682489,270037,138
-84682490,270175,129
-84682491,270304,113
-84682492,270417,123
-84682493,270540,148
-84682494,270688,123
-84682495,270811,167
-84682496,270978,131
-84682497,271109,139
-84682498,271248,124
-84682499,271372,160
-84682500,271532,170
-84682501,271702,120
-84682502,271822,218
-84682503,272040,131
-84682504,272171,129
-84682505,272300,161
-84682506,272461,162
-84682507,272623,209
-84682508,272832,111
-84682509,272943,135
-84682510,273078,140
-84682511,273218,142
-84682512,273360,194
-84682513,273554,132
-84682514,273686,117
-84682515,273803,180
-84682516,273983,143
-84682517,274126,153
-84682518,274279,138
-84682519,274417,150
-84682520,274567,132
-84682521,274699,134
-84682522,274833,184
-84682523,275017,162
-84682524,275179,128
-84682525,275307,123
-84682526,275430,169
-84682527,275599,128
-84682528,275727,179
-84682529,275906,160
-84682530,276066,155
-84682531,276221,146
-84682532,276367,170
-84682533,276537,172
-84682534,276709,131
-84682535,276840,148
-84682536,276988,165
-84682537,277153,150
-84682538,277303,160
-84682539,277463,161
-84682540,277624,187
-84682541,277811,178
-84682542,277989,148
-84682543,278137,152
-84682544,278289,167
-84682545,278456,164
-84682546,278620,140
-84682547,278760,151
-84682548,278911,145
-84682549,279056,149
-84682550,279205,109
-84682551,279314,145
-84682552,279459,199
-84682553,279658,144
-84682554,279802,119
-84682555,279921,186
-84682556,280107,134
-84682557,280241,120
-84682558,280361,154
-84682559,280515,137
-84682560,280652,192
-84682561,280844,166
-84682562,281010,149
-84682563,281159,132
-84682564,281291,176
-84682565,281467,125
-84682566,281592,149
-84682567,281741,144
-84682568,281885,138
-84682569,282023,145
-84682570,282168,160
-84682571,282328,172
-84682572,282500,148
-84682573,282648,173
-84682574,282821,129
-84682575,282950,175
-84682576,283125,211
-84682577,283336,171
-84682578,283507,112
-84682579,283619,158
-84682580,283777,155
-84682581,283932,132
-84682582,284064,160
-84682583,284224,188
-84682584,284412,130
-84682585,284542,164
-84682586,284706,138
-84682587,284844,130
-84682588,284974,179
-84682589,285153,147
-84682590,285300,149
-84682591,285449,177
-84682592,285626,173
-84682593,285799,131
-84682594,285930,198
-84682595,286128,138
-84682596,286266,146
-84682597,286412,159
-84682598,286571,173
-84682599,286744,125
-84682600,286869,183
-84682601,287052,117
-84682602,287169,142
-84682603,287311,200
-84682604,287511,149
-84682605,287660,177
-84682606,287837,133
-84682607,287970,164
-84682608,288134,147
-84682609,288281,155
-84682610,288436,162
-84682611,288598,182
-84682612,288780,129
-84682613,288909,153
-84682614,289062,188
-84682615,289250,131
-84682616,289381,160
-84682617,289541,125
-84682618,289666,131
-84682619,289797,161
-84682620,289958,123
-84682621,290081,142
-84682622,290223,144
-84682623,290367,135
-84682624,290502,162
-84682625,290664,155
-84682626,290819,157
-84682627,290976,150
-84682628,291126,141
-84682629,291267,161
-84682630,291428,139
-84682631,291567,192
-84682632,291759,152
-84682633,291911,203
-84682634,292114,180
-84682635,292294,137
-84682636,292431,148
-84682637,292579,130
-84682638,292709,140
-84682639,292849,130
-84682640,292979,202
-84682641,293181,195
-84682642,293376,176
-84682643,293552,141
-84682644,293693,163
-84682645,293856,149
-84682646,294005,147
-84682647,294152,161
-84682648,294313,140
-84682649,294453,121
-84682650,294574,129
-84682651,294703,152
-84682652,294855,147
-84682653,295002,128
-84682654,295130,163
-84682655,295293,128
-84682656,295421,152
-84682657,295573,143
-84682658,295716,156
-84682659,295872,293
-84682660,296165,166
-84682661,296331,161
-84682662,296492,169
-84682663,296661,197
-84682664,296858,188
-84682665,297046,159
-84682666,297205,131
-84682667,297336,178
-84682668,297514,168
-84682669,297682,140
-84682670,297822,141
-84682671,297963,143
-84682672,298106,113
-84682673,298219,131
-84682674,298350,157
-84682675,298507,134
-84682676,298641,138
-84682677,298779,160
-84682678,298939,144
-84682679,299083,128
-84682680,299211,169
-84682681,299380,165
-84682682,299545,157
-84682683,299702,167
-84682684,299869,119
-84682685,299988,177
-84682686,300165,171
-84682687,300336,128
-84682688,300464,184
-84682689,300648,171
-84682690,300819,162
-84682691,300981,144
-84682692,301125,118
-84682693,301243,156
-84682694,301399,132
-84682695,301531,140
-84682696,301671,123
-84682697,301794,186
-84682698,301980,153
-84682699,302133,163
-84682700,302296,127
-84682701,302423,188
-84682702,302611,146
-84682703,302757,194
-84682704,302951,132
-84682705,303083,158
-84682706,303241,123
-84682707,303364,160
-84682708,303524,149
-84682709,303673,146
-84682710,303819,186
-84682711,304005,129
-84682712,304134,118
-84682713,304252,164
-84682714,304416,176
-84682715,304592,152
-84682716,304744,122
-84682717,304866,137
-84682718,305003,197
-84682719,305200,57
-84682720,305257,149
-84682721,305406,152
-84682722,305558,148
-84682723,305706,179
-84682724,305885,193
-84682725,306078,141
-84682726,306219,153
-84682727,306372,147
-84682728,306519,199
-84682729,306718,129
-84682730,306847,172
-84682731,307019,220
-84682732,307239,147
-84682733,307386,156
-84682734,307542,123
-84682735,307665,126
-84682736,307791,163
-84682737,307954,140
-84682738,308094,168
-84682739,308262,139
-84682740,308401,152
-84682741,308553,139
-84682742,308692,148
-84682743,308840,104
-84682744,308944,212
-84682745,309156,147
-84682746,309303,128
-84682747,309431,146
-84682748,309577,145
-84682749,309722,109
-84682750,309831,154
-84682751,309985,272
-84682752,310257,161
-84682753,310418,117
-84682754,310535,57
-84682755,310592,184
-84682756,310776,162
-84682757,310938,152
-84682758,311090,116
-84682759,311206,133
-84682760,311339,144
-84682761,311483,143
-84682762,311626,157
-84682763,311783,136
-84682764,311919,195
-84682765,312114,150
-84682766,312264,148
-84682767,312412,143
-84682768,312555,180
-84682769,312735,200
-84682770,312935,120
-84682771,313055,154
-84682772,313209,113
-84682773,313322,174
-84682774,313496,150
-84682775,313646,167
-84682776,313813,134
-84682777,313947,122
-84682778,314069,131
-84682779,314200,203
-84682780,314403,116
-84682781,314519,187
-84682782,314706,126
-84682783,314832,143
-84682784,314975,127
-84682785,315102,144
-84682786,315246,190
-84682787,315436,150
-84682788,315586,122
-84682789,315708,189
-84682790,315897,156
-84682791,316053,140
-84682792,316193,153
-84682793,316346,145
-84682794,316491,155
-84682795,316646,139
-84682796,316785,135
-84682797,316920,124
-84682798,317044,131
-84682799,317175,174
-84682800,317349,169
-84682801,317518,155
-84682802,317673,145
-84682803,317818,134
-84682804,317952,137
-84682805,318089,176
-84682806,318265,172
-84682807,318437,123
-84682808,318560,218
-84682809,318778,162
-84682810,318940,162
-84682811,319102,126
-84682812,319228,151
-84682813,319379,119
-84682814,319498,132
-84682815,319630,165
-84682816,319795,185
-84682817,319980,187
-84682818,320167,144
-84682819,320311,163
-84682820,320474,192
-84682821,320666,156
-84682822,320822,175
-84682823,320997,173
-84682824,321170,248
-84682825,321418,166
-84682826,321584,187
-84682827,321771,201
-84682828,321972,156
-84682829,322128,105
-84682830,322233,156
-84682831,322389,147
-84682832,322536,147
-84682833,322683,188
-84682834,322871,175
-84682835,323046,165
-84682836,323211,157
-84682837,323368,140
-84682838,323508,138
-84682839,323646,120
-84682840,323766,154
-84682841,323920,124
-84682842,324044,125
-84682843,324169,140
-84682844,324309,123
-84682845,324432,165
-84682846,324597,148
-84682847,324745,190
-84682848,324935,139
-84682849,325074,159
-84682850,325233,126
-84682851,325359,149
-84682852,325508,175
-84682853,325683,173
-84682854,325856,148
-84682855,326004,135
-84682856,326139,139
-84682857,326278,172
-84682858,326450,163
-84682859,326613,169
-84682860,326782,157
-84682861,326939,155
-84682862,327094,177
-84682863,327271,131
-84682864,327402,146
-84682865,327548,178
-84682866,327726,156
-84682867,327882,191
-84682868,328073,158
-84682869,328231,159
-84682870,328390,178
-84682871,328568,148
-84682872,328716,208
-84682873,328924,131
-84682874,329055,150
-84682875,329205,161
-84682876,329366,134
-84682877,329500,172
-84682878,329672,149
-84682879,329821,160
-84682880,329981,162
-84682881,330143,173
-84682882,330316,149
-84682883,330465,192
-84682884,330657,133
-84682885,330790,165
-84682886,330955,148
-84682887,331103,186
-84682888,331289,160
-84682889,331449,155
-84682890,331604,165
-84682891,331769,173
-84682892,331942,133
-84682893,332075,180
-84682894,332255,147
-84682895,332402,142
-84682896,332544,160
-84682897,332704,185
-84682898,332889,124
-84682899,333013,147
-84682900,333160,136
-84682901,333296,187
-84682902,333483,135
-84682903,333618,152
-84682904,333770,176
-84682905,333946,159
-84682906,334105,171
-84682907,334276,170
-84682908,334446,164
-84682909,334610,142
-84682910,334752,140
-84682911,334892,174
-84682912,335066,184
-84682913,335250,149
-84682914,335399,186
-84682915,335585,123
-84682916,335708,168
-84682917,335876,136
-84682918,336012,108
-84682919,336120,111
-84682920,336231,159
-84682921,336390,206
-84682922,336596,154
-84682923,336750,159
-84682924,336909,128
-84682925,337037,168
-84682926,337205,219
-84682927,337424,120
-84682928,337544,154
-84682929,337698,175
-84682930,337873,141
-84682931,338014,143
-84682932,338157,123
-84682933,338280,139
-84682934,338419,185
-84682935,338604,163
-84682936,338767,165
-84682937,338932,135
-84682938,339067,124
-84682939,339191,151
-84682940,339342,144
-84682941,339486,158
-84682942,339644,195
-84682943,339839,173
-84682944,340012,123
-84682945,340135,149
-84682946,340284,171
-84682947,340455,143
-84682948,340598,245
-84682949,340843,178
-84682950,341021,204
-84682951,341225,137
-84682952,341362,207
-84682953,341569,177
-84682954,341746,145
-84682955,341891,139
-84682956,342030,152
-84682957,342182,168
-84682958,342350,165
-84682959,342515,123
-84682960,342638,148
-84682961,342786,136
-84682962,342922,130
-84682963,343052,120
-84682964,343172,190
-84682965,343362,140
-84682966,343502,181
-84682967,343683,144
-84682968,343827,174
-84682969,344001,214
-84682970,344215,141
-84682971,344356,236
-84682972,344592,164
-84682973,344756,112
-84682974,344868,129
-84682975,344997,166
-84682976,345163,260
-84682977,345423,142
-84682978,345565,152
-84682979,345717,153
-84682980,345870,195
-84682981,346065,132
-84682982,346197,143
-84682983,346340,135
-84682984,346475,147
-84682985,346622,112
-84682986,346734,131
-84682987,346865,160
-84682988,347025,151
-84682989,347176,157
-84682990,347333,118
-84682991,347451,161
-84682992,347612,57
-84682993,347669,201
-84682994,347870,141
-84682995,348011,155
-84682996,348166,136
-84682997,348302,107
-84682998,348409,147
-84682999,348556,163
-84683000,348719,139
-84683001,348858,173
-84683002,349031,132
-84683003,349163,151
-84683004,349314,153
-84683005,349467,211
-84683006,349678,131
-84683007,349809,122
-84683008,349931,147
-84683009,350078,170
-84683010,350248,197
-84683011,350445,174
-84683012,350619,134
-84683013,350753,157
-84683014,350910,106
-84683015,351016,144
-84683016,351160,137
-84683017,351297,148
-84683018,351445,168
-84683019,351613,121
-84683020,351734,123
-84683021,351857,149
-84683022,352006,159
-84683023,352165,154
-84683024,352319,152
-84683025,352471,137
-84683026,352608,172
-84683027,352780,182
-84683028,352962,116
-84683029,353078,136
-84683030,353214,150
-84683031,353364,146
-84683032,353510,165
-84683033,353675,133
-84683034,353808,151
-84683035,353959,166
-84683036,354125,110
-84683037,354235,168
-84683038,354403,129
-84683039,354532,187
-84683040,354719,155
-84683041,354874,156
-84683042,355030,139
-84683043,355169,138
-84683044,355307,174
-84683045,355481,139
-84683046,355620,163
-84683047,355783,172
-84683048,355955,131
-84683049,356086,169
-84683050,356255,125
-84683051,356380,172
-84683052,356552,141
-84683053,356693,143
-84683054,356836,171
-84683055,357007,159
-84683056,357166,183
-84683057,357349,240
-84683058,357589,162
-84683059,357751,148
-84683060,357899,132
-84683061,358031,126
-84683062,358157,149
-84683063,358306,106
-84683064,358412,173
-84683065,358585,160
-84683066,358745,165
-84683067,358910,146
-84683068,359056,156
-84683069,359212,192
-84683070,359404,181
-84683071,359585,160
-84683072,359745,170
-84683073,359915,104
-84683074,360019,139
-84683075,360158,211
-84683076,360369,123
-84683077,360492,171
-84683078,360663,154
-84683079,360817,141
-84683080,360958,166
-84683081,361124,123
-84683082,361247,131
-84683083,361378,163
-84683084,361541,132
-84683085,361673,159
-84683086,361832,185
-84683087,362017,126
-84683088,362143,156
-84683089,362299,136
-84683090,362435,132
-84683091,362567,122
-84683092,362689,159
-84683093,362848,149
-84683094,362997,129
-84683095,363126,158
-84683096,363284,160
-84683097,363444,109
-84683098,363553,120
-84683099,363673,135
-84683100,363808,170
-84683101,363978,165
-84683102,364143,148
-84683103,364291,180
-84683104,364471,172
-84683105,364643,202
-84683106,364845,136
-84683107,364981,126
-84683108,365107,130
-84683109,365237,195
-84683110,365432,137
-84683111,365569,161
-84683112,365730,139
-84683113,365869,170
-84683114,366039,169
-84683115,366208,203
-84683116,366411,140
-84683117,366551,183
-84683118,366734,159
-84683119,366893,135
-84683120,367028,168
-84683121,367196,119
-84683122,367315,172
-84683123,367487,125
-84683124,367612,139
-84683125,367751,176
-84683126,367927,216
-84683127,368143,148
-84683128,368291,165
-84683129,368456,167
-84683130,368623,188
-84683131,368811,130
-84683132,368941,158
-84683133,369099,174
-84683134,369273,142
-84683135,369415,126
-84683136,369541,160
-84683137,369701,141
-84683138,369842,162
-84683139,370004,147
-84683140,370151,151
-84683141,370302,155
-84683142,370457,128
-84683143,370585,224
-84683144,370809,155
-84683145,370964,144
-84683146,371108,167
-84683147,371275,169
-84683148,371444,134
-84683149,371578,136
-84683150,371714,153
-84683151,371867,133
-84683152,372000,139
-84683153,372139,153
-84683154,372292,171
-84683155,372463,210
-84683156,372673,133
-84683157,372806,200
-84683158,373006,153
-84683159,373159,139
-84683160,373298,159
-84683161,373457,175
-84683162,373632,123
-84683163,373755,138
-84683164,373893,149
-84683165,374042,128
-84683166,374170,154
-84683167,374324,140
-84683168,374464,150
-84683169,374614,119
-84683170,374733,127
-84683171,374860,139
-84683172,374999,154
-84683173,375153,143
-84683174,375296,119
-84683175,375415,149
-84683176,375564,111
-84683177,375675,186
-84683178,375861,152
-84683179,376013,145
-84683180,376158,147
-84683181,376305,186
-84683182,376491,144
-84683183,376635,145
-84683184,376780,115
-84683185,376895,132
-84683186,377027,122
-84683187,377149,139
-84683188,377288,157
-84683189,377445,122
-84683190,377567,154
-84683191,377721,157
-84683192,377878,152
-84683193,378030,214
-84683194,378244,143
-84683195,378387,137
-84683196,378524,166
-84683197,378690,164
-84683198,378854,163
-84683199,379017,157
-84683200,379174,167
-84683201,379341,120
-84683202,379461,177
-84683203,379638,202
-84683204,379840,135
-84683205,379975,136
-84683206,380111,135
-84683207,380246,130
-84683208,380376,130
-84683209,380506,175
-84683210,380681,133
-84683211,380814,118
-84683212,380932,180
-84683213,381112,132
-84683214,381244,144
-84683215,381388,149
-84683216,381537,205
-84683217,381742,146
-84683218,381888,148
-84683219,382036,165
-84683220,382201,129
-84683221,382330,126
-84683222,382456,163
-84683223,382619,122
-84683224,382741,227
-84683225,382968,148
-84683226,383116,129
-84683227,383245,134
-84683228,383379,182
-84683229,383561,136
-84683230,383697,117
-84683231,383814,142
-84683232,383956,129
-84683233,384085,149
-84683234,384234,172
-84683235,384406,151
-84683236,384557,133
-84683237,384690,152
-84683238,384842,178
-84683239,385020,147
-84683240,385167,176
-84683241,385343,151
-84683242,385494,164
-84683243,385658,161
-84683244,385819,118
-84683245,385937,116
-84683246,386053,182
-84683247,386235,136
-84683248,386371,142
-84683249,386513,134
-84683250,386647,139
-84683251,386786,149
-84683252,386935,124
-84683253,387059,134
-84683254,387193,140
-84683255,387333,130
-84683256,387463,192
-84683257,387655,288
-84683258,387943,200
-84683259,388143,118
-84683260,388261,149
-84683261,388410,153
-84683262,388563,247
-84683263,388810,140
-84683264,388950,152
-84683265,389102,181
-84683266,389283,155
-84683267,389438,144
-84683268,389582,104
-84683269,389686,132
-84683270,389818,157
-84683271,389975,142
-84683272,390117,149
-84683273,390266,186
-84683274,390452,131
-84683275,390583,168
-84683276,390751,159
-84683277,390910,146
-84683278,391056,135
-84683279,391191,154
-84683280,391345,166
-84683281,391511,151
-84683282,391662,139
-84683283,391801,146
-84683284,391947,218
-84683285,392165,167
-84683286,392332,170
-84683287,392502,219
-84683288,392721,160
-84683289,392881,154
-84683290,393035,152
-84683291,393187,167
-84683292,393354,132
-84683293,393486,160
-84683294,393646,158
-84683295,393804,165
-84683296,393969,157
-84683297,394126,122
-84683298,394248,267
-84683299,394515,136
-84683300,394651,129
-84683301,394780,148
-84683302,394928,135
-84683303,395063,129
-84683304,395192,188
-84683305,395380,149
-84683306,395529,145
-84683307,395674,164
-84683308,395838,149
-84683309,395987,153
-84683310,396140,146
-84683311,396286,152
-84683312,396438,124
-84683313,396562,141
-84683314,396703,158
-84683315,396861,161
-84683316,397022,138
-84683317,397160,156
-84683318,397316,212
-84683319,397528,157
-84683320,397685,151
-84683321,397836,188
-84683322,398024,137
-84683323,398161,130
-84683324,398291,170
-84683325,398461,113
-84683326,398574,153
-84683327,398727,164
-84683328,398891,153
-84683329,399044,160
-84683330,399204,150
-84683331,399354,130
-84683332,399484,147
-84683333,399631,128
-84683334,399759,141
-84683335,399900,158
-84683336,400058,152
-84683337,400210,141
-84683338,400351,128
-84683339,400479,175
-84683340,400654,136
-84683341,400790,136
-84683342,400926,158
-84683343,401084,148
-84683344,401232,157
-84683345,401389,154
-84683346,401543,145
-84683347,401688,126
-84683348,401814,234
-84683349,402048,171
-84683350,402219,140
-84683351,402359,148
-84683352,402507,147
-84683353,402654,146
-84683354,402800,111
-84683355,402911,159
-84683356,403070,172
-84683357,403242,129
-84683358,403371,198
-84683359,403569,134
-84683360,403703,189
-84683361,403892,121
-84683362,404013,152
-84683363,404165,147
-84683364,404312,139
-84683365,404451,156
-84683366,404607,119
-84683367,404726,161
-84683368,404887,161
-84683369,405048,169
-84683370,405217,133
-84683371,405350,139
-84683372,405489,177
-84683373,405666,143
-84683374,405809,180
-84683375,405989,148
-84683376,406137,192
-84683377,406329,127
-84683378,406456,149
-84683379,406605,191
-84683380,406796,170
-84683381,406966,164
-84683382,407130,177
-84683383,407307,139
-84683384,407446,139
-84683385,407585,138
-84683386,407723,201
-84683387,407924,192
-84683388,408116,166
-84683389,408282,135
-84683390,408417,185
-84683391,408602,159
-84683392,408761,103
-84683393,408864,148
-84683394,409012,143
-84683395,409155,149
-84683396,409304,157
-84683397,409461,131
-84683398,409592,115
-84683399,409707,153
-84683400,409860,103
-84683401,409963,188
-84683402,410151,154
-84683403,410305,115
-84683404,410420,125
-84683405,410545,170
-84683406,410715,179
-84683407,410894,138
-84683408,411032,137
-84683409,411169,193
-84683410,411362,129
-84683411,411491,160
-84683412,411651,133
-84683413,411784,255
-84683414,412039,130
-84683415,412169,142
-84683416,412311,159
-84683417,412470,136
-84683418,412606,148
-84683419,412754,152
-84683420,412906,180
-84683421,413086,144
+84681210,75388,142
+84681211,75530,147
+84681212,75677,132
+84681213,75809,133
+84681214,75942,187
+84681215,76129,227
+84681216,76356,183
+84681217,76539,119
+84681218,76658,132
+84681219,76790,57
+84681220,76847,155
+84681221,77002,119
+84681222,77121,143
+84681223,77264,244
+84681224,77508,143
+84681225,77651,152
+84681226,77803,140
+84681227,77943,128
+84681228,78071,228
+84681229,78299,172
+84681230,78471,161
+84681231,78632,139
+84681232,78771,167
+84681233,78938,221
+84681234,79159,179
+84681235,79338,128
+84681236,79466,156
+84681237,79622,123
+84681238,79745,147
+84681239,79892,156
+84681240,80048,194
+84681241,80242,161
+84681242,80403,150
+84681243,80553,194
+84681244,80747,163
+84681245,80910,176
+84681246,81086,175
+84681247,81261,169
+84681248,81430,152
+84681249,81582,145
+84681250,81727,132
+84681251,81859,148
+84681252,82007,132
+84681253,82139,145
+84681254,82284,130
+84681255,82414,159
+84681256,82573,184
+84681257,82757,152
+84681258,82909,134
+84681259,83043,185
+84681260,83228,150
+84681261,83378,117
+84681262,83495,147
+84681263,83642,141
+84681264,83783,182
+84681265,83965,152
+84681266,84117,111
+84681267,84228,180
+84681268,84408,152
+84681269,84560,186
+84681270,84746,142
+84681271,84888,164
+84681272,85052,147
+84681273,85199,142
+84681274,85341,157
+84681275,85498,129
+84681276,85627,152
+84681277,85779,153
+84681278,85932,137
+84681279,86069,141
+84681280,86210,147
+84681281,86357,161
+84681282,86518,125
+84681283,86643,134
+84681284,86777,121
+84681285,86898,169
+84681286,87067,104
+84681287,87171,196
+84681288,87367,183
+84681289,87550,170
+84681290,87720,146
+84681291,87866,140
+84681292,88006,137
+84681293,88143,141
+84681294,88284,190
+84681295,88474,126
+84681296,88600,147
+84681297,88747,141
+84681298,88888,138
+84681299,89026,148
+84681300,89174,161
+84681301,89335,204
+84681302,89539,163
+84681303,89702,138
+84681304,89840,166
+84681305,90006,137
+84681306,90143,151
+84681307,90294,145
+84681308,90439,167
+84681309,90606,119
+84681310,90725,164
+84681311,90889,185
+84681312,91074,133
+84681313,91207,135
+84681314,91342,201
+84681315,91543,156
+84681316,91699,149
+84681317,91848,135
+84681318,91983,138
+84681319,92121,180
+84681320,92301,140
+84681321,92441,152
+84681322,92593,131
+84681323,92724,187
+84681324,92911,187
+84681325,93098,173
+84681326,93271,130
+84681327,93401,160
+84681328,93561,164
+84681329,93725,158
+84681330,93883,142
+84681331,94025,212
+84681332,94237,153
+84681333,94390,175
+84681334,94565,155
+84681335,94720,141
+84681336,94861,120
+84681337,94981,143
+84681338,95124,130
+84681339,95254,122
+84681340,95376,134
+84681341,95510,137
+84681342,95647,143
+84681343,95790,184
+84681344,95974,135
+84681345,96109,127
+84681346,96236,106
+84681347,96342,166
+84681348,96508,117
+84681349,96625,151
+84681350,96776,124
+84681351,96900,214
+84681352,97114,173
+84681353,97287,129
+84681354,97416,144
+84681355,97560,189
+84681356,97749,154
+84681357,97903,108
+84681358,98011,135
+84681359,98146,182
+84681360,98328,125
+84681361,98453,130
+84681362,98583,129
+84681363,98712,122
+84681364,98834,126
+84681365,98960,165
+84681366,99125,118
+84681367,99243,115
+84681368,99358,136
+84681369,99494,119
+84681370,99613,157
+84681371,99770,147
+84681372,99917,151
+84681373,100068,157
+84681374,100225,190
+84681375,100415,152
+84681376,100567,173
+84681377,100740,137
+84681378,100877,113
+84681379,100990,164
+84681380,101154,156
+84681381,101310,161
+84681382,101471,161
+84681383,101632,173
+84681384,101805,123
+84681385,101928,173
+84681386,102101,126
+84681387,102227,190
+84681388,102417,151
+84681389,102568,143
+84681390,102711,177
+84681391,102888,179
+84681392,103067,177
+84681393,103244,57
+84681394,103301,138
+84681395,103439,147
+84681396,103586,157
+84681397,103743,177
+84681398,103920,115
+84681399,104035,148
+84681400,104183,168
+84681401,104351,155
+84681402,104506,172
+84681403,104678,181
+84681404,104859,143
+84681405,105002,152
+84681406,105154,168
+84681407,105322,134
+84681408,105456,157
+84681409,105613,220
+84681410,105833,157
+84681411,105990,155
+84681412,106145,177
+84681413,106322,126
+84681414,106448,185
+84681415,106633,146
+84681416,106779,106
+84681417,106885,141
+84681418,107026,176
+84681419,107202,157
+84681420,107359,145
+84681421,107504,158
+84681422,107662,161
+84681423,107823,197
+84681424,108020,138
+84681425,108158,162
+84681426,108320,152
+84681427,108472,172
+84681428,108644,218
+84681429,108862,111
+84681430,108973,142
+84681431,109115,167
+84681432,109282,142
+84681433,109424,57
+84681434,109481,145
+84681435,109626,182
+84681436,109808,146
+84681437,109954,177
+84681438,110131,143
+84681439,110274,134
+84681440,110408,151
+84681441,110559,157
+84681442,110716,167
+84681443,110883,148
+84681444,111031,109
+84681445,111140,161
+84681446,111301,114
+84681447,111415,151
+84681448,111566,157
+84681449,111723,145
+84681450,111868,125
+84681451,111993,133
+84681452,112126,214
+84681453,112340,159
+84681454,112499,172
+84681455,112671,140
+84681456,112811,145
+84681457,112956,138
+84681458,113094,136
+84681459,113230,154
+84681460,113384,179
+84681461,113563,162
+84681462,113725,164
+84681463,113889,123
+84681464,114012,141
+84681465,114153,123
+84681466,114276,159
+84681467,114435,205
+84681468,114640,159
+84681469,114799,157
+84681470,114956,121
+84681471,115077,144
+84681472,115221,140
+84681473,115361,175
+84681474,115536,185
+84681475,115721,162
+84681476,115883,137
+84681477,116020,149
+84681478,116169,172
+84681479,116341,171
+84681480,116512,114
+84681481,116626,167
+84681482,116793,146
+84681483,116939,149
+84681484,117088,122
+84681485,117210,116
+84681486,117326,136
+84681487,117462,166
+84681488,117628,171
+84681489,117799,128
+84681490,117927,175
+84681491,118102,148
+84681492,118250,151
+84681493,118401,140
+84681494,118541,119
+84681495,118660,160
+84681496,118820,158
+84681497,118978,169
+84681498,119147,164
+84681499,119311,108
+84681500,119419,137
+84681501,119556,150
+84681502,119706,136
+84681503,119842,152
+84681504,119994,139
+84681505,120133,162
+84681506,120295,184
+84681507,120479,133
+84681508,120612,121
+84681509,120733,183
+84681510,120916,134
+84681511,121050,137
+84681512,121187,191
+84681513,121378,118
+84681514,121496,158
+84681515,121654,167
+84681516,121821,239
+84681517,122060,151
+84681518,122211,174
+84681519,122385,128
+84681520,122513,131
+84681521,122644,155
+84681522,122799,166
+84681523,122965,149
+84681524,123114,149
+84681525,123263,138
+84681526,123401,178
+84681527,123579,129
+84681528,123708,110
+84681529,123818,143
+84681530,123961,175
+84681531,124136,144
+84681532,124280,119
+84681533,124399,194
+84681534,124593,156
+84681535,124749,120
+84681536,124869,116
+84681537,124985,152
+84681538,125137,158
+84681539,125295,222
+84681540,125517,141
+84681541,125658,124
+84681542,125782,145
+84681543,125927,124
+84681544,126051,142
+84681545,126193,140
+84681546,126333,167
+84681547,126500,166
+84681548,126666,175
+84681549,126841,178
+84681550,127019,214
+84681551,127233,181
+84681552,127414,179
+84681553,127593,164
+84681554,127757,133
+84681555,127890,163
+84681556,128053,169
+84681557,128222,109
+84681558,128331,146
+84681559,128477,146
+84681560,128623,150
+84681561,128773,142
+84681562,128915,194
+84681563,129109,158
+84681564,129267,117
+84681565,129384,121
+84681566,129505,127
+84681567,129632,130
+84681568,129762,181
+84681569,129943,101
+84681570,130044,135
+84681571,130179,139
+84681572,130318,140
+84681573,130458,121
+84681574,130579,163
+84681575,130742,186
+84681576,130928,129
+84681577,131057,133
+84681578,131190,134
+84681579,131324,139
+84681580,131463,117
+84681581,131580,158
+84681582,131738,149
+84681583,131887,138
+84681584,132025,174
+84681585,132199,144
+84681586,132343,143
+84681587,132486,150
+84681588,132636,175
+84681589,132811,148
+84681590,132959,112
+84681591,133071,121
+84681592,133192,162
+84681593,133354,148
+84681594,133502,138
+84681595,133640,147
+84681596,133787,156
+84681597,133943,144
+84681598,134087,135
+84681599,134222,184
+84681600,134406,133
+84681601,134539,154
+84681602,134693,139
+84681603,134832,140
+84681604,134972,168
+84681605,135140,205
+84681606,135345,166
+84681607,135511,151
+84681608,135662,125
+84681609,135787,136
+84681610,135923,154
+84681611,136077,119
+84681612,136196,125
+84681613,136321,161
+84681614,136482,122
+84681615,136604,112
+84681616,136716,141
+84681617,136857,147
+84681618,137004,160
+84681619,137164,152
+84681620,137316,114
+84681621,137430,135
+84681622,137565,138
+84681623,137703,121
+84681624,137824,167
+84681625,137991,159
+84681626,138150,155
+84681627,138305,150
+84681628,138455,141
+84681629,138596,157
+84681630,138753,189
+84681631,138942,125
+84681632,139067,172
+84681633,139239,108
+84681634,139347,134
+84681635,139481,215
+84681636,139696,192
+84681637,139888,149
+84681638,140037,146
+84681639,140183,180
+84681640,140363,120
+84681641,140483,148
+84681642,140631,180
+84681643,140811,153
+84681644,140964,136
+84681645,141100,240
+84681646,141340,180
+84681647,141520,114
+84681648,141634,189
+84681649,141823,183
+84681650,142006,196
+84681651,142202,136
+84681652,142338,157
+84681653,142495,149
+84681654,142644,148
+84681655,142792,164
+84681656,142956,136
+84681657,143092,143
+84681658,143235,160
+84681659,143395,182
+84681660,143577,129
+84681661,143706,128
+84681662,143834,189
+84681663,144023,199
+84681664,144222,142
+84681665,144364,171
+84681666,144535,150
+84681667,144685,168
+84681668,144853,144
+84681669,144997,171
+84681670,145168,140
+84681671,145308,177
+84681672,145485,147
+84681673,145632,138
+84681674,145770,139
+84681675,145909,145
+84681676,146054,215
+84681677,146269,151
+84681678,146420,165
+84681679,146585,170
+84681680,146755,155
+84681681,146910,127
+84681682,147037,149
+84681683,147186,155
+84681684,147341,201
+84681685,147542,197
+84681686,147739,132
+84681687,147871,163
+84681688,148034,139
+84681689,148173,159
+84681690,148332,150
+84681691,148482,135
+84681692,148617,132
+84681693,148749,118
+84681694,148867,140
+84681695,149007,125
+84681696,149132,125
+84681697,149257,150
+84681698,149407,114
+84681699,149521,177
+84681700,149698,121
+84681701,149819,105
+84681702,149924,117
+84681703,150041,182
+84681704,150223,163
+84681705,150386,164
+84681706,150550,156
+84681707,150706,161
+84681708,150867,144
+84681709,151011,145
+84681710,151156,138
+84681711,151294,207
+84681712,151501,147
+84681713,151648,170
+84681714,151818,137
+84681715,151955,143
+84681716,152098,131
+84681717,152229,180
+84681718,152409,154
+84681719,152563,132
+84681720,152695,123
+84681721,152818,130
+84681722,152948,104
+84681723,153052,145
+84681724,153197,159
+84681725,153356,150
+84681726,153506,160
+84681727,153666,151
+84681728,153817,135
+84681729,153952,150
+84681730,154102,139
+84681731,154241,192
+84681732,154433,187
+84681733,154620,184
+84681734,154804,148
+84681735,154952,121
+84681736,155073,122
+84681737,155195,121
+84681738,155316,177
+84681739,155493,134
+84681740,155627,160
+84681741,155787,184
+84681742,155971,153
+84681743,156124,124
+84681744,156248,154
+84681745,156402,208
+84681746,156610,160
+84681747,156770,153
+84681748,156923,147
+84681749,157070,147
+84681750,157217,131
+84681751,157348,129
+84681752,157477,117
+84681753,157594,115
+84681754,157709,166
+84681755,157875,163
+84681756,158038,159
+84681757,158197,132
+84681758,158329,178
+84681759,158507,131
+84681760,158638,148
+84681761,158786,126
+84681762,158912,159
+84681763,159071,145
+84681764,159216,171
+84681765,159387,151
+84681766,159538,156
+84681767,159694,155
+84681768,159849,128
+84681769,159977,143
+84681770,160120,172
+84681771,160292,163
+84681772,160455,192
+84681773,160647,124
+84681774,160771,154
+84681775,160925,153
+84681776,161078,125
+84681777,161203,146
+84681778,161349,190
+84681779,161539,174
+84681780,161713,123
+84681781,161836,152
+84681782,161988,167
+84681783,162155,139
+84681784,162294,233
+84681785,162527,155
+84681786,162682,124
+84681787,162806,134
+84681788,162940,128
+84681789,163068,176
+84681790,163244,126
+84681791,163370,149
+84681792,163519,233
+84681793,163752,187
+84681794,163939,159
+84681795,164098,164
+84681796,164262,157
+84681797,164419,133
+84681798,164552,124
+84681799,164676,128
+84681800,164804,160
+84681801,164964,144
+84681802,165108,143
+84681803,165251,165
+84681804,165416,189
+84681805,165605,177
+84681806,165782,185
+84681807,165967,126
+84681808,166093,172
+84681809,166265,117
+84681810,166382,135
+84681811,166517,153
+84681812,166670,160
+84681813,166830,166
+84681814,166996,154
+84681815,167150,110
+84681816,167260,120
+84681817,167380,160
+84681818,167540,172
+84681819,167712,151
+84681820,167863,170
+84681821,168033,160
+84681822,168193,188
+84681823,168381,154
+84681824,168535,117
+84681825,168652,139
+84681826,168791,138
+84681827,168929,149
+84681828,169078,162
+84681829,169240,110
+84681830,169350,141
+84681831,169491,168
+84681832,169659,131
+84681833,169790,163
+84681834,169953,126
+84681835,170079,126
+84681836,170205,113
+84681837,170318,161
+84681838,170479,153
+84681839,170632,129
+84681840,170761,160
+84681841,170921,201
+84681842,171122,138
+84681843,171260,157
+84681844,171417,149
+84681845,171566,138
+84681846,171704,125
+84681847,171829,133
+84681848,171962,129
+84681849,172091,165
+84681850,172256,179
+84681851,172435,153
+84681852,172588,120
+84681853,172708,113
+84681854,172821,171
+84681855,172992,146
+84681856,173138,132
+84681857,173270,166
+84681858,173436,163
+84681859,173599,126
+84681860,173725,150
+84681861,173875,159
+84681862,174034,147
+84681863,174181,165
+84681864,174346,128
+84681865,174474,143
+84681866,174617,167
+84681867,174784,152
+84681868,174936,123
+84681869,175059,135
+84681870,175194,143
+84681871,175337,149
+84681872,175486,146
+84681873,175632,123
+84681874,175755,119
+84681875,175874,144
+84681876,176018,156
+84681877,176174,139
+84681878,176313,158
+84681879,176471,193
+84681880,176664,155
+84681881,176819,130
+84681882,176949,182
+84681883,177131,144
+84681884,177275,171
+84681885,177446,136
+84681886,177582,176
+84681887,177758,141
+84681888,177899,194
+84681889,178093,165
+84681890,178258,112
+84681891,178370,159
+84681892,178529,145
+84681893,178674,150
+84681894,178824,190
+84681895,179014,168
+84681896,179182,173
+84681897,179355,151
+84681898,179506,137
+84681899,179643,162
+84681900,179805,156
+84681901,179961,151
+84681902,180112,153
+84681903,180265,105
+84681904,180370,172
+84681905,180542,208
+84681906,180750,126
+84681907,180876,176
+84681908,181052,140
+84681909,181192,167
+84681910,181359,187
+84681911,181546,126
+84681912,181672,190
+84681913,181862,161
+84681914,182023,168
+84681915,182191,128
+84681916,182319,154
+84681917,182473,123
+84681918,182596,152
+84681919,182748,166
+84681920,182914,152
+84681921,183066,156
+84681922,183222,116
+84681923,183338,141
+84681924,183479,170
+84681925,183649,144
+84681926,183793,115
+84681927,183908,146
+84681928,184054,96
+84681929,184150,114
+84681930,184264,158
+84681931,184422,130
+84681932,184552,152
+84681933,184704,118
+84681934,184822,213
+84681935,185035,147
+84681936,185182,168
+84681937,185350,153
+84681938,185503,206
+84681939,185709,159
+84681940,185868,132
+84681941,186000,142
+84681942,186142,145
+84681943,186287,161
+84681944,186448,136
+84681945,186584,196
+84681946,186780,122
+84681947,186902,169
+84681948,187071,151
+84681949,187222,210
+84681950,187432,180
+84681951,187612,150
+84681952,187762,129
+84681953,187891,135
+84681954,188026,168
+84681955,188194,131
+84681956,188325,128
+84681957,188453,143
+84681958,188596,156
+84681959,188752,167
+84681960,188919,131
+84681961,189050,147
+84681962,189197,117
+84681963,189314,147
+84681964,189461,153
+84681965,189614,174
+84681966,189788,228
+84681967,190016,177
+84681968,190193,164
+84681969,190357,150
+84681970,190507,120
+84681971,190627,148
+84681972,190775,146
+84681973,190921,156
+84681974,191077,129
+84681975,191206,123
+84681976,191329,152
+84681977,191481,157
+84681978,191638,161
+84681979,191799,155
+84681980,191954,199
+84681981,192153,143
+84681982,192296,152
+84681983,192448,133
+84681984,192581,144
+84681985,192725,137
+84681986,192862,189
+84681987,193051,154
+84681988,193205,142
+84681989,193347,139
+84681990,193486,113
+84681991,193599,140
+84681992,193739,198
+84681993,193937,187
+84681994,194124,180
+84681995,194304,137
+84681996,194441,212
+84681997,194653,159
+84681998,194812,159
+84681999,194971,160
+84682000,195131,142
+84682001,195273,122
+84682002,195395,158
+84682003,195553,234
+84682004,195787,148
+84682005,195935,172
+84682006,196107,172
+84682007,196279,163
+84682008,196442,146
+84682009,196588,126
+84682010,196714,158
+84682011,196872,175
+84682012,197047,140
+84682013,197187,108
+84682014,197295,165
+84682015,197460,154
+84682016,197614,145
+84682017,197759,141
+84682018,197900,142
+84682019,198042,218
+84682020,198260,140
+84682021,198400,119
+84682022,198519,134
+84682023,198653,116
+84682024,198769,153
+84682025,198922,159
+84682026,199081,156
+84682027,199237,131
+84682028,199368,133
+84682029,199501,184
+84682030,199685,172
+84682031,199857,220
+84682032,200077,163
+84682033,200240,173
+84682034,200413,149
+84682035,200562,195
+84682036,200757,161
+84682037,200918,142
+84682038,201060,168
+84682039,201228,124
+84682040,201352,165
+84682041,201517,149
+84682042,201666,184
+84682043,201850,148
+84682044,201998,125
+84682045,202123,186
+84682046,202309,138
+84682047,202447,138
+84682048,202585,155
+84682049,202740,133
+84682050,202873,195
+84682051,203068,122
+84682052,203190,130
+84682053,203320,204
+84682054,203524,188
+84682055,203712,179
+84682056,203891,144
+84682057,204035,120
+84682058,204155,146
+84682059,204301,108
+84682060,204409,120
+84682061,204529,139
+84682062,204668,164
+84682063,204832,135
+84682064,204967,160
+84682065,205127,170
+84682066,205297,143
+84682067,205440,121
+84682068,205561,156
+84682069,205717,192
+84682070,205909,144
+84682071,206053,180
+84682072,206233,136
+84682073,206369,148
+84682074,206517,143
+84682075,206660,156
+84682076,206816,153
+84682077,206969,135
+84682078,207104,148
+84682079,207252,154
+84682080,207406,147
+84682081,207553,139
+84682082,207692,189
+84682083,207881,115
+84682084,207996,135
+84682085,208131,199
+84682086,208330,188
+84682087,208518,116
+84682088,208634,141
+84682089,208775,199
+84682090,208974,128
+84682091,209102,132
+84682092,209234,179
+84682093,209413,169
+84682094,209582,176
+84682095,209758,123
+84682096,209881,155
+84682097,210036,124
+84682098,210160,174
+84682099,210334,154
+84682100,210488,154
+84682101,210642,133
+84682102,210775,183
+84682103,210958,163
+84682104,211121,169
+84682105,211290,153
+84682106,211443,145
+84682107,211588,118
+84682108,211706,132
+84682109,211838,149
+84682110,211987,129
+84682111,212116,129
+84682112,212245,195
+84682113,212440,123
+84682114,212563,127
+84682115,212690,166
+84682116,212856,137
+84682117,212993,152
+84682118,213145,132
+84682119,213277,128
+84682120,213405,154
+84682121,213559,123
+84682122,213682,131
+84682123,213813,159
+84682124,213972,195
+84682125,214167,120
+84682126,214287,169
+84682127,214456,151
+84682128,214607,160
+84682129,214767,193
+84682130,214960,145
+84682131,215105,110
+84682132,215215,166
+84682133,215381,141
+84682134,215522,152
+84682135,215674,142
+84682136,215816,151
+84682137,215967,190
+84682138,216157,170
+84682139,216327,105
+84682140,216432,144
+84682141,216576,165
+84682142,216741,140
+84682143,216881,153
+84682144,217034,164
+84682145,217198,173
+84682146,217371,158
+84682147,217529,134
+84682148,217663,266
+84682149,217929,209
+84682150,218138,171
+84682151,218309,157
+84682152,218466,118
+84682153,218584,162
+84682154,218746,127
+84682155,218873,253
+84682156,219126,138
+84682157,219264,150
+84682158,219414,139
+84682159,219553,154
+84682160,219707,128
+84682161,219835,144
+84682162,219979,117
+84682163,220096,174
+84682164,220270,155
+84682165,220425,99
+84682166,220524,193
+84682167,220717,196
+84682168,220913,134
+84682169,221047,167
+84682170,221214,148
+84682171,221362,149
+84682172,221511,243
+84682173,221754,165
+84682174,221919,188
+84682175,222107,150
+84682176,222257,147
+84682177,222404,146
+84682178,222550,139
+84682179,222689,127
+84682180,222816,125
+84682181,222941,171
+84682182,223112,167
+84682183,223279,172
+84682184,223451,182
+84682185,223633,191
+84682186,223824,198
+84682187,224022,167
+84682188,224189,136
+84682189,224325,161
+84682190,224486,176
+84682191,224662,128
+84682192,224790,134
+84682193,224924,156
+84682194,225080,118
+84682195,225198,121
+84682196,225319,195
+84682197,225514,163
+84682198,225677,184
+84682199,225861,129
+84682200,225990,132
+84682201,226122,161
+84682202,226283,142
+84682203,226425,143
+84682204,226568,180
+84682205,226748,165
+84682206,226913,139
+84682207,227052,138
+84682208,227190,159
+84682209,227349,166
+84682210,227515,145
+84682211,227660,148
+84682212,227808,198
+84682213,228006,125
+84682214,228131,124
+84682215,228255,144
+84682216,228399,165
+84682217,228564,184
+84682218,228748,161
+84682219,228909,165
+84682220,229074,177
+84682221,229251,164
+84682222,229415,157
+84682223,229572,123
+84682224,229695,139
+84682225,229834,151
+84682226,229985,160
+84682227,230145,134
+84682228,230279,127
+84682229,230406,175
+84682230,230581,175
+84682231,230756,133
+84682232,230889,130
+84682233,231019,143
+84682234,231162,117
+84682235,231279,175
+84682236,231454,141
+84682237,231595,183
+84682238,231778,140
+84682239,231918,171
+84682240,232089,177
+84682241,232266,164
+84682242,232430,130
+84682243,232560,123
+84682244,232683,133
+84682245,232816,130
+84682246,232946,220
+84682247,233166,133
+84682248,233299,166
+84682249,233465,148
+84682250,233613,212
+84682251,233825,197
+84682252,234022,108
+84682253,234130,131
+84682254,234261,193
+84682255,234454,201
+84682256,234655,162
+84682257,234817,154
+84682258,234971,136
+84682259,235107,135
+84682260,235242,145
+84682261,235387,166
+84682262,235553,149
+84682263,235702,170
+84682264,235872,195
+84682265,236067,149
+84682266,236216,171
+84682267,236387,152
+84682268,236539,154
+84682269,236693,146
+84682270,236839,184
+84682271,237023,151
+84682272,237174,175
+84682273,237349,140
+84682274,237489,145
+84682275,237634,144
+84682276,237778,134
+84682277,237912,123
+84682278,238035,166
+84682279,238201,182
+84682280,238383,136
+84682281,238519,185
+84682282,238704,138
+84682283,238842,157
+84682284,238999,135
+84682285,239134,134
+84682286,239268,133
+84682287,239401,97
+84682288,239498,150
+84682289,239648,131
+84682290,239779,131
+84682291,239910,143
+84682292,240053,152
+84682293,240205,136
+84682294,240341,142
+84682295,240483,157
+84682296,240640,160
+84682297,240800,164
+84682298,240964,164
+84682299,241128,144
+84682300,241272,168
+84682301,241440,130
+84682302,241570,204
+84682303,241774,174
+84682304,241948,117
+84682305,242065,229
+84682306,242294,196
+84682307,242490,130
+84682308,242620,157
+84682309,242777,159
+84682310,242936,178
+84682311,243114,196
+84682312,243310,156
+84682313,243466,125
+84682314,243591,136
+84682315,243727,104
+84682316,243831,147
+84682317,243978,179
+84682318,244157,136
+84682319,244293,165
+84682320,244458,153
+84682321,244611,110
+84682322,244721,129
+84682323,244850,135
+84682324,244985,146
+84682325,245131,172
+84682326,245303,195
+84682327,245498,160
+84682328,245658,118
+84682329,245776,166
+84682330,245942,123
+84682331,246065,137
+84682332,246202,111
+84682333,246313,164
+84682334,246477,114
+84682335,246591,138
+84682336,246729,152
+84682337,246881,116
+84682338,246997,223
+84682339,247220,151
+84682340,247371,148
+84682341,247519,147
+84682342,247666,158
+84682343,247824,181
+84682344,248005,139
+84682345,248144,172
+84682346,248316,257
+84682347,248573,156
+84682348,248729,109
+84682349,248838,144
+84682350,248982,149
+84682351,249131,117
+84682352,249248,135
+84682353,249383,154
+84682354,249537,136
+84682355,249673,151
+84682356,249824,201
+84682357,250025,161
+84682358,250186,113
+84682359,250299,130
+84682360,250429,96
+84682361,250525,169
+84682362,250694,108
+84682363,250802,148
+84682364,250950,166
+84682365,251116,141
+84682366,251257,148
+84682367,251405,157
+84682368,251562,191
+84682369,251753,175
+84682370,251928,126
+84682371,252054,158
+84682372,252212,194
+84682373,252406,121
+84682374,252527,165
+84682375,252692,168
+84682376,252860,150
+84682377,253010,146
+84682378,253156,207
+84682379,253363,129
+84682380,253492,144
+84682381,253636,149
+84682382,253785,108
+84682383,253893,132
+84682384,254025,191
+84682385,254216,151
+84682386,254367,161
+84682387,254528,137
+84682388,254665,125
+84682389,254790,162
+84682390,254952,150
+84682391,255102,140
+84682392,255242,153
+84682393,255395,173
+84682394,255568,155
+84682395,255723,153
+84682396,255876,143
+84682397,256019,177
+84682398,256196,103
+84682399,256299,132
+84682400,256431,123
+84682401,256554,166
+84682402,256720,155
+84682403,256875,156
+84682404,257031,134
+84682405,257165,172
+84682406,257337,184
+84682407,257521,167
+84682408,257688,168
+84682409,257856,180
+84682410,258036,191
+84682411,258227,152
+84682412,258379,140
+84682413,258519,149
+84682414,258668,117
+84682415,258785,130
+84682416,258915,211
+84682417,259126,138
+84682418,259264,120
+84682419,259384,154
+84682420,259538,116
+84682421,259654,149
+84682422,259803,134
+84682423,259937,174
+84682424,260111,138
+84682425,260249,124
+84682426,260373,219
+84682427,260592,125
+84682428,260717,160
+84682429,260877,116
+84682430,260993,142
+84682431,261135,120
+84682432,261255,168
+84682433,261423,130
+84682434,261553,173
+84682435,261726,163
+84682436,261889,132
+84682437,262021,143
+84682438,262164,182
+84682439,262346,160
+84682440,262506,187
+84682441,262693,135
+84682442,262828,145
+84682443,262973,142
+84682444,263115,162
+84682445,263277,109
+84682446,263386,153
+84682447,263539,118
+84682448,263657,133
+84682449,263790,168
+84682450,263958,163
+84682451,264121,194
+84682452,264315,160
+84682453,264475,148
+84682454,264623,162
+84682455,264785,162
+84682456,264947,159
+84682457,265106,120
+84682458,265226,147
+84682459,265373,158
+84682460,265531,175
+84682461,265706,146
+84682462,265852,184
+84682463,266036,129
+84682464,266165,153
+84682465,266318,182
+84682466,266500,160
+84682467,266660,114
+84682468,266774,104
+84682469,266878,163
+84682470,267041,132
+84682471,267173,190
+84682472,267363,120
+84682473,267483,205
+84682474,267688,145
+84682475,267833,146
+84682476,267979,192
+84682477,268171,156
+84682478,268327,166
+84682479,268493,169
+84682480,268662,176
+84682481,268838,116
+84682482,268954,163
+84682483,269117,129
+84682484,269246,173
+84682485,269419,149
+84682486,269568,111
+84682487,269679,205
+84682488,269884,152
+84682489,270036,138
+84682490,270174,129
+84682491,270303,113
+84682492,270416,123
+84682493,270539,148
+84682494,270687,123
+84682495,270810,167
+84682496,270977,131
+84682497,271108,139
+84682498,271247,124
+84682499,271371,160
+84682500,271531,170
+84682501,271701,120
+84682502,271821,218
+84682503,272039,131
+84682504,272170,129
+84682505,272299,161
+84682506,272460,162
+84682507,272622,209
+84682508,272831,111
+84682509,272942,135
+84682510,273077,140
+84682511,273217,142
+84682512,273359,194
+84682513,273553,132
+84682514,273685,117
+84682515,273802,180
+84682516,273982,143
+84682517,274125,153
+84682518,274278,138
+84682519,274416,150
+84682520,274566,132
+84682521,274698,134
+84682522,274832,184
+84682523,275016,162
+84682524,275178,128
+84682525,275306,123
+84682526,275429,169
+84682527,275598,128
+84682528,275726,179
+84682529,275905,160
+84682530,276065,155
+84682531,276220,146
+84682532,276366,170
+84682533,276536,172
+84682534,276708,131
+84682535,276839,148
+84682536,276987,165
+84682537,277152,142
+84682538,277294,160
+84682539,277454,161
+84682540,277615,187
+84682541,277802,178
+84682542,277980,148
+84682543,278128,152
+84682544,278280,167
+84682545,278447,164
+84682546,278611,140
+84682547,278751,151
+84682548,278902,145
+84682549,279047,149
+84682550,279196,109
+84682551,279305,145
+84682552,279450,199
+84682553,279649,144
+84682554,279793,119
+84682555,279912,186
+84682556,280098,134
+84682557,280232,120
+84682558,280352,154
+84682559,280506,137
+84682560,280643,192
+84682561,280835,166
+84682562,281001,149
+84682563,281150,132
+84682564,281282,176
+84682565,281458,125
+84682566,281583,149
+84682567,281732,144
+84682568,281876,138
+84682569,282014,145
+84682570,282159,160
+84682571,282319,172
+84682572,282491,148
+84682573,282639,173
+84682574,282812,129
+84682575,282941,175
+84682576,283116,211
+84682577,283327,171
+84682578,283498,112
+84682579,283610,158
+84682580,283768,155
+84682581,283923,132
+84682582,284055,160
+84682583,284215,188
+84682584,284403,130
+84682585,284533,164
+84682586,284697,138
+84682587,284835,130
+84682588,284965,179
+84682589,285144,147
+84682590,285291,149
+84682591,285440,177
+84682592,285617,173
+84682593,285790,211
+84682594,286001,198
+84682595,286199,138
+84682596,286337,146
+84682597,286483,159
+84682598,286642,173
+84682599,286815,125
+84682600,286940,183
+84682601,287123,117
+84682602,287240,142
+84682603,287382,200
+84682604,287582,149
+84682605,287731,177
+84682606,287908,133
+84682607,288041,164
+84682608,288205,147
+84682609,288352,155
+84682610,288507,162
+84682611,288669,182
+84682612,288851,129
+84682613,288980,153
+84682614,289133,188
+84682615,289321,131
+84682616,289452,160
+84682617,289612,125
+84682618,289737,131
+84682619,289868,161
+84682620,290029,123
+84682621,290152,142
+84682622,290294,144
+84682623,290438,135
+84682624,290573,162
+84682625,290735,155
+84682626,290890,157
+84682627,291047,150
+84682628,291197,141
+84682629,291338,161
+84682630,291499,139
+84682631,291638,192
+84682632,291830,152
+84682633,291982,203
+84682634,292185,180
+84682635,292365,137
+84682636,292502,148
+84682637,292650,130
+84682638,292780,140
+84682639,292920,130
+84682640,293050,202
+84682641,293252,195
+84682642,293447,176
+84682643,293623,141
+84682644,293764,163
+84682645,293927,149
+84682646,294076,147
+84682647,294223,161
+84682648,294384,140
+84682649,294524,121
+84682650,294645,129
+84682651,294774,152
+84682652,294926,147
+84682653,295073,128
+84682654,295201,163
+84682655,295364,128
+84682656,295492,152
+84682657,295644,143
+84682658,295787,156
+84682659,295943,293
+84682660,296236,166
+84682661,296402,161
+84682662,296563,169
+84682663,296732,197
+84682664,296929,188
+84682665,297117,159
+84682666,297276,131
+84682667,297407,178
+84682668,297585,168
+84682669,297753,140
+84682670,297893,141
+84682671,298034,143
+84682672,298177,113
+84682673,298290,131
+84682674,298421,157
+84682675,298578,134
+84682676,298712,138
+84682677,298850,160
+84682678,299010,144
+84682679,299154,128
+84682680,299282,169
+84682681,299451,165
+84682682,299616,157
+84682683,299773,167
+84682684,299940,119
+84682685,300059,177
+84682686,300236,171
+84682687,300407,128
+84682688,300535,184
+84682689,300719,171
+84682690,300890,162
+84682691,301052,144
+84682692,301196,118
+84682693,301314,156
+84682694,301470,132
+84682695,301602,140
+84682696,301742,123
+84682697,301865,186
+84682698,302051,153
+84682699,302204,163
+84682700,302367,127
+84682701,302494,188
+84682702,302682,146
+84682703,302828,194
+84682704,303022,132
+84682705,303154,158
+84682706,303312,123
+84682707,303435,160
+84682708,303595,149
+84682709,303744,146
+84682710,303890,186
+84682711,304076,129
+84682712,304205,118
+84682713,304323,164
+84682714,304487,176
+84682715,304663,152
+84682716,304815,122
+84682717,304937,137
+84682718,305074,197
+84682719,305271,57
+84682720,305328,149
+84682721,305477,152
+84682722,305629,148
+84682723,305777,179
+84682724,305956,193
+84682725,306149,141
+84682726,306290,153
+84682727,306443,147
+84682728,306590,199
+84682729,306789,129
+84682730,306918,172
+84682731,307090,220
+84682732,307310,147
+84682733,307457,156
+84682734,307613,123
+84682735,307736,126
+84682736,307862,163
+84682737,308025,140
+84682738,308165,168
+84682739,308333,139
+84682740,308472,152
+84682741,308624,139
+84682742,308763,148
+84682743,308911,104
+84682744,309015,212
+84682745,309227,147
+84682746,309374,128
+84682747,309502,146
+84682748,309648,145
+84682749,309793,109
+84682750,309902,154
+84682751,310056,272
+84682752,310328,161
+84682753,310489,117
+84682754,310606,57
+84682755,310663,184
+84682756,310847,162
+84682757,311009,152
+84682758,311161,116
+84682759,311277,133
+84682760,311410,144
+84682761,311554,143
+84682762,311697,157
+84682763,311854,136
+84682764,311990,195
+84682765,312185,150
+84682766,312335,148
+84682767,312483,143
+84682768,312626,180
+84682769,312806,200
+84682770,313006,120
+84682771,313126,154
+84682772,313280,113
+84682773,313393,174
+84682774,313567,150
+84682775,313717,167
+84682776,313884,134
+84682777,314018,122
+84682778,314140,131
+84682779,314271,203
+84682780,314474,116
+84682781,314590,187
+84682782,314777,126
+84682783,314903,143
+84682784,315046,127
+84682785,315173,144
+84682786,315317,190
+84682787,315507,150
+84682788,315657,122
+84682789,315779,189
+84682790,315968,156
+84682791,316124,140
+84682792,316264,153
+84682793,316417,145
+84682794,316562,155
+84682795,316717,139
+84682796,316856,135
+84682797,316991,124
+84682798,317115,131
+84682799,317246,174
+84682800,317420,169
+84682801,317589,155
+84682802,317744,145
+84682803,317889,134
+84682804,318023,137
+84682805,318160,176
+84682806,318336,172
+84682807,318508,123
+84682808,318631,218
+84682809,318849,162
+84682810,319011,162
+84682811,319173,126
+84682812,319299,151
+84682813,319450,119
+84682814,319569,132
+84682815,319701,165
+84682816,319866,185
+84682817,320051,187
+84682818,320238,144
+84682819,320382,163
+84682820,320545,192
+84682821,320737,156
+84682822,320893,175
+84682823,321068,173
+84682824,321241,248
+84682825,321489,166
+84682826,321655,187
+84682827,321842,201
+84682828,322043,156
+84682829,322199,105
+84682830,322304,156
+84682831,322460,147
+84682832,322607,147
+84682833,322754,188
+84682834,322942,175
+84682835,323117,165
+84682836,323282,157
+84682837,323439,140
+84682838,323579,138
+84682839,323717,120
+84682840,323837,154
+84682841,323991,124
+84682842,324115,125
+84682843,324240,140
+84682844,324380,123
+84682845,324503,165
+84682846,324668,148
+84682847,324816,190
+84682848,325006,139
+84682849,325145,159
+84682850,325304,126
+84682851,325430,149
+84682852,325579,175
+84682853,325754,173
+84682854,325927,148
+84682855,326075,135
+84682856,326210,139
+84682857,326349,172
+84682858,326521,163
+84682859,326684,169
+84682860,326853,157
+84682861,327010,155
+84682862,327165,177
+84682863,327342,131
+84682864,327473,146
+84682865,327619,178
+84682866,327797,156
+84682867,327953,191
+84682868,328144,158
+84682869,328302,159
+84682870,328461,178
+84682871,328639,148
+84682872,328787,208
+84682873,328995,131
+84682874,329126,150
+84682875,329276,161
+84682876,329437,134
+84682877,329571,172
+84682878,329743,149
+84682879,329892,160
+84682880,330052,162
+84682881,330214,173
+84682882,330387,149
+84682883,330536,192
+84682884,330728,133
+84682885,330861,165
+84682886,331026,148
+84682887,331174,186
+84682888,331360,160
+84682889,331520,155
+84682890,331675,165
+84682891,331840,173
+84682892,332013,133
+84682893,332146,180
+84682894,332326,147
+84682895,332473,142
+84682896,332615,160
+84682897,332775,185
+84682898,332960,124
+84682899,333084,147
+84682900,333231,136
+84682901,333367,187
+84682902,333554,135
+84682903,333689,152
+84682904,333841,176
+84682905,334017,159
+84682906,334176,171
+84682907,334347,170
+84682908,334517,164
+84682909,334681,142
+84682910,334823,140
+84682911,334963,174
+84682912,335137,184
+84682913,335321,149
+84682914,335470,186
+84682915,335656,123
+84682916,335779,168
+84682917,335947,136
+84682918,336083,108
+84682919,336191,111
+84682920,336302,159
+84682921,336461,206
+84682922,336667,154
+84682923,336821,159
+84682924,336980,128
+84682925,337108,168
+84682926,337276,219
+84682927,337495,120
+84682928,337615,154
+84682929,337769,175
+84682930,337944,141
+84682931,338085,143
+84682932,338228,123
+84682933,338351,139
+84682934,338490,185
+84682935,338675,163
+84682936,338838,165
+84682937,339003,135
+84682938,339138,124
+84682939,339262,151
+84682940,339413,144
+84682941,339557,158
+84682942,339715,195
+84682943,339910,173
+84682944,340083,123
+84682945,340206,149
+84682946,340355,171
+84682947,340526,143
+84682948,340669,245
+84682949,340914,178
+84682950,341092,204
+84682951,341296,137
+84682952,341433,207
+84682953,341640,177
+84682954,341817,145
+84682955,341962,139
+84682956,342101,152
+84682957,342253,168
+84682958,342421,165
+84682959,342586,123
+84682960,342709,148
+84682961,342857,136
+84682962,342993,130
+84682963,343123,120
+84682964,343243,190
+84682965,343433,140
+84682966,343573,181
+84682967,343754,144
+84682968,343898,174
+84682969,344072,214
+84682970,344286,141
+84682971,344427,236
+84682972,344663,164
+84682973,344827,112
+84682974,344939,129
+84682975,345068,166
+84682976,345234,260
+84682977,345494,142
+84682978,345636,152
+84682979,345788,153
+84682980,345941,195
+84682981,346136,132
+84682982,346268,143
+84682983,346411,135
+84682984,346546,147
+84682985,346693,112
+84682986,346805,131
+84682987,346936,160
+84682988,347096,151
+84682989,347247,157
+84682990,347404,118
+84682991,347522,161
+84682992,347683,57
+84682993,347740,201
+84682994,347941,141
+84682995,348082,155
+84682996,348237,136
+84682997,348373,107
+84682998,348480,147
+84682999,348627,163
+84683000,348790,139
+84683001,348929,173
+84683002,349102,132
+84683003,349234,151
+84683004,349385,153
+84683005,349538,211
+84683006,349749,131
+84683007,349880,122
+84683008,350002,147
+84683009,350149,170
+84683010,350319,197
+84683011,350516,174
+84683012,350690,134
+84683013,350824,157
+84683014,350981,106
+84683015,351087,144
+84683016,351231,137
+84683017,351368,148
+84683018,351516,168
+84683019,351684,121
+84683020,351805,123
+84683021,351928,149
+84683022,352077,159
+84683023,352236,154
+84683024,352390,152
+84683025,352542,137
+84683026,352679,172
+84683027,352851,182
+84683028,353033,116
+84683029,353149,136
+84683030,353285,150
+84683031,353435,146
+84683032,353581,165
+84683033,353746,133
+84683034,353879,151
+84683035,354030,166
+84683036,354196,110
+84683037,354306,168
+84683038,354474,129
+84683039,354603,187
+84683040,354790,155
+84683041,354945,156
+84683042,355101,139
+84683043,355240,138
+84683044,355378,174
+84683045,355552,139
+84683046,355691,163
+84683047,355854,172
+84683048,356026,131
+84683049,356157,169
+84683050,356326,125
+84683051,356451,172
+84683052,356623,141
+84683053,356764,143
+84683054,356907,171
+84683055,357078,159
+84683056,357237,183
+84683057,357420,240
+84683058,357660,162
+84683059,357822,148
+84683060,357970,132
+84683061,358102,126
+84683062,358228,149
+84683063,358377,106
+84683064,358483,173
+84683065,358656,160
+84683066,358816,165
+84683067,358981,146
+84683068,359127,156
+84683069,359283,192
+84683070,359475,181
+84683071,359656,160
+84683072,359816,170
+84683073,359986,104
+84683074,360090,139
+84683075,360229,211
+84683076,360440,123
+84683077,360563,171
+84683078,360734,154
+84683079,360888,141
+84683080,361029,166
+84683081,361195,123
+84683082,361318,131
+84683083,361449,163
+84683084,361612,132
+84683085,361744,159
+84683086,361903,185
+84683087,362088,126
+84683088,362214,156
+84683089,362370,136
+84683090,362506,132
+84683091,362638,122
+84683092,362760,159
+84683093,362919,149
+84683094,363068,129
+84683095,363197,158
+84683096,363355,160
+84683097,363515,109
+84683098,363624,120
+84683099,363744,135
+84683100,363879,170
+84683101,364049,165
+84683102,364214,148
+84683103,364362,180
+84683104,364542,172
+84683105,364714,202
+84683106,364916,136
+84683107,365052,126
+84683108,365178,130
+84683109,365308,195
+84683110,365503,137
+84683111,365640,161
+84683112,365801,139
+84683113,365940,170
+84683114,366110,169
+84683115,366279,203
+84683116,366482,140
+84683117,366622,183
+84683118,366805,159
+84683119,366964,135
+84683120,367099,168
+84683121,367267,119
+84683122,367386,172
+84683123,367558,125
+84683124,367683,139
+84683125,367822,176
+84683126,367998,216
+84683127,368214,148
+84683128,368362,165
+84683129,368527,167
+84683130,368694,188
+84683131,368882,130
+84683132,369012,158
+84683133,369170,174
+84683134,369344,142
+84683135,369486,126
+84683136,369612,160
+84683137,369772,141
+84683138,369913,162
+84683139,370075,147
+84683140,370222,151
+84683141,370373,155
+84683142,370528,128
+84683143,370656,224
+84683144,370880,155
+84683145,371035,144
+84683146,371179,167
+84683147,371346,169
+84683148,371515,134
+84683149,371649,136
+84683150,371785,153
+84683151,371938,133
+84683152,372071,139
+84683153,372210,153
+84683154,372363,171
+84683155,372534,210
+84683156,372744,133
+84683157,372877,200
+84683158,373077,153
+84683159,373230,139
+84683160,373369,159
+84683161,373528,175
+84683162,373703,123
+84683163,373826,138
+84683164,373964,149
+84683165,374113,128
+84683166,374241,154
+84683167,374395,140
+84683168,374535,150
+84683169,374685,119
+84683170,374804,127
+84683171,374931,139
+84683172,375070,154
+84683173,375224,143
+84683174,375367,119
+84683175,375486,149
+84683176,375635,111
+84683177,375746,186
+84683178,375932,152
+84683179,376084,145
+84683180,376229,147
+84683181,376376,186
+84683182,376562,144
+84683183,376706,145
+84683184,376851,115
+84683185,376966,132
+84683186,377098,122
+84683187,377220,139
+84683188,377359,157
+84683189,377516,122
+84683190,377638,154
+84683191,377792,157
+84683192,377949,152
+84683193,378101,214
+84683194,378315,143
+84683195,378458,137
+84683196,378595,166
+84683197,378761,164
+84683198,378925,163
+84683199,379088,157
+84683200,379245,167
+84683201,379412,120
+84683202,379532,177
+84683203,379709,202
+84683204,379911,135
+84683205,380046,136
+84683206,380182,135
+84683207,380317,130
+84683208,380447,130
+84683209,380577,175
+84683210,380752,133
+84683211,380885,118
+84683212,381003,180
+84683213,381183,132
+84683214,381315,144
+84683215,381459,149
+84683216,381608,205
+84683217,381813,146
+84683218,381959,148
+84683219,382107,165
+84683220,382272,129
+84683221,382401,126
+84683222,382527,163
+84683223,382690,122
+84683224,382812,227
+84683225,383039,148
+84683226,383187,129
+84683227,383316,134
+84683228,383450,182
+84683229,383632,136
+84683230,383768,117
+84683231,383885,142
+84683232,384027,129
+84683233,384156,149
+84683234,384305,172
+84683235,384477,151
+84683236,384628,133
+84683237,384761,152
+84683238,384913,178
+84683239,385091,147
+84683240,385238,176
+84683241,385414,151
+84683242,385565,164
+84683243,385729,161
+84683244,385890,118
+84683245,386008,116
+84683246,386124,182
+84683247,386306,136
+84683248,386442,142
+84683249,386584,134
+84683250,386718,139
+84683251,386857,149
+84683252,387006,124
+84683253,387130,134
+84683254,387264,140
+84683255,387404,130
+84683256,387534,192
+84683257,387726,288
+84683258,388014,200
+84683259,388214,118
+84683260,388332,149
+84683261,388481,153
+84683262,388634,247
+84683263,388881,140
+84683264,389021,152
+84683265,389173,181
+84683266,389354,155
+84683267,389509,144
+84683268,389653,104
+84683269,389757,132
+84683270,389889,157
+84683271,390046,142
+84683272,390188,149
+84683273,390337,186
+84683274,390523,131
+84683275,390654,168
+84683276,390822,159
+84683277,390981,146
+84683278,391127,135
+84683279,391262,154
+84683280,391416,166
+84683281,391582,151
+84683282,391733,139
+84683283,391872,146
+84683284,392018,218
+84683285,392236,167
+84683286,392403,170
+84683287,392573,219
+84683288,392792,160
+84683289,392952,154
+84683290,393106,152
+84683291,393258,167
+84683292,393425,132
+84683293,393557,160
+84683294,393717,158
+84683295,393875,165
+84683296,394040,157
+84683297,394197,122
+84683298,394319,267
+84683299,394586,136
+84683300,394722,129
+84683301,394851,148
+84683302,394999,135
+84683303,395134,129
+84683304,395263,188
+84683305,395451,149
+84683306,395600,145
+84683307,395745,164
+84683308,395909,149
+84683309,396058,153
+84683310,396211,146
+84683311,396357,152
+84683312,396509,124
+84683313,396633,141
+84683314,396774,158
+84683315,396932,161
+84683316,397093,138
+84683317,397231,156
+84683318,397387,212
+84683319,397599,157
+84683320,397756,151
+84683321,397907,188
+84683322,398095,137
+84683323,398232,130
+84683324,398362,170
+84683325,398532,113
+84683326,398645,153
+84683327,398798,164
+84683328,398962,153
+84683329,399115,160
+84683330,399275,150
+84683331,399425,130
+84683332,399555,147
+84683333,399702,128
+84683334,399830,141
+84683335,399971,158
+84683336,400129,152
+84683337,400281,141
+84683338,400422,128
+84683339,400550,175
+84683340,400725,136
+84683341,400861,136
+84683342,400997,158
+84683343,401155,148
+84683344,401303,157
+84683345,401460,154
+84683346,401614,145
+84683347,401759,126
+84683348,401885,234
+84683349,402119,171
+84683350,402290,140
+84683351,402430,148
+84683352,402578,147
+84683353,402725,146
+84683354,402871,111
+84683355,402982,159
+84683356,403141,172
+84683357,403313,129
+84683358,403442,198
+84683359,403640,134
+84683360,403774,189
+84683361,403963,121
+84683362,404084,152
+84683363,404236,147
+84683364,404383,139
+84683365,404522,156
+84683366,404678,119
+84683367,404797,161
+84683368,404958,161
+84683369,405119,169
+84683370,405288,133
+84683371,405421,139
+84683372,405560,177
+84683373,405737,143
+84683374,405880,180
+84683375,406060,148
+84683376,406208,192
+84683377,406400,127
+84683378,406527,149
+84683379,406676,191
+84683380,406867,170
+84683381,407037,164
+84683382,407201,177
+84683383,407378,139
+84683384,407517,139
+84683385,407656,138
+84683386,407794,201
+84683387,407995,192
+84683388,408187,166
+84683389,408353,135
+84683390,408488,185
+84683391,408673,159
+84683392,408832,103
+84683393,408935,148
+84683394,409083,143
+84683395,409226,149
+84683396,409375,157
+84683397,409532,131
+84683398,409663,115
+84683399,409778,153
+84683400,409931,103
+84683401,410034,188
+84683402,410222,154
+84683403,410376,115
+84683404,410491,125
+84683405,410616,170
+84683406,410786,179
+84683407,410965,138
+84683408,411103,137
+84683409,411240,193
+84683410,411433,129
+84683411,411562,160
+84683412,411722,133
+84683413,411855,255
+84683414,412110,130
+84683415,412240,142
+84683416,412382,159
+84683417,412541,136
+84683418,412677,148
+84683419,412825,152
+84683420,412977,180
+84683421,413157,144
+84683422,413301,176
+84683423,413477,140
+84683424,413617,134
+84683425,413751,147
+84683426,413898,112
+84683427,414010,152
+84683428,414162,177
+84683429,414339,171
+84683430,414510,191
+84683431,414701,108
+84683432,414809,193
+84683433,415002,139
+84683434,415141,167
+84683435,415308,168
+84683436,415476,145
+84683437,415621,145
+84683438,415766,130
+84683439,415896,173
+84683440,416069,181
+84683441,416250,131
+84683442,416381,148
+84683443,416529,188
+84683444,416717,159
+84683445,416876,143
+84683446,417019,202
+84683447,417221,147
+84683448,417368,193
+84683449,417561,114
+84683450,417675,148
+84683451,417823,132
+84683452,417955,152
+84683453,418107,172
+84683454,418279,131
+84683455,418410,170
+84683456,418580,168
+84683457,418748,151
+84683458,418899,127
+84683459,419026,167
+84683460,419193,161
+84683461,419354,153
+84683462,419507,152
+84683463,419659,112
+84683464,419771,141
+84683465,419912,227
+84683466,420139,171
+84683467,420310,194
+84683468,420504,134
+84683469,420638,143
+84683470,420781,155
+84683471,420936,145
+84683472,421081,177
+84683473,421258,159
+84683474,421417,135
+84683475,421552,154
+84683476,421706,161
+84683477,421867,188
+84683478,422055,116
+84683479,422171,187
+84683480,422358,108
+84683481,422466,150
+84683482,422616,123
+84683483,422739,149
+84683484,422888,167
+84683485,423055,191
+84683486,423246,133
+84683487,423379,125
+84683488,423504,146
+84683489,423650,144
diff --git a/netaddr/eui/iab.txt b/netaddr/eui/iab.txt
index 3faa19e..7d08f21 100644
--- a/netaddr/eui/iab.txt
+++ b/netaddr/eui/iab.txt
@@ -3151,8 +3151,8 @@ IAB Range Organization
00-50-C2 (hex) SP Controls, Inc
1FA000-1FAFFF (base 16) SP Controls, Inc
- 601 Minnesota Street #115
- San Francisco CA 94107
+ 930 Linden Avenue
+ San Francisco CA 94080
UNITED STATES
00-50-C2 (hex) Willowglen Systems Inc.
@@ -3331,9 +3331,9 @@ IAB Range Organization
00-50-C2 (hex) Linn Products Ltd
217000-217FFF (base 16) Linn Products Ltd
- Floors Road
+ Glasgow Road
Waterfoot
- Glasgow Scotland G76 0EP
+ Glasgow Scotland G76 0EQ
UNITED KINGDOM
00-50-C2 (hex) Nansen S. A. - Instrumentos de Precisão
@@ -3392,10 +3392,10 @@ IAB Range Organization
Hillsboro OR 97124-7101
UNITED STATES
-00-50-C2 (hex) Getinge Lunatronic ApS
-221000-221FFF (base 16) Getinge Lunatronic ApS
- Tordenskjoldsgade 27
- Copenhagen K DK 1055
+00-50-C2 (hex) Getinge IT Solutions ApS
+221000-221FFF (base 16) Getinge IT Solutions ApS
+ Amaliegade 4
+ Copenhagen K DK 1256
DENMARK
00-50-C2 (hex) imo-elektronik GmbH
@@ -3651,9 +3651,9 @@ IAB Range Organization
00-50-C2 (hex) CDS Rail
24A000-24AFFF (base 16) CDS Rail
- 1570 Parkway
- Solent Business Park
- Fareham Hampshire PO15 7AG
+ Unit 1, Fulcrum 4
+ Solent Way
+ Fareham Hampshire PO15 7FT
UNITED KINGDOM
00-50-C2 (hex) Azimuth Systems, Inc.
@@ -3668,8 +3668,8 @@ IAB Range Organization
St.Petersburg 197101
RUSSIAN FEDERATION
-00-50-C2 (hex) Hi-Speed Checkweigher Co Inc
-24D000-24DFFF (base 16) Hi-Speed Checkweigher Co Inc
+00-50-C2 (hex) METTLER-TOLEDO HI-SPEED
+24D000-24DFFF (base 16) METTLER-TOLEDO HI-SPEED
5 Barr Rd
Ithaca NY 14850
UNITED STATES
@@ -5969,8 +5969,9 @@ IAB Range Organization
00-50-C2 (hex) Audio Processing Technology Ltd
3BF000-3BFFFF (base 16) Audio Processing Technology Ltd
- Edgewater Road
- Belfast Co. Antrim BT3 9JQ
+ Whiterock Business Park
+ 729 Springfield Road
+ Belfast BT12 7FP
UNITED KINGDOM
00-50-C2 (hex) EDA Industries Srl
@@ -11445,8 +11446,8 @@ IAB Range Organization
00-50-C2 (hex) SP Controls, Inc
729000-729FFF (base 16) SP Controls, Inc
- 601 Minnesota Street #115
- San Francisco CA 94107
+ 930 Linden Avenue
+ San Francisco CA 94080
UNITED STATES
00-50-C2 (hex) Phytec Messtechnik GmbH
@@ -11793,8 +11794,8 @@ IAB Range Organization
Yokohama Kanagawa 221-0052
JAPAN
-00-50-C2 (hex) EFW Inc.
-761000-761FFF (base 16) EFW Inc.
+00-50-C2 (hex) Elbit Systems of America - Fort Worth Operations
+761000-761FFF (base 16) Elbit Systems of America - Fort Worth Operations
4700 Marine Creek Parkway
Fort Worth TX 76179
UNITED STATES
@@ -16987,3 +16988,417 @@ A9F000-A9FFFF (base 16) YellowSoft Co., Ltd.
Hidaka Saitama 350-1213
JAPAN
+00-50-C2 (hex) Smith Meter, Inc.
+AA0000-AA0FFF (base 16) Smith Meter, Inc.
+ 1602 Wagner Ave.
+ Erie PA 16514
+ UNITED STATES
+
+00-50-C2 (hex) ELREM ELECTRONIC AG
+AA1000-AA1FFF (base 16) ELREM ELECTRONIC AG
+ Unterstrasse 35
+ Herzogenbuchsee Bern 3360
+ SWITZERLAND
+
+00-50-C2 (hex) ELPA sas
+AA2000-AA2FFF (base 16) ELPA sas
+ via Rocciamelone 3
+ Caprie TO 10040
+ ITALY
+
+00-50-C2 (hex) Peek Traffic/US Traffic
+AA3000-AA3FFF (base 16) Peek Traffic/US Traffic
+ 2906 Corporate Way
+ Palmetto FL 34221
+ UNITED STATES
+
+00-50-C2 (hex) PSi Printer Systems international GmbH
+AA4000-AA4FFF (base 16) PSi Printer Systems international GmbH
+ Eiserfelder Strasse 316
+ Siegen 57080
+ GERMANY
+
+00-50-C2 (hex) Tampere University of Technology
+AA5000-AA5FFF (base 16) Tampere University of Technology
+ Korkeakoulunkatu 10
+ Tampere Pirkanmaa 33720
+ FINLAND
+
+00-50-C2 (hex) Bassett Electronic Systems ltd
+AA6000-AA6FFF (base 16) Bassett Electronic Systems ltd
+ Unit 24 Whitehill Ind Park
+ Wootton Bassett Wiltshire SN4 7DB
+ UNITED KINGDOM
+
+00-50-C2 (hex) Endeas Oy
+AA7000-AA7FFF (base 16) Endeas Oy
+ Heimolantie 6
+ Espoo 02330
+ FINLAND
+
+00-50-C2 (hex) Nexans Cabling Solutions
+AA8000-AA8FFF (base 16) Nexans Cabling Solutions
+ Unit 2 Faraday Office Park
+ Faraday Road
+ Basingstoke Hampshire RG24 8QQ
+ UNITED KINGDOM
+
+00-50-C2 (hex) SAN GIORGIO S.E.I.N. srl
+AA9000-AA9FFF (base 16) SAN GIORGIO S.E.I.N. srl
+ Via Pedulla' 59
+ Genova 16165
+ ITALY
+
+00-50-C2 (hex) Flexible Picture Systems
+AAA000-AAAFFF (base 16) Flexible Picture Systems
+ 174 West Beaver Creek Road
+ Richmond Hill Ontario L4B 1B4
+ CANADA
+
+00-50-C2 (hex) BRS Sistemas Eletrônicos
+AAB000-AABFFF (base 16) BRS Sistemas Eletrônicos
+ Rua Gomes de Freitas, 491 / 204
+ Porto Alegre RS 91380-000
+ BRAZIL
+
+00-50-C2 (hex) VisiCon GmbH
+AAC000-AACFFF (base 16) VisiCon GmbH
+ Gottf.-Aug.-Buerger-Str. 30
+ Gleichen Lower Saxony D-37130
+ GERMANY
+
+00-50-C2 (hex) Update Systems Inc.
+AAD000-AADFFF (base 16) Update Systems Inc.
+ 10545 Baur Blvd.
+ Saint Louis MO 63132
+ UNITED STATES
+
+00-50-C2 (hex) OUTLINE srl
+AAE000-AAEFFF (base 16) OUTLINE srl
+ VIA LEONARDO DA VINCI N°56
+ FLERO BRESCIA 25020
+ ITALY
+
+00-50-C2 (hex) Santa Barbara Instrument Group
+AAF000-AAFFFF (base 16) Santa Barbara Instrument Group
+ 147A Castilian Drive
+ Santa Barbara CA 93117
+ UNITED STATES
+
+00-50-C2 (hex) FRAKO Kondensatoren- und Anlagenbau GmbH
+AB0000-AB0FFF (base 16) FRAKO Kondensatoren- und Anlagenbau GmbH
+ Tscheulinstrasse 21 a
+ Teningen 79331
+ GERMANY
+
+00-50-C2 (hex) Bitmanufaktur GmbH
+AB1000-AB1FFF (base 16) Bitmanufaktur GmbH
+ Schwedter Str. 23
+ Berlin 10119
+ GERMANY
+
+00-50-C2 (hex) ProCom Systems, Inc.
+AB2000-AB2FFF (base 16) ProCom Systems, Inc.
+ 5100 Coachman Road
+ Bettendorf IA 52722
+ UNITED STATES
+
+00-50-C2 (hex) Compañia de Instrumentacion y control, S.L.
+AB3000-AB3FFF (base 16) Compañia de Instrumentacion y control, S.L.
+ C/Maria Auxiliadora 5, 1ºI
+ Madrid 28040
+ SPAIN
+
+00-50-C2 (hex) n3k Informatik GmbH
+AB4000-AB4FFF (base 16) n3k Informatik GmbH
+ Ferdinand-Braun-Str. 3
+ Heilbronn Baden-Wuerttemberg 74074
+ GERMANY
+
+00-50-C2 (hex) METTLER-TOLEDO HI-SPEED
+AB5000-AB5FFF (base 16) METTLER-TOLEDO HI-SPEED
+ 5 BARR ROAD
+ ITHACA NY 14850
+ UNITED STATES
+
+00-50-C2 (hex) Gygax Embedded Engineering GEE.ch
+AB6000-AB6FFF (base 16) Gygax Embedded Engineering GEE.ch
+ Nuovo AG - Greuter Elektrotechnik
+ Bahnhofstr. 8
+ Rüti CH-8630
+ SWITZERLAND
+
+00-50-C2 (hex) Twinfalls Technologies
+AB7000-AB7FFF (base 16) Twinfalls Technologies
+ 604 - 500 W 10th Ave
+ Vancouver BC V5Z4P1
+ CANADA
+
+00-50-C2 (hex) AHM Limited (CLiKAPAD)
+AB8000-AB8FFF (base 16) AHM Limited (CLiKAPAD)
+ Arlington House, Dittons Bus. Pk
+ Dittons Road
+ POLEGATE East Sussex BN266HY
+ UNITED KINGDOM
+
+00-50-C2 (hex) Showtacle
+AB9000-AB9FFF (base 16) Showtacle
+ Pecnianska 21
+ Bratislava 85101
+ SLOVAKIA
+
+00-50-C2 (hex) Saia-Burgess Controls AG
+ABA000-ABAFFF (base 16) Saia-Burgess Controls AG
+ Bahnhofstrasse 18
+ Murten FR 3280
+ SWITZERLAND
+
+00-50-C2 (hex) Volantic AB
+ABB000-ABBFFF (base 16) Volantic AB
+ Gymnasievagen 16
+ Skelleftea Vasterbotten 931 53
+ SWEDEN
+
+00-50-C2 (hex) Barrick
+ABC000-ABCFFF (base 16) Barrick
+ Balsamos Norte 324B y calle quinta
+ Urdesa Central
+ Guayaquil Guayas 593
+ ECUADOR
+
+00-50-C2 (hex) Monitor Business Machines Ltd.
+ABD000-ABDFFF (base 16) Monitor Business Machines Ltd.
+ PO Box 108 042
+ Symonds Street
+ Auckland
+ NEW ZEALAND
+
+00-50-C2 (hex) AP Labs
+ABE000-ABEFFF (base 16) AP Labs
+ 10864 THORNMINT ROAD
+ SAN DIEGO CALIFORNIA 92127
+ UNITED STATES
+
+00-50-C2 (hex) MCC Computer Company
+ABF000-ABFFFF (base 16) MCC Computer Company
+ 505 E. Palm Valley Blvd
+ Suite 250
+ Round Rock Texas 78664
+ UNITED STATES
+
+00-50-C2 (hex) DS PRO Audio Ltda
+AC0000-AC0FFF (base 16) DS PRO Audio Ltda
+ Rua Washington Luiz 675 sala 1116
+ Centro
+ Porto Alegre RS 90.010-460
+ BRAZIL
+
+00-50-C2 (hex) DAISHIN-DENSHI Co., Ltd
+AC1000-AC1FFF (base 16) DAISHIN-DENSHI Co., Ltd
+ 2-38-14
+ Hongo
+ Bunkyou-ku Tokyo 113-0033
+ JAPAN
+
+00-50-C2 (hex) OpenXS B.V.
+AC2000-AC2FFF (base 16) OpenXS B.V.
+ Koaibosk 3
+ Terwispel Friesland 8407ED
+ NETHERLANDS
+
+00-50-C2 (hex) Diversified Control, Inc.
+AC3000-AC3FFF (base 16) Diversified Control, Inc.
+ 3333 California Rd.
+ Orchard Park New York 14127
+ UNITED STATES
+
+00-50-C2 (hex) Orion Technologies, Inc.
+AC4000-AC4FFF (base 16) Orion Technologies, Inc.
+ 690 Cone Park Court
+ Merritt Island FL 32952
+ UNITED STATES
+
+00-50-C2 (hex) E-Motion System, Inc.
+AC5000-AC5FFF (base 16) E-Motion System, Inc.
+ 6-2-11 Nishi-Gotanda Shinagawa-ku
+ Tokyo 141-0031
+ JAPAN
+
+00-50-C2 (hex) Marathon Products, Inc.
+AC6000-AC6FFF (base 16) Marathon Products, Inc.
+ P.O. Box 21579
+ Oakland CA 94620-1579
+ UNITED STATES
+
+00-50-C2 (hex) WaveIP
+AC7000-AC7FFF (base 16) WaveIP
+ Teradion Ind Park
+ Misgav Israel 20692
+ ISRAEL
+
+00-50-C2 (hex) Palladio Systeme GmbH
+AC8000-AC8FFF (base 16) Palladio Systeme GmbH
+ Thalkirchner Str. 76
+ 80337 BY 80337
+ GERMANY
+
+00-50-C2 (hex) Steinbeis-Transferzentrum Embedded Design und Networking
+AC9000-AC9FFF (base 16) Steinbeis-Transferzentrum Embedded Design und Networking
+ Poststrasse 35
+ Heitersheim Baden-Wuerttemberg 79423
+ GERMANY
+
+00-50-C2 (hex) Soft & Control Technology s.r.o.
+ACA000-ACAFFF (base 16) Soft & Control Technology s.r.o.
+ Magnezitarska 10
+ Kosice Kosice mesto 04013
+ SLOVAKIA
+
+00-50-C2 (hex) U-CARE INC.
+ACB000-ACBFFF (base 16) U-CARE INC.
+ Room no. 407, Medical industry venture center
+ 1272 Maeji-ri, Huengup-myun
+ Kangwon-do 220-842
+ KOREA, REPUBLIC OF
+
+00-50-C2 (hex) StockerYale
+ACC000-ACCFFF (base 16) StockerYale
+ 3020 Euro Business Park
+ Little Island
+ Cork
+ IRELAND
+
+00-50-C2 (hex) MeshWorks Wireless Oy
+ACD000-ACDFFF (base 16) MeshWorks Wireless Oy
+ Hermiankatu 6-8 H
+ Tampere Suomi 33720
+ FINLAND
+
+00-50-C2 (hex) ChronoLogic Pty. Ltd.
+ACE000-ACEFFF (base 16) ChronoLogic Pty. Ltd.
+ 227 Gouger Street
+ Adelaide South Australia 5000
+ AUSTRALIA
+
+00-50-C2 (hex) SP Controls, Inc
+ACF000-ACFFFF (base 16) SP Controls, Inc
+ 930 Linden Ave
+ South San Francisco CA 94086
+ UNITED STATES
+
+00-50-C2 (hex) Geonautics Australia Pty Ltd
+AD0000-AD0FFF (base 16) Geonautics Australia Pty Ltd
+ 60 Morley Street
+ Coorparoo
+ Brisbane Queensland 4151
+ AUSTRALIA
+
+00-50-C2 (hex) Phytec Messtechnik GmbH
+AD1000-AD1FFF (base 16) Phytec Messtechnik GmbH
+ Robert-Koch-Straße 39
+ Mainz Rheinland-Pfalz 55129
+ GERMANY
+
+00-50-C2 (hex) Rafael
+AD2000-AD2FFF (base 16) Rafael
+ P.o.b. 962 31009
+ Library dep. C0-900
+ Haifa 31009 31009
+ ISRAEL
+
+00-50-C2 (hex) Peek Traffic Corporation
+AD3000-AD3FFF (base 16) Peek Traffic Corporation
+ 2906 Corporate Way
+ Palmetto Fl 34221
+ UNITED STATES
+
+00-50-C2 (hex) Global Rainmakers Inc.
+AD4000-AD4FFF (base 16) Global Rainmakers Inc.
+ 10 East 53rd St.
+ Floor 33
+ New York NY 10022
+ UNITED STATES
+
+00-50-C2 (hex) Mighty Lube Systematic Lubrication, Inc.
+AD5000-AD5FFF (base 16) Mighty Lube Systematic Lubrication, Inc.
+ 9569 West 40th Street
+ Fremont MI 49412
+ UNITED STATES
+
+00-50-C2 (hex) Unisensor A/S
+AD6000-AD6FFF (base 16) Unisensor A/S
+ Gydevang 42
+ Alleroed 3450
+ DENMARK
+
+00-50-C2 (hex) Air Monitors Ltd
+AD7000-AD7FFF (base 16) Air Monitors Ltd
+ Unit 2 Bredon Court
+ Brockeridge Park Twyning
+ Tewkesbury Gloucestershire GL20 6FF
+ UNITED KINGDOM
+
+00-50-C2 (hex) Incyma
+AD8000-AD8FFF (base 16) Incyma
+ Victor-Duret 18
+ Onex GE 1213
+ SWITZERLAND
+
+00-50-C2 (hex) elettrondata srl
+AD9000-AD9FFF (base 16) elettrondata srl
+ via del canaletto 77/79
+ spezzano di fiorano modena 41042
+ ITALY
+
+00-50-C2 (hex) Essepie Srl
+ADA000-ADAFFF (base 16) Essepie Srl
+ Via Artigianato,5
+ DALMINE BERGAMO 24044
+ ITALY
+
+00-50-C2 (hex) GO engineering GmbH
+ADB000-ADBFFF (base 16) GO engineering GmbH
+ Stolzenbergstraße 13/IV
+ Baden-Württemberg 76532
+ GERMANY
+
+00-50-C2 (hex) Synthesechemie Dr. Penth GmbH
+ADC000-ADCFFF (base 16) Synthesechemie Dr. Penth GmbH
+ Lebacher Strasse 60
+ Heusweiler Saarland 66822
+ GERMANY
+
+00-50-C2 (hex) General Dynamics C4 Sysems
+ADD000-ADDFFF (base 16) General Dynamics C4 Sysems
+ 8220 East Rooseevelt St.
+ MD: R1122
+ Scottsdale Arizona 85157-3812
+ UNITED STATES
+
+00-50-C2 (hex) Neoptix Inc.
+ADE000-ADEFFF (base 16) Neoptix Inc.
+ 1415 Frank-Carrel
+ Suite 220
+ Quebec G1N4N7
+ CANADA
+
+00-50-C2 (hex) Altinex, Inc
+ADF000-ADFFFF (base 16) Altinex, Inc
+ 592 Apollo Street
+ Brea CA 92821
+ UNITED STATES
+
+00-50-C2 (hex) AT4 wireless.S.A
+AE0000-AE0FFF (base 16) AT4 wireless.S.A
+ c/ Severo Ochoa 2
+ P.T.A
+ Campanillas Málaga 29590
+ SPAIN
+
+00-50-C2 (hex) EVERCARE
+AE1000-AE1FFF (base 16) EVERCARE
+ 4fl., 620-1 Shinsa-dong
+ Gangnam-Gu
+ Seoul 135-890
+ KOREA, REPUBLIC OF
+
diff --git a/netaddr/eui/ieee.py b/netaddr/eui/ieee.py
new file mode 100755
index 0000000..8318239
--- /dev/null
+++ b/netaddr/eui/ieee.py
@@ -0,0 +1,285 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+#
+# DISCLAIMER
+#
+# netaddr is not sponsored nor endorsed by the IEEE.
+#
+# Use of data from the IEEE (Institute of Electrical and Electronics
+# Engineers) is subject to copyright. See the following URL for
+# details :-
+#
+# U{http://www.ieee.org/web/publications/rights/legal.html}
+#
+# IEEE data files included with netaddr are not modified in any way but are
+# parsed and made available to end users through an API. There is no
+# guarantee that referenced files are not out of date.
+#
+# See README file and source code for URLs to latest copies of the relevant
+# files.
+#
+#-----------------------------------------------------------------------------
+"""
+Provides access to public OUI and IAB registration data published by the IEEE.
+
+More details can be found at the following URLs :-
+
+ - IEEE Home Page - U{http://www.ieee.org/}
+ - Registration Authority Home Page - U{http://standards.ieee.org/regauth/}
+"""
+
+import os as _os
+import os.path as _path
+import csv as _csv
+
+from netaddr.core import Subscriber, Publisher
+
+#-----------------------------------------------------------------------------
+
+#: Path to local copy of IEEE OUI Registry data file.
+IEEE_OUI_REGISTRY = _path.join(_path.dirname(__file__), 'oui.txt')
+#: Path to netaddr OUI index file.
+IEEE_OUI_METADATA = _path.join(_path.dirname(__file__), 'oui.idx')
+
+#: OUI index lookup dictionary.
+IEEE_OUI_INDEX = {}
+
+#: Path to local copy of IEEE IAB Registry data file.
+IEEE_IAB_REGISTRY = _path.join(_path.dirname(__file__), 'iab.txt')
+
+#: Path to netaddr IAB index file.
+IEEE_IAB_METADATA = _path.join(_path.dirname(__file__), 'iab.idx')
+
+#: IAB index lookup dictionary.
+IEEE_IAB_INDEX = {}
+
+#-----------------------------------------------------------------------------
+class NotRegisteredError(Exception):
+ """
+ An Exception indicating that an OUI or IAB was not found in the IEEE
+ Registry.
+ """
+ pass
+
+#-----------------------------------------------------------------------------
+class FileIndexer(Subscriber):
+ """Stores index data found by a parser in a CSV file"""
+ def __init__(self, filename):
+ """
+ Constructor.
+
+ filename - location of CSV index file.
+ """
+ self.fh = open(filename, 'w')
+ self.writer = _csv.writer(self.fh, lineterminator="\n")
+
+ def update(self, data):
+ """
+ Write received record to a CSV file
+
+ @param data: record containing offset record information.
+ """
+ self.writer.writerow(data)
+
+#-----------------------------------------------------------------------------
+class OUIIndexParser(Publisher):
+ """
+ A parser that processes OUI (Organisationally Unique Identifier)
+ registration file data published by the IEEE.
+
+ It sends out notifications to registered subscribers for each record it
+ encounters, passing on the record's position relative to file start
+ (offset) and the size of the record (in bytes).
+
+ The file is available online here :-
+
+ - U{http://standards.ieee.org/regauth/oui/oui.txt}
+
+ Sample record::
+
+ 00-CA-FE (hex) ACME CORPORATION
+ 00CAFE (base 16) ACME CORPORATION
+ 1 MAIN STREET
+ SPRINGFIELD
+ UNITED STATES
+ """
+ def __init__(self, filename):
+ """
+ Constructor.
+
+ filename - location of file containing OUI records.
+ """
+ super(OUIIndexParser, self).__init__()
+ self.fh = open(filename, 'rb')
+
+ def parse(self):
+ """Parse an OUI registration file for records notifying subscribers"""
+ skip_header = True
+ record = None
+ size = 0
+
+ while True:
+ line = self.fh.readline() # unbuffered to obtain correct offsets
+
+ if not line:
+ break # EOF, we're done
+
+ if skip_header and '(hex)' in line:
+ skip_header = False
+
+ if skip_header:
+ # ignoring header section
+ continue
+
+ if '(hex)' in line:
+ # record start
+ if record is not None:
+ # a complete record.
+ record.append(size)
+ self.notify(record)
+
+ size = len(line)
+ offset = (self.fh.tell() - len(line))
+ oui = line.split()[0]
+ index = int(oui.replace('-', ''), 16)
+ record = [index, offset]
+ else:
+ # within record
+ size += len(line)
+
+ # process final record on loop exit
+ record.append(size)
+ self.notify(record)
+
+#-----------------------------------------------------------------------------
+class IABIndexParser(Publisher):
+ """
+ A parser that processes IAB (Individual Address Block) registration file
+ data published by the IEEE.
+
+ It sends out notifications to registered Subscriber objects for each
+ record it encounters, passing on the record's position relative to file
+ start (offset) and the size of the record (in bytes).
+
+ The file is available online here :-
+
+ - U{http://standards.ieee.org/regauth/oui/iab.txt}
+
+ Sample record::
+
+ 00-50-C2 (hex) ACME CORPORATION
+ ABC000-ABCFFF (base 16) ACME CORPORATION
+ 1 MAIN STREET
+ SPRINGFIELD
+ UNITED STATES
+ """
+ def __init__(self, filename):
+ """
+ Constructor.
+
+ filename - location of file containing IAB records.
+ """
+ super(IABIndexParser, self).__init__()
+ self.fh = open(filename, 'rb')
+
+ def parse(self):
+ """Parse an IAB registration file for records notifying subscribers"""
+ skip_header = True
+ record = None
+ size = 0
+ while True:
+ line = self.fh.readline() # unbuffered
+
+ if not line:
+ break # EOF, we're done
+
+ if skip_header and '(hex)' in line:
+ skip_header = False
+
+ if skip_header:
+ # ignoring header section
+ continue
+
+ if '(hex)' in line:
+ # record start
+ if record is not None:
+ record.append(size)
+ self.notify(record)
+
+ offset = (self.fh.tell() - len(line))
+ iab_prefix = line.split()[0]
+ index = iab_prefix
+ record = [index, offset]
+ size = len(line)
+ elif '(base 16)' in line:
+ # within record
+ size += len(line)
+ prefix = record[0].replace('-', '')
+ suffix = line.split()[0]
+ suffix = suffix.split('-')[0]
+ record[0] = (int(prefix + suffix, 16)) >> 12
+ else:
+ # within record
+ size += len(line)
+
+ # process final record on loop exit
+ record.append(size)
+ self.notify(record)
+
+#-----------------------------------------------------------------------------
+def create_ieee_indices():
+ """Create indices for OUI and IAB file based lookups"""
+ oui_parser = OUIIndexParser(IEEE_OUI_REGISTRY)
+ oui_parser.attach(FileIndexer(IEEE_OUI_METADATA))
+ oui_parser.parse()
+
+ iab_parser = IABIndexParser(IEEE_IAB_REGISTRY)
+ iab_parser.attach(FileIndexer(IEEE_IAB_METADATA))
+ iab_parser.parse()
+
+#-----------------------------------------------------------------------------
+def load_ieee_indices():
+ """Load OUI and IAB lookup indices into memory"""
+ for row in _csv.reader(open(IEEE_OUI_METADATA)):
+ (key, offset, size) = [int(_) for _ in row]
+ IEEE_OUI_INDEX.setdefault(key, [])
+ IEEE_OUI_INDEX[key].append((offset, size))
+
+ for row in _csv.reader(open(IEEE_IAB_METADATA)):
+ (key, offset, size) = [int(_) for _ in row]
+ IEEE_IAB_INDEX.setdefault(key, [])
+ IEEE_IAB_INDEX[key].append((offset, size))
+
+#-----------------------------------------------------------------------------
+def get_latest_files():
+ """Download the latest files from the IEEE"""
+ import urllib2
+
+ urls = [
+ 'http://standards.ieee.org/regauth/oui/oui.txt',
+ 'http://standards.ieee.org/regauth/oui/iab.txt',
+ ]
+
+ for url in urls:
+ print 'downloading latest copy of %s' % url
+ request = urllib2.Request(url)
+ response = urllib2.urlopen(request)
+ save_path = _path.dirname(__file__)
+ filename = _path.join(save_path, _os.path.basename(response.geturl()))
+ fh = open(filename, 'wb')
+ fh.write(response.read())
+ fh.close()
+
+#-----------------------------------------------------------------------------
+if __name__ == '__main__':
+ # Generate indices when module is executed as a script.
+ get_latest_files()
+ create_ieee_indices()
+
+
+# On module load read indices in memory to enable lookups.
+load_ieee_indices()
diff --git a/netaddr/eui/oui.idx b/netaddr/eui/oui.idx
index b8a4757..b17d15f 100644
--- a/netaddr/eui/oui.idx
+++ b/netaddr/eui/oui.idx
@@ -328,12106 +328,12282 @@
327,51531,142
328,51673,152
329,51825,169
-330,51994,223
-331,52217,155
-332,52372,152
-333,52524,208
-334,52732,158
-335,52890,133
-336,53023,170
-337,53193,166
-338,53359,163
-339,53522,201
-340,53723,154
-341,53877,206
-342,54083,166
-343,54249,176
-344,54425,163
-345,54588,177
-346,54765,211
-347,54976,138
-348,55114,138
-349,55252,152
-350,55404,191
-351,55595,131
-352,55726,144
-353,55870,171
-354,56041,161
-355,56202,155
-356,56357,155
-357,56512,148
-358,56660,118
-359,56778,154
-360,56932,161
-361,57093,180
-362,57273,129
-363,57402,131
-364,57533,119
-365,57652,138
-366,57790,154
-367,57944,140
-368,58084,178
-369,58262,168
-370,58430,164
-371,58594,116
-372,58710,162
-373,58872,168
-374,59040,167
-375,59207,123
-376,59330,156
-377,59486,197
-378,59683,201
-379,59884,176
-380,60060,123
-381,60183,132
-382,60315,174
-383,60489,168
-384,60657,186
-385,60843,145
-386,60988,144
-387,61132,158
-388,61290,145
-389,61435,138
-390,61573,126
-391,61699,126
-392,61825,144
-393,61969,170
-394,62139,144
-395,62283,169
-396,62452,128
-397,62580,154
-398,62734,146
-399,62880,127
-400,63007,120
-401,63127,141
-402,63268,159
-403,63427,191
-404,63618,179
-405,63797,189
-406,63986,155
-407,64141,155
-408,64296,168
-409,64464,177
-410,64641,136
-411,64777,169
-412,64946,150
-413,65096,160
-414,65256,146
-415,65402,139
-416,65541,163
-417,65704,136
-418,65840,161
-419,66001,168
-420,66169,161
-421,66330,149
-422,66479,178
-423,66657,195
-424,66852,211
-425,67063,126
-426,67189,201
-427,67390,165
-428,67555,145
-429,67700,227
-430,67927,148
-431,68075,164
-432,68239,220
-433,68459,144
-434,68603,182
-435,68785,176
-436,68961,148
-437,69109,153
-438,69262,190
-439,69452,181
-440,69633,153
-441,69786,153
-442,69939,167
-443,70106,132
-444,70238,155
-445,70393,192
-446,70585,181
-447,70766,160
-448,70926,126
-449,71052,156
-450,71208,147
-451,71355,130
-452,71485,181
-453,71666,168
-454,71834,156
-455,71990,145
-456,72135,142
-456,72277,72
-457,72349,147
-458,72496,170
-459,72666,107
-460,72773,230
-461,73003,113
-462,73116,194
-463,73310,197
-464,73507,135
-465,73642,154
-466,73796,214
-467,74010,174
-468,74184,149
-469,74333,232
-470,74565,121
-471,74686,146
-472,74832,157
-473,74989,140
-474,75129,208
-475,75337,147
-476,75484,129
-477,75613,142
-478,75755,143
-479,75898,198
-480,76096,151
-481,76247,206
-482,76453,167
-483,76620,126
-484,76746,132
-485,76878,176
-486,77054,166
-487,77220,166
-488,77386,151
-489,77537,181
-490,77718,132
-491,77850,182
-492,78032,156
-493,78188,149
-494,78337,181
-495,78518,216
-496,78734,149
-497,78883,171
-498,79054,162
-499,79216,126
-500,79342,142
-501,79484,131
-502,79615,224
-503,79839,175
-504,80014,187
-505,80201,189
-506,80390,116
-507,80506,184
-508,80690,170
-509,80860,160
-510,81020,196
-511,81216,161
-512,81377,196
-513,81573,144
-514,81717,179
-515,81896,174
-516,82070,184
-517,82254,153
-518,82407,131
-519,82538,176
-520,82714,161
-521,82875,231
-522,83106,137
-523,83243,147
-524,83390,120
-525,83510,127
-526,83637,154
-527,83791,121
-528,83912,181
-529,84093,235
-530,84328,122
-531,84450,143
-532,84593,167
-533,84760,173
-534,84933,147
-535,85080,147
-536,85227,217
-537,85444,152
-538,85596,135
-539,85731,142
-540,85873,154
-541,86027,204
-542,86231,134
-543,86365,159
-544,86524,155
-545,86679,195
-546,86874,137
-547,87011,162
-548,87173,118
-549,87291,157
-550,87448,139
-551,87587,175
-552,87762,158
-553,87920,171
-554,88091,179
-555,88270,148
-556,88418,160
-557,88578,125
-558,88703,127
-559,88830,126
-560,88956,143
-561,89099,153
-562,89252,189
-563,89441,178
-564,89619,156
-565,89775,167
-566,89942,126
-567,90068,167
-568,90235,191
-569,90426,123
-570,90549,161
-571,90710,141
-572,90851,189
-573,91040,146
-574,91186,162
-575,91348,194
-576,91542,171
-577,91713,122
-578,91835,165
-579,92000,166
-580,92166,208
-581,92374,182
-582,92556,203
-583,92759,228
-584,92987,147
-585,93134,198
-586,93332,145
-587,93477,145
-588,93622,138
-589,93760,179
-590,93939,149
-591,94088,149
-592,94237,149
-593,94386,162
-594,94548,150
-595,94698,133
-596,94831,124
-597,94955,186
-598,95141,150
-599,95291,145
-600,95436,182
-601,95618,227
-602,95845,143
-603,95988,190
-604,96178,190
-605,96368,141
-606,96509,190
-607,96699,158
-608,96857,161
-609,97018,113
-610,97131,217
-611,97348,162
-612,97510,136
-613,97646,189
-614,97835,156
-615,97991,140
-616,98131,196
-617,98327,174
-618,98501,205
-619,98706,209
-620,98915,155
-621,99070,150
-622,99220,164
-623,99384,211
-624,99595,178
-625,99773,151
-626,99924,196
-627,100120,143
-628,100263,186
-629,100449,170
-630,100619,181
-631,100800,162
-632,100962,211
-633,101173,161
-634,101334,213
-635,101547,142
-636,101689,141
-637,101830,145
-638,101975,145
-639,102120,179
-640,102299,141
-641,102440,147
-642,102587,137
-643,102724,145
-644,102869,125
-645,102994,155
-646,103149,138
-647,103287,123
-648,103410,166
-649,103576,139
-650,103715,213
-651,103928,134
-652,104062,167
-653,104229,205
-654,104434,154
-655,104588,156
-656,104744,169
-657,104913,174
-658,105087,155
-659,105242,153
-660,105395,168
-661,105563,192
-662,105755,204
-663,105959,146
-664,106105,166
-665,106271,128
-666,106399,132
-667,106531,158
-668,106689,114
-669,106803,165
-670,106968,204
-671,107172,173
-672,107345,134
-673,107479,135
-674,107614,134
-675,107748,136
-676,107884,203
-677,108087,153
-678,108240,192
-679,108432,138
-680,108570,183
-681,108753,152
-682,108905,175
-683,109080,183
-684,109263,126
-685,109389,140
-686,109529,179
-687,109708,151
-688,109859,191
-689,110050,165
-690,110215,139
-691,110354,160
-692,110514,120
-693,110634,128
-694,110762,205
-695,110967,189
-696,111156,142
-697,111298,145
-698,111443,145
-699,111588,162
-700,111750,153
-701,111903,182
-702,112085,170
-703,112255,143
-704,112398,226
-705,112624,181
-706,112805,196
-707,113001,124
-708,113125,155
-709,113280,163
-710,113443,189
-711,113632,172
-712,113804,232
-713,114036,149
-714,114185,132
-715,114317,172
-716,114489,122
-717,114611,164
-718,114775,146
-719,114921,180
-720,115101,152
-721,115253,159
-722,115412,134
-723,115546,149
-724,115695,161
-725,115856,115
-726,115971,124
-727,116095,142
-728,116237,183
-729,116420,139
-730,116559,165
-731,116724,142
-732,116866,179
-733,117045,210
-734,117255,157
-735,117412,163
-736,117575,115
-737,117690,168
-738,117858,157
-739,118015,165
-740,118180,184
-741,118364,157
-742,118521,169
-743,118690,136
-744,118826,117
-745,118943,160
-746,119103,138
-747,119241,167
-748,119408,170
-749,119578,166
-750,119744,132
-751,119876,215
-752,120091,208
-753,120299,169
-754,120468,149
-755,120617,181
-756,120798,132
-757,120930,173
-758,121103,141
-759,121244,131
-760,121375,157
-761,121532,175
-762,121707,136
-763,121843,166
-764,122009,145
-765,122154,145
-766,122299,147
-767,122446,180
-768,122626,143
-769,122769,182
-770,122951,160
-771,123111,197
-772,123308,172
-773,123480,156
-774,123636,185
-775,123821,155
-776,123976,154
-777,124130,159
-778,124289,149
-779,124438,189
-780,124627,183
-781,124810,193
-782,125003,230
-783,125233,214
-784,125447,187
-785,125634,182
-786,125816,137
-787,125953,138
-788,126091,204
-789,126295,146
-790,126441,170
-791,126611,162
-792,126773,146
-793,126919,116
-794,127035,202
-795,127237,180
-796,127417,155
-797,127572,198
-798,127770,153
-799,127923,131
-800,128054,142
-801,128196,182
-802,128378,159
-803,128537,171
-804,128708,172
-805,128880,167
-806,129047,177
-807,129224,118
-808,129342,141
-809,129483,172
-810,129655,209
-811,129864,158
-812,130022,146
-813,130168,166
-814,130334,207
-815,130541,195
-816,130736,151
-817,130887,145
-818,131032,145
-819,131177,155
-820,131332,144
-821,131476,160
-822,131636,134
-823,131770,167
-824,131937,137
-825,132074,160
-826,132234,159
-827,132393,175
-828,132568,145
-829,132713,150
-830,132863,198
-831,133061,138
-832,133199,174
-833,133373,135
-834,133508,152
-835,133660,145
-836,133805,132
-837,133937,205
-838,134142,160
-839,134302,161
-840,134463,161
-841,134624,159
-842,134783,138
-843,134921,150
-844,135071,217
-845,135288,152
-846,135440,181
-847,135621,159
-848,135780,116
-849,135896,135
-850,136031,143
-851,136174,145
-852,136319,212
-853,136531,163
-854,136694,169
-855,136863,151
-856,137014,184
-857,137198,146
-858,137344,136
-859,137480,157
-860,137637,185
-861,137822,184
-862,138006,198
-863,138204,196
-864,138400,212
-865,138612,147
-866,138759,198
-867,138957,173
-868,139130,163
-869,139293,211
-870,139504,161
-871,139665,148
-872,139813,189
-873,140002,169
-874,140171,118
-875,140289,145
-876,140434,145
-877,140579,172
-878,140751,168
-879,140919,136
-880,141055,136
-881,141191,190
-882,141381,181
-883,141562,149
-884,141711,142
-885,141853,137
-886,141990,154
-887,142144,140
-888,142284,167
-889,142451,218
-890,142669,155
-891,142824,171
-892,142995,143
-893,143138,147
-894,143285,191
-895,143476,173
-896,143649,176
-897,143825,161
-898,143986,159
-899,144145,165
-900,144310,139
-901,144449,163
-902,144612,180
-903,144792,149
-904,144941,209
-905,145150,127
-906,145277,146
-907,145423,177
-908,145600,140
-909,145740,177
-910,145917,144
-911,146061,150
-912,146211,189
-913,146400,217
-914,146617,220
-915,146837,151
-916,146988,128
-917,147116,148
-918,147264,188
-919,147452,142
-920,147594,123
-921,147717,237
-922,147954,131
-923,148085,156
-924,148241,175
-925,148416,155
-926,148571,198
-927,148769,145
-928,148914,145
-929,149059,215
-930,149274,157
-931,149431,114
-932,149545,153
-933,149698,168
-934,149866,163
-935,150029,187
-936,150216,210
-937,150426,140
-938,150566,114
-939,150680,159
-940,150839,169
-941,151008,128
-942,151136,201
-943,151337,153
-944,151490,178
-945,151668,131
-946,151799,114
-947,151913,218
-948,152131,199
-949,152330,210
-950,152540,150
-951,152690,147
-952,152837,164
-953,153001,168
-954,153169,152
-955,153321,185
-956,153506,121
-957,153627,184
-958,153811,142
-959,153953,209
-960,154162,164
-961,154326,161
-962,154487,145
-963,154632,147
-964,154779,145
-965,154924,132
-966,155056,149
-967,155205,143
-968,155348,166
-969,155514,171
-970,155685,137
-971,155822,194
-972,156016,170
-973,156186,143
-974,156329,222
-975,156551,193
-976,156744,167
-977,156911,169
-978,157080,153
-979,157233,160
-980,157393,156
-981,157549,186
-982,157735,141
-983,157876,168
-984,158044,158
-985,158202,133
-986,158335,195
-987,158530,175
-988,158705,142
-989,158847,123
-990,158970,128
-991,159098,136
-992,159234,170
-993,159404,187
-994,159591,158
-995,159749,145
-996,159894,145
-997,160039,138
-998,160177,136
-999,160313,192
-1000,160505,209
-1001,160714,151
-1002,160865,213
-1003,161078,148
-1004,161226,155
-1005,161381,174
-1006,161555,140
-1007,161695,126
-1008,161821,197
-1009,162018,174
-1010,162192,149
-1011,162341,154
-1012,162495,130
-1013,162625,121
-1014,162746,155
-1015,162901,150
-1016,163051,181
-1017,163232,169
-1018,163401,138
-1019,163539,138
-1020,163677,138
-1021,163815,145
-1022,163960,145
-1023,164105,144
-1024,164249,173
-1025,164422,178
-1026,164600,167
-1027,164767,142
-1028,164909,180
-1029,165089,180
-1030,165269,138
-1031,165407,179
-1032,165586,150
-1033,165736,151
-1034,165887,148
-1035,166035,170
-1036,166205,165
-1037,166370,160
-1038,166530,106
-1039,166636,214
-1040,166850,153
-1041,167003,152
-1042,167155,151
-1043,167306,147
-1044,167453,190
-1045,167643,171
-1046,167814,186
-1047,168000,123
-1048,168123,152
-1049,168275,177
-1050,168452,176
-1051,168628,150
-1052,168778,151
-1053,168929,138
-1054,169067,184
-1055,169251,173
-1056,169424,156
-1057,169580,155
-1058,169735,140
-1059,169875,159
-1060,170034,124
-1061,170158,193
-1062,170351,158
-1063,170509,145
-1064,170654,145
-1065,170799,205
-1066,171004,154
-1067,171158,174
-1068,171332,166
-1069,171498,200
-1070,171698,185
-1071,171883,218
-1072,172101,125
-1073,172226,170
-1074,172396,152
-1075,172548,137
-1076,172685,162
-1077,172847,153
-1078,173000,185
-1079,173185,215
-1080,173400,159
-1081,173559,178
-1082,173737,207
-1083,173944,161
-1084,174105,207
-1085,174312,127
-1086,174439,126
-1087,174565,183
-1088,174748,152
-1089,174900,160
-1090,175060,107
-1091,175167,191
-1092,175358,181
-1093,175539,169
-1094,175708,189
-1095,175897,195
-1096,176092,143
-1097,176235,145
-1098,176380,150
-1099,176530,118
-1100,176648,156
-1101,176804,145
-1102,176949,145
-1103,177094,176
-1104,177270,144
-1105,177414,129
-1106,177543,160
-1107,177703,133
-1108,177836,157
-1109,177993,135
-1110,178128,176
-1111,178304,227
-1112,178531,191
-1113,178722,143
-1114,178865,152
-1115,179017,197
-1116,179214,140
-1117,179354,126
-1118,179480,182
-1119,179662,206
-1120,179868,199
-1121,180067,217
-1122,180284,243
-1123,180527,157
-1124,180684,150
-1125,180834,167
-1126,181001,182
-1127,181183,211
-1128,181394,129
-1129,181523,165
-1130,181688,149
-1131,181837,149
-1132,181986,207
-1133,182193,145
-1134,182338,145
-1135,182483,199
-1136,182682,139
-1137,182821,122
-1138,182943,165
-1139,183108,143
-1140,183251,122
-1141,183373,158
-1142,183531,158
-1143,183689,151
-1144,183840,227
-1145,184067,162
-1146,184229,146
-1147,184375,166
-1148,184541,138
-1149,184679,110
-1150,184789,129
-1151,184918,158
-1152,185076,168
-1153,185244,172
-1154,185416,167
-1155,185583,204
-1156,185787,128
-1157,185915,130
-1158,186045,160
-1159,186205,178
-1160,186383,141
-1161,186524,143
-1162,186667,156
-1163,186823,171
-1164,186994,141
-1165,187135,165
-1166,187300,146
-1167,187446,167
-1168,187613,129
-1169,187742,166
-1170,187908,203
-1171,188111,190
-1172,188301,163
-1173,188464,172
-1174,188636,138
-1175,188774,171
-1176,188945,136
-1177,189081,153
-1178,189234,145
-1179,189379,145
-1180,189524,173
-1181,189697,160
-1182,189857,180
-1183,190037,165
-1184,190202,157
-1185,190359,144
-1186,190503,154
-1187,190657,162
-1188,190819,136
-1189,190955,154
-1190,191109,138
-1191,191247,216
-1192,191463,165
-1193,191628,164
-1194,191792,160
-1195,191952,168
-1196,192120,149
-1197,192269,135
-1198,192404,154
-1199,192558,152
-1200,192710,183
-1201,192893,181
-1202,193074,138
-1203,193212,134
-1204,193346,125
-1205,193471,146
-1206,193617,155
-1207,193772,132
-1208,193904,161
-1209,194065,167
-1210,194232,166
-1211,194398,147
-1212,194545,200
-1213,194745,132
-1214,194877,147
-1215,195024,134
-1216,195158,145
-1217,195303,145
-1218,195448,159
-1219,195607,154
-1220,195761,172
-1221,195933,144
-1222,196077,186
-1223,196263,114
-1224,196377,150
-1225,196527,184
-1226,196711,175
-1227,196886,164
-1228,197050,152
-1229,197202,171
-1230,197373,129
-1231,197502,139
-1232,197641,150
-1233,197791,170
-1234,197961,137
-1235,198098,155
-1236,198253,198
-1237,198451,236
-1238,198687,210
-1239,198897,198
-1240,199095,171
-1241,199266,202
-1242,199468,176
-1243,199644,205
-1244,199849,160
-1245,200009,145
-1246,200154,145
-1247,200299,175
-1248,200474,139
-1249,200613,189
-1250,200802,130
-1251,200932,183
-1252,201115,166
-1253,201281,195
-1254,201476,187
-1255,201663,175
-1256,201838,142
-1257,201980,156
-1258,202136,166
-1259,202302,161
-1260,202463,133
-1261,202596,220
-1262,202816,164
-1263,202980,186
-1264,203166,179
-1265,203345,129
-1266,203474,138
-1267,203612,147
-1268,203759,177
-1269,203936,156
-1270,204092,119
-1271,204211,164
-1272,204375,201
-1273,204576,156
-1274,204732,161
-1275,204893,139
-1276,205032,160
-1277,205192,183
-1278,205375,147
-1279,205522,171
-1280,205693,145
-1281,205838,145
-1282,205983,141
-1283,206124,105
-1284,206229,232
-1285,206461,193
-1286,206654,134
-1287,206788,170
-1288,206958,139
-1289,207097,150
-1290,207247,110
-1291,207357,145
-1292,207502,158
-1293,207660,181
-1294,207841,146
-1295,207987,146
-1296,208133,196
-1297,208329,196
-1298,208525,154
-1299,208679,190
-1300,208869,171
-1301,209040,189
-1302,209229,156
-1303,209385,173
-1304,209558,151
-1305,209709,191
-1306,209900,155
-1307,210055,206
-1308,210261,189
-1309,210450,130
-1310,210580,181
-1311,210761,169
-1312,210930,143
-1313,211073,136
-1314,211209,161
-1315,211370,119
-1316,211489,176
-1317,211665,200
-1318,211865,112
-1319,211977,161
-1320,212138,136
-1321,212274,248
-1322,212522,158
-1323,212680,142
-1324,212822,194
-1325,213016,175
-1326,213191,139
-1327,213330,159
-1328,213489,148
-1329,213637,145
-1330,213782,145
-1331,213927,179
-1332,214106,164
-1333,214270,168
-1334,214438,185
-1335,214623,200
-1336,214823,135
-1337,214958,147
-1338,215105,170
-1339,215275,201
-1340,215476,130
-1341,215606,133
-1342,215739,133
-1343,215872,133
-1344,216005,143
-1345,216148,165
-1346,216313,130
-1347,216443,131
-1348,216574,179
-1349,216753,151
-1350,216904,162
-1351,217066,143
-1352,217209,142
-1353,217351,168
-1354,217519,163
-1355,217682,139
-1356,217821,141
-1357,217962,188
-1358,218150,130
-1359,218280,56
-1360,218336,179
-1361,218515,161
-1362,218676,147
-1363,218823,136
-1364,218959,149
-1365,219108,177
-1366,219285,135
-1367,219420,167
-1368,219587,141
-1369,219728,139
-1370,219867,164
-1371,220031,158
-1372,220189,145
-1373,220334,142
-1374,220476,145
-1375,220621,145
-1376,220766,179
-1377,220945,157
-1378,221102,167
-1379,221269,134
-1380,221403,181
-1381,221584,222
-1382,221806,198
-1383,222004,153
-1384,222157,145
-1385,222302,137
-1386,222439,163
-1387,222602,201
-1388,222803,158
-1389,222961,142
-1390,223103,206
-1391,223309,181
-1392,223490,144
-1393,223634,171
-1394,223805,171
-1395,223976,145
-1396,224121,145
-1397,224266,137
-1398,224403,162
-1399,224565,182
-1400,224747,56
-1401,224803,182
-1402,224985,160
-1403,225145,202
-1404,225347,119
-1405,225466,170
-1406,225636,164
-1407,225800,144
-1408,225944,127
-1409,226071,176
-1410,226247,166
-1411,226413,163
-1412,226576,158
-1413,226734,156
-1414,226890,148
-1415,227038,170
-1416,227208,152
-1417,227360,149
-1418,227509,162
-1419,227671,152
-1420,227823,168
-1421,227991,145
-1422,228136,184
-1423,228320,169
-1424,228489,132
-1425,228621,173
-1426,228794,143
-1427,228937,161
-1428,229098,140
-1429,229238,144
-1430,229382,170
-1431,229552,161
-1432,229713,120
-1433,229833,186
-1434,230019,147
-1435,230166,147
-1436,230313,151
-1437,230464,174
-1438,230638,173
-1439,230811,138
-1440,230949,123
-1441,231072,164
-1442,231236,148
-1443,231384,122
-1444,231506,131
-1445,231637,149
-1446,231786,136
-1447,231922,149
-1448,232071,146
-1449,232217,163
-1450,232380,181
-1451,232561,156
-1452,232717,150
-1453,232867,165
-1454,233032,144
-1455,233176,143
-1456,233319,191
-1457,233510,127
-1458,233637,159
-1459,233796,174
-1460,233970,192
-1461,234162,178
-1462,234340,149
-1463,234489,177
-1464,234666,191
-1465,234857,134
-1466,234991,153
-1467,235144,114
-1468,235258,159
-1469,235417,123
-1470,235540,129
-1471,235669,172
-1472,235841,228
-1473,236069,157
-1474,236226,154
-1475,236380,151
-1476,236531,135
-1477,236666,109
-1478,236775,184
-1479,236959,118
-1480,237077,159
-1481,237236,197
-1482,237433,207
-1483,237640,188
-1484,237828,184
-1485,238012,146
-1486,238158,189
-1487,238347,186
-1488,238533,138
-1489,238671,150
-1490,238821,151
-1491,238972,169
-1492,239141,177
-1493,239318,154
-1494,239472,139
-1495,239611,142
-1496,239753,131
-1497,239884,185
-1498,240069,143
-1499,240212,163
-1500,240375,145
-1501,240520,145
-1502,240665,176
-1503,240841,160
-1504,241001,130
-1505,241131,139
-1506,241270,182
-1507,241452,166
-1508,241618,152
-1509,241770,149
-1510,241919,128
-1511,242047,178
-1512,242225,143
-1513,242368,152
-1514,242520,164
-1515,242684,175
-1516,242859,143
-1517,243002,139
-1518,243141,125
-1519,243266,181
-1520,243447,108
-1521,243555,160
-1522,243715,126
-1523,243841,114
-1524,243955,158
-1525,244113,124
-1526,244237,143
-1527,244380,152
-1528,244532,165
-1529,244697,146
-1530,244843,151
-1531,244994,154
-1532,245148,142
-1533,245290,162
-1534,245452,122
-1535,245574,172
-1536,245746,153
-1537,245899,156
-1538,246055,197
-1539,246252,136
-1540,246388,156
-1541,246544,171
-1542,246715,149
-1543,246864,224
-1544,247088,123
-1545,247211,153
-1546,247364,115
-1547,247479,154
-1548,247633,148
-1549,247781,153
-1550,247934,144
-1551,248078,139
-1552,248217,146
-1553,248363,144
-1554,248507,168
-1555,248675,184
-1556,248859,141
-1557,249000,161
-1558,249161,162
-1559,249323,142
-1560,249465,207
-1561,249672,200
-1562,249872,148
-1563,250020,207
-1564,250227,178
-1565,250405,184
-1566,250589,136
-1567,250725,135
-1568,250860,150
-1569,251010,154
-1570,251164,210
-1571,251374,173
-1572,251547,167
-1573,251714,152
-1574,251866,112
-1575,251978,201
-1576,252179,145
-1577,252324,164
-1578,252488,145
-1579,252633,155
-1580,252788,135
-1581,252923,180
-1582,253103,168
-1583,253271,166
-1584,253437,135
-1585,253572,171
-1586,253743,141
-1587,253884,145
-1588,254029,136
-1589,254165,172
-1590,254337,184
-1591,254521,222
-1592,254743,163
-1593,254906,108
-1594,255014,135
-1595,255149,159
-1596,255308,161
-1597,255469,162
-1598,255631,126
-1599,255757,156
-1600,255913,157
-1601,256070,121
-1602,256191,173
-1603,256364,192
-1604,256556,193
-1605,256749,171
-1606,256920,223
-1607,257143,136
-1608,257279,134
-1609,257413,157
-1610,257570,185
-1611,257755,133
-1612,257888,167
-1613,258055,121
-1614,258176,195
-1615,258371,196
-1616,258567,161
-1617,258728,166
-1618,258894,145
-1619,259039,145
-1620,259184,187
-1621,259371,152
-1622,259523,115
-1623,259638,160
-1624,259798,213
-1625,260011,145
-1626,260156,157
-1627,260313,140
-1628,260453,184
-1629,260637,148
-1630,260785,142
-1631,260927,141
-1632,261068,167
-1633,261235,211
-1634,261446,157
-1635,261603,192
-1636,261795,142
-1637,261937,142
-1638,262079,140
-1639,262219,126
-1640,262345,145
-1641,262490,194
-1642,262684,172
-1643,262856,150
-1644,263006,170
-1645,263176,140
-1646,263316,187
-1647,263503,155
-1648,263658,118
-1649,263776,119
-1650,263895,137
-1651,264032,145
-1652,264177,148
-1653,264325,159
-1654,264484,158
-1655,264642,113
-1656,264755,180
-1657,264935,140
-1658,265075,163
-1659,265238,213
-1660,265451,150
-1661,265601,136
-1662,265737,168
-1663,265905,158
-1664,266063,162
-1665,266225,142
-1666,266367,126
-1667,266493,168
-1668,266661,143
-1669,266804,145
-1670,266949,151
-1671,267100,180
-1672,267280,202
-1673,267482,161
-1674,267643,184
-1675,267827,169
-1676,267996,156
-1677,268152,134
-1678,268286,139
-1679,268425,141
-1680,268566,146
-1681,268712,127
-1682,268839,173
-1683,269012,223
-1684,269235,161
-1685,269396,170
-1686,269566,151
-1687,269717,158
-1688,269875,137
-1689,270012,155
-1690,270167,129
-1691,270296,167
-1692,270463,141
-1693,270604,199
-1694,270803,124
-1695,270927,150
-1696,271077,142
-1697,271219,161
-1698,271380,146
-1699,271526,125
-1700,271651,177
-1701,271828,155
-1702,271983,186
-1703,272169,125
-1704,272294,159
-1705,272453,154
-1706,272607,143
-1707,272750,191
-1708,272941,171
-1709,273112,151
-1710,273263,213
-1711,273476,148
-1712,273624,142
-1713,273766,124
-1714,273890,156
-1715,274046,157
-1716,274203,154
-1717,274357,136
-1718,274493,129
-1719,274622,113
-1720,274735,147
-1721,274882,130
-1722,275012,154
-1723,275166,145
-1724,275311,135
-1725,275446,176
-1726,275622,134
-1727,275756,166
-1728,275922,166
-1729,276088,150
-1730,276238,164
-1731,276402,164
-1732,276566,187
-1733,276753,182
-1734,276935,103
-1735,277038,186
-1736,277224,189
-1737,277413,214
-1738,277627,214
-1739,277841,129
-1740,277970,188
-1741,278158,123
-1742,278281,135
-1743,278416,188
-1744,278604,154
-1745,278758,146
-1746,278904,154
-1747,279058,159
-1748,279217,169
-1749,279386,147
-1750,279533,145
-1751,279678,145
-1752,279823,150
-1753,279973,127
-1754,280100,176
-1755,280276,179
-1756,280455,165
-1757,280620,195
-1758,280815,135
-1759,280950,141
-1760,281091,165
-1761,281256,138
-1762,281394,186
-1763,281580,160
-1764,281740,189
-1765,281929,212
-1766,282141,174
-1767,282315,168
-1768,282483,176
-1769,282659,149
-1770,282808,159
-1771,282967,133
-1772,283100,175
-1773,283275,145
-1774,283420,274
-1775,283694,149
-1776,283843,129
-1777,283972,109
-1778,284081,151
-1779,284232,154
-1780,284386,195
-1784,284581,155
-1785,284736,180
-1786,284916,169
-1787,285085,182
-1788,285267,167
-1789,285434,191
-1790,285625,168
-1791,285793,197
-1792,285990,191
-1793,286181,165
-1794,286346,155
-1795,286501,134
-1797,286635,162
-1798,286797,156
-1799,286953,141
-1800,287094,152
-1801,287246,137
-1802,287383,172
-1803,287555,124
-1804,287679,182
-1805,287861,154
-1806,288015,154
-1807,288169,157
-1808,288326,124
-1809,288450,122
-1810,288572,200
-1811,288772,160
-1812,288932,114
-1813,289046,176
-1814,289222,160
-1815,289382,139
-1816,289521,197
-1817,289718,168
-1818,289886,178
-1819,290064,143
-1820,290207,162
-1821,290369,216
-1822,290585,179
-1823,290764,156
-1824,290920,151
-1825,291071,137
-1826,291208,148
-1827,291356,155
-1828,291511,184
-1829,291695,176
-1831,291871,170
-1832,292041,169
-1833,292210,147
-1834,292357,141
-1835,292498,191
-1836,292689,118
-1837,292807,114
-1838,292921,118
-1839,293039,141
-1840,293180,180
-1841,293360,132
-1842,293492,186
-1843,293678,138
-1844,293816,132
-1845,293948,165
-1846,294113,216
-1847,294329,170
-1848,294499,218
-1849,294717,165
-1850,294882,126
-1851,295008,136
-1852,295144,135
-1853,295279,205
-1854,295484,252
-1855,295736,187
-1856,295923,156
-1857,296079,164
-1858,296243,158
-1859,296401,179
-1860,296580,131
-1861,296711,183
-1862,296894,127
-1863,297021,107
-1864,297128,146
-1865,297274,128
-1866,297402,142
-1867,297544,138
-1868,297682,127
-1869,297809,167
-1870,297976,164
-1871,298140,145
-1872,298285,145
-1873,298430,152
-1874,298582,179
-1875,298761,225
-1876,298986,173
-1877,299159,119
-1878,299278,174
-1879,299452,136
-1880,299588,143
-1881,299731,152
-1882,299883,197
-1883,300080,136
-1884,300216,152
-1885,300368,133
-1886,300501,159
-1887,300660,166
-1888,300826,232
-1889,301058,138
-1890,301196,162
-1891,301358,196
-1892,301554,194
-1893,301748,179
-1894,301927,191
-1895,302118,222
-1896,302340,107
-1897,302447,145
-1898,302592,182
-1899,302774,116
-1900,302890,160
-1901,303050,131
-1902,303181,185
-1903,303366,151
-1904,303517,179
-1905,303696,171
-1906,303867,183
-1907,304050,162
-1908,304212,192
-1909,304404,152
-1910,304556,125
-1911,304681,125
-1912,304806,163
-1913,304969,176
-1914,305145,178
-1915,305323,148
-1916,305471,135
-1918,305606,118
-1919,305724,167
-1920,305891,141
-1921,306032,128
-1922,306160,154
-1923,306314,175
-1924,306489,143
-1925,306632,143
-1926,306775,160
-1927,306935,152
-1928,307087,178
-1929,307265,177
-1930,307442,205
-1931,307647,165
-1932,307812,165
-1933,307977,152
-1934,308129,131
-1935,308260,173
-1936,308433,192
-1937,308625,184
-1938,308809,144
-1939,308953,184
-1940,309137,155
-1941,309292,216
-1942,309508,159
-1943,309667,174
-1944,309841,116
-1945,309957,178
-1946,310135,145
-1947,310280,147
-1948,310427,213
-1949,310640,150
-1950,310790,180
-1951,310970,153
-1952,311123,144
-1953,311267,148
-1954,311415,143
-1955,311558,171
-1956,311729,185
-1957,311914,124
-1958,312038,151
-1959,312189,121
-1960,312310,159
-1961,312469,126
-1962,312595,143
-1964,312738,109
-1965,312847,168
-1966,313015,186
-1967,313201,146
-1968,313347,155
-1969,313502,147
-1970,313649,160
-1971,313809,143
-1972,313952,143
-1973,314095,178
-1974,314273,173
-1975,314446,201
-1976,314647,155
-1977,314802,184
-1978,314986,137
-1979,315123,136
-1980,315259,126
-1981,315385,114
-1982,315499,149
-1983,315648,168
-1984,315816,140
-1985,315956,167
-1986,316123,172
-1987,316295,126
-1988,316421,151
-1989,316572,123
-1990,316695,134
-1991,316829,179
-1992,317008,159
-1993,317167,154
-1994,317321,198
-1995,317519,122
-1996,317641,141
-1997,317782,164
-1998,317946,154
-1999,318100,107
-2000,318207,196
-2001,318403,169
-2002,318572,127
-2003,318699,168
-2004,318867,224
-2005,319091,180
-2006,319271,117
-2007,319388,131
-2008,319519,171
-2009,319690,163
-2010,319853,179
-2011,320032,175
-2012,320207,179
-2013,320386,146
-2014,320532,118
-2015,320650,145
-2016,320795,130
-2017,320925,185
-2018,321110,136
-2019,321246,177
-2020,321423,173
-2021,321596,156
-2022,321752,145
-2023,321897,160
-2024,322057,152
-2025,322209,157
-2026,322366,148
-2027,322514,143
-2028,322657,143
-2029,322800,156
-2030,322956,155
-2031,323111,169
-2032,323280,152
-2033,323432,152
-2034,323584,135
-2035,323719,149
-2036,323868,141
-2037,324009,126
-2038,324135,154
-2039,324289,150
-2040,324439,135
-2041,324574,130
-2042,324704,131
-2043,324835,172
-2044,325007,133
-2045,325140,147
-2046,325287,152
-2047,325439,137
-2048,325576,155
-2049,325731,167
-2050,325898,153
-2051,326051,160
-2052,326211,108
-2053,326319,165
-2054,326484,191
-2055,326675,166
-2056,326841,145
-2057,326986,127
-2058,327113,133
-2059,327246,148
-2060,327394,138
-2061,327532,123
-2062,327655,132
-2063,327787,144
-2064,327931,144
-2065,328075,187
-2066,328262,160
-2067,328422,172
-2068,328594,145
-2069,328739,142
-2070,328881,119
-2071,329000,175
-2072,329175,141
-2073,329316,112
-2074,329428,212
-2075,329640,140
-2076,329780,127
-2077,329907,162
-2078,330069,110
-2079,330179,189
-2080,330368,143
-2081,330511,143
-2082,330654,144
-2083,330798,150
-2084,330948,131
-2085,331079,139
-2086,331218,137
-2087,331355,144
-2088,331499,158
-2089,331657,153
-2090,331810,166
-2091,331976,179
-2092,332155,124
-2093,332279,188
-2094,332467,174
-2126,332641,135
-2127,332776,155
-2128,332931,151
-2129,333082,165
-2130,333247,186
-2131,333433,175
-2132,333608,165
-2133,333773,161
-2134,333934,169
-2135,334103,155
-2136,334258,175
-2137,334433,202
-2138,334635,170
-2139,334805,195
-2140,335000,218
-2141,335218,121
-2142,335339,102
-2143,335441,112
-2144,335553,172
-2145,335725,158
-2146,335883,172
-2147,336055,156
-2148,336211,121
-2149,336332,172
-2150,336504,152
-2151,336656,148
-2152,336804,138
-2153,336942,190
-2154,337132,161
-2155,337293,121
-2156,337414,139
-2157,337553,145
-2158,337698,116
-2159,337814,188
-2160,338002,163
-2161,338165,182
-2162,338347,158
-2163,338505,130
-2164,338635,140
-2165,338775,181
-2166,338956,181
-2167,339137,155
-2168,339292,165
-2169,339457,130
-2170,339587,131
-2171,339718,126
-2172,339844,145
-2173,339989,143
-2174,340132,193
-2175,340325,157
-2176,340482,186
-2177,340668,205
-2178,340873,140
-2179,341013,171
-2180,341184,121
-2181,341305,142
-2182,341447,177
-2183,341624,168
-2184,341792,218
-2185,342010,160
-2186,342170,135
-2187,342305,151
-2188,342456,175
-2189,342631,153
-2190,342784,157
-2191,342941,180
-2192,343121,167
-2193,343288,143
-2194,343431,128
-2195,343559,229
-2196,343788,191
-2197,343979,154
-2198,344133,166
-2199,344299,154
-2200,344453,161
-2201,344614,132
-2202,344746,149
-2203,344895,197
-2204,345092,164
-2205,345256,128
-2206,345384,171
-2207,345555,190
-2208,345745,154
-2209,345899,195
-2210,346094,153
-2211,346247,144
-2212,346391,144
-2213,346535,163
-2214,346698,190
-2215,346888,152
-2216,347040,133
-2217,347173,181
-2218,347354,130
-2219,347484,150
-2220,347634,151
-2221,347785,141
-2222,347926,126
-2223,348052,148
-2224,348200,161
-2225,348361,136
-2226,348497,261
-2227,348758,122
-2228,348880,142
-2229,349022,208
-2230,349230,145
-2231,349375,167
-2232,349542,144
-2233,349686,175
-2234,349861,189
-2235,350050,131
-2236,350181,114
-2237,350295,122
-2238,350417,177
-2239,350594,136
-2240,350730,175
-2241,350905,187
-2242,351092,131
-2243,351223,111
-2244,351334,147
-2245,351481,196
-2246,351677,167
-2247,351844,140
-2248,351984,164
-2249,352148,154
-2250,352302,192
-2251,352494,148
-2252,352642,136
-2253,352778,170
-2254,352948,149
-2255,353097,180
-2256,353277,168
-2257,353445,153
-2258,353598,174
-2259,353772,157
-2260,353929,169
-2261,354098,157
-2262,354255,163
-2263,354418,136
-2264,354554,138
-2265,354692,144
-2266,354836,145
-2267,354981,127
-2268,355108,148
-2269,355256,177
-2270,355433,124
-2271,355557,160
-2272,355717,179
-2273,355896,113
-2274,356009,147
-2275,356156,147
-2276,356303,137
-2277,356440,139
-2278,356579,131
-2279,356710,146
-2280,356856,182
-2281,357038,128
-2282,357166,177
-2283,357343,153
-2284,357496,131
-2285,357627,185
-2286,357812,179
-2287,357991,119
-2288,358110,161
-2289,358271,110
-2290,358381,172
-2291,358553,144
-2292,358697,227
-2293,358924,173
-2294,359097,200
-2295,359297,224
-2296,359521,163
-2297,359684,132
-2298,359816,144
-2299,359960,134
-2300,360094,133
-2301,360227,181
-2302,360408,169
-2303,360577,182
-2304,360759,111
-2305,360870,222
-2306,361092,170
-2307,361262,152
-2308,361414,145
-2309,361559,162
-2310,361721,132
-2311,361853,158
-2312,362011,179
-2313,362190,138
-2314,362328,187
-2315,362515,149
-2316,362664,149
-2317,362813,164
-2318,362977,176
-2319,363153,136
-2320,363289,144
-2321,363433,143
-2322,363576,143
-2323,363719,162
-2324,363881,130
-2325,364011,154
-2326,364165,192
-2327,364357,168
-2328,364525,164
-2329,364689,143
-2330,364832,197
-2331,365029,183
-2332,365212,140
-2333,365352,197
-2334,365549,184
-2335,365733,137
-2336,365870,197
-2337,366067,124
-2338,366191,128
-2339,366319,173
-2340,366492,140
-2341,366632,135
-2342,366767,222
-2343,366989,156
-2344,367145,148
-2345,367293,167
-2346,367460,137
-2347,367597,161
-2348,367758,160
-2349,367918,153
-2350,368071,159
-2351,368230,175
-2352,368405,141
-2353,368546,208
-2354,368754,118
-2355,368872,182
-2356,369054,148
-2357,369202,144
-2358,369346,156
-2359,369502,221
-2360,369723,137
-2361,369860,144
-2362,370004,148
-2363,370152,170
-2364,370322,154
-2365,370476,160
-2366,370636,195
-2367,370831,204
-2368,371035,149
-2369,371184,185
-2370,371369,144
-2371,371513,143
-2372,371656,143
-2373,371799,156
-2374,371955,149
-2375,372104,144
-2376,372248,165
-2377,372413,153
-2378,372566,168
-2379,372734,132
-2380,372866,197
-2381,373063,176
-2382,373239,188
-2383,373427,175
-2384,373602,176
-2385,373778,158
-2386,373936,162
-2387,374098,193
-2388,374291,134
-2389,374425,208
-2390,374633,186
-2391,374819,143
-2392,374962,129
-2393,375091,172
-2394,375263,169
-2395,375432,143
-2396,375575,237
-2397,375812,192
-2398,376004,169
-2399,376173,138
-2400,376311,136
-2401,376447,182
-2402,376629,165
-2403,376794,157
-2404,376951,147
-2405,377098,179
-2406,377277,143
-2407,377420,150
-2408,377570,148
-2409,377718,172
-2410,377890,169
-2411,378059,185
-2412,378244,167
-2413,378411,174
-2414,378585,187
-2415,378772,208
-2416,378980,178
-2417,379158,153
-2418,379311,158
-2419,379469,186
-2420,379655,212
-2421,379867,171
-2422,380038,162
-2423,380200,141
-2424,380341,183
-2425,380524,207
-2426,380731,185
-2427,380916,143
-2428,381059,142
-2429,381201,148
-2430,381349,199
-2431,381548,135
-2432,381683,149
-2433,381832,168
-2434,382000,135
-2435,382135,180
-2436,382315,148
-2437,382463,192
-2438,382655,133
-2439,382788,181
-2440,382969,170
-2441,383139,142
-2442,383281,129
-2443,383410,168
-2444,383578,153
-2445,383731,180
-2446,383911,121
-2447,384032,158
-2448,384190,190
-2449,384380,216
-2450,384596,198
-2451,384794,169
-2452,384963,154
-2453,385117,180
-2454,385297,108
-2455,385405,147
-2456,385552,164
-2457,385716,139
-2458,385855,159
-2459,386014,140
-2460,386154,179
-2461,386333,143
-2462,386476,201
-2463,386677,128
-2464,386805,171
-2465,386976,166
-2466,387142,150
-2467,387292,192
-2468,387484,167
-2469,387651,228
-2470,387879,149
-2471,388028,131
-2472,388159,154
-2473,388313,147
-2474,388460,167
-2475,388627,124
-2476,388751,155
-2477,388906,171
-2478,389077,154
-2479,389231,126
-2480,389357,134
-2481,389491,161
-2482,389652,123
-2483,389775,129
-2484,389904,177
-2485,390081,168
-2486,390249,143
-2487,390392,143
-2488,390535,134
-2489,390669,199
-2490,390868,152
-2491,391020,139
-2492,391159,148
-2493,391307,171
-2494,391478,153
-2495,391631,153
-2496,391784,129
-2497,391913,123
-2498,392036,56
-2499,392092,121
-2500,392213,177
-2501,392390,189
-2502,392579,163
-2503,392742,143
-2504,392885,196
-2505,393081,201
-2506,393282,233
-2507,393515,161
-2508,393676,121
-2509,393797,170
-2510,393967,161
-2511,394128,146
-2512,394274,151
-2513,394425,165
-2514,394590,148
-2515,394738,155
-2516,394893,151
-2517,395044,170
-2518,395214,131
-2519,395345,159
-2520,395504,134
-2521,395638,152
-2522,395790,142
-2523,395932,123
-2524,396055,174
-2525,396229,202
-2526,396431,214
-2527,396645,202
-2528,396847,145
-2529,396992,170
-2530,397162,197
-2531,397359,151
-2532,397510,187
-2533,397697,171
-2534,397868,152
-2535,398020,153
-2536,398173,143
-2537,398316,143
-2538,398459,123
-2539,398582,134
-2540,398716,149
-2541,398865,163
-2542,399028,151
-2543,399179,175
-2544,399354,186
-2545,399540,159
-2546,399699,173
-2547,399872,184
-2548,400056,156
-2549,400212,231
-2550,400443,219
-2551,400662,191
-2552,400853,176
-2553,401029,162
-2555,401191,179
-2556,401370,146
-2557,401516,163
-2558,401679,189
-2559,401868,131
-2560,401999,162
-2561,402161,138
-2562,402299,191
-2563,402490,142
-2564,402632,176
-2565,402808,127
-2566,402935,133
-2567,403068,163
-2568,403231,164
-2569,403395,170
-2570,403565,157
-2571,403722,151
-2572,403873,193
-2573,404066,126
-2574,404192,154
-2575,404346,178
-2576,404524,161
-2577,404685,223
-2578,404908,184
-2579,405092,142
-2580,405234,119
-2581,405353,153
-2582,405506,134
-2583,405640,169
-2584,405809,152
-2585,405961,145
-2586,406106,162
-2587,406268,137
-2588,406405,201
-2589,406606,177
-2590,406783,198
-2591,406981,216
-2592,407197,142
-2593,407339,182
-2594,407521,130
-2595,407651,142
-2596,407793,150
-2597,407943,137
-2598,408080,134
-2599,408214,153
-2600,408367,124
-2601,408491,151
-2602,408642,157
-2603,408799,127
-2604,408926,178
-2605,409104,189
-2606,409293,189
-2607,409482,148
-2608,409630,147
-2609,409777,129
-2610,409906,149
-2611,410055,159
-2612,410214,177
-2613,410391,116
-2614,410507,171
-2615,410678,151
-2616,410829,146
-2617,410975,189
-2618,411164,227
-2619,411391,152
-2620,411543,123
-2621,411666,167
-2622,411833,130
-2623,411963,153
-2624,412116,179
-2625,412295,132
-2626,412427,132
-2627,412559,194
-2628,412753,149
-2629,412902,137
-2630,413039,143
-2631,413182,155
-2632,413337,175
-2633,413512,133
-2634,413645,169
-2635,413814,159
-2636,413973,165
-2637,414138,156
-2638,414294,153
-2639,414447,201
-2640,414648,183
-2641,414831,195
-2642,415026,166
-2643,415192,166
-2644,415358,153
-2645,415511,140
-2646,415651,158
-2647,415809,196
-2648,416005,174
-2649,416179,130
-2650,416309,209
-2651,416518,114
-2652,416632,130
-2653,416762,190
-2654,416952,160
-2655,417112,145
-2656,417257,170
-2657,417427,197
-2658,417624,163
-2659,417787,120
-2660,417907,150
-2661,418057,177
-2662,418234,193
-2663,418427,123
-2664,418550,175
-2665,418725,198
-2666,418923,140
-2667,419063,185
-2668,419248,141
-2669,419389,161
-2670,419550,216
-2671,419766,177
-2672,419943,144
-2673,420087,161
-2674,420248,128
-2675,420376,165
-2676,420541,158
-2677,420699,165
-2678,420864,201
-2679,421065,148
-2680,421213,124
-2681,421337,156
-2682,421493,164
-2683,421657,127
-2684,421784,150
-2685,421934,124
-2686,422058,160
-2687,422218,151
-2688,422369,141
-2689,422510,135
-2690,422645,183
-2691,422828,141
-2692,422969,212
-2693,423181,125
-2694,423306,113
-2695,423419,167
-2696,423586,125
-2697,423711,170
-2698,423881,132
-2699,424013,132
-2700,424145,138
-2701,424283,163
-2702,424446,174
-2703,424620,163
-2704,424783,167
-2705,424950,113
-2706,425063,156
-2707,425219,153
-2708,425372,169
-2709,425541,157
-2710,425698,186
-2711,425884,147
-2712,426031,140
-2713,426171,172
-2714,426343,200
-2715,426543,141
-2716,426684,151
-2717,426835,194
-2718,427029,204
-2719,427233,160
-2720,427393,157
-2721,427550,160
-2722,427710,162
-2723,427872,192
-2724,428064,183
-2725,428247,181
-2726,428428,135
-2727,428563,152
-2728,428715,146
-2729,428861,152
-2730,429013,160
-2731,429173,188
-2732,429361,144
-2733,429505,143
-2734,429648,165
-2735,429813,152
-2736,429965,150
-2737,430115,167
-2738,430282,170
-2739,430452,132
-2740,430584,159
-2741,430743,172
-2742,430915,139
-2743,431054,143
-2744,431197,143
-2745,431340,160
-2746,431500,196
-2747,431696,184
-2748,431880,149
-2749,432029,157
-2750,432186,191
-2751,432377,129
-2752,432506,192
-2753,432698,142
-2754,432840,217
-2755,433057,188
-2756,433245,173
-2757,433418,153
-2758,433571,149
-2759,433720,164
-2760,433884,204
-2761,434088,134
-2762,434222,151
-2763,434373,172
-2764,434545,161
-2765,434706,171
-2766,434877,187
-2767,435064,224
-2768,435288,227
-2769,435515,98
-2770,435613,172
-2771,435785,178
-2772,435963,182
-2773,436145,202
-2774,436347,155
-2775,436502,160
-2776,436662,174
-2777,436836,170
-2778,437006,175
-2779,437181,147
-2780,437328,134
-2781,437462,148
-2782,437610,194
-2783,437804,151
-2784,437955,148
-2785,438103,143
-2786,438246,193
-2787,438439,201
-2788,438640,172
-2789,438812,155
-2790,438967,206
-2791,439173,122
-2792,439295,216
-2793,439511,196
-2794,439707,166
-2795,439873,207
-2796,440080,161
-2797,440241,165
-2798,440406,148
-2799,440554,107
-2800,440661,245
-2801,440906,166
-2802,441072,140
-2803,441212,143
-2804,441355,143
-2805,441498,147
-2806,441645,224
-2807,441869,133
-2808,442002,162
-2809,442164,206
-2810,442370,173
-2811,442543,130
-2812,442673,180
-2813,442853,177
-2814,443030,142
-2815,443172,149
-2816,443321,201
-2817,443522,162
-2818,443684,145
-2819,443829,191
-2820,444020,170
-2821,444190,161
-2822,444351,132
-2823,444483,174
-2824,444657,145
-2825,444802,165
-2826,444967,133
-2827,445100,163
-2828,445263,139
-2829,445402,164
-2830,445566,146
-2831,445712,176
-2832,445888,186
-2833,446074,166
-2834,446240,204
-2835,446444,119
-2836,446563,156
-2837,446719,140
-2838,446859,183
-2839,447042,134
-2840,447176,56
-2841,447232,160
-2842,447392,172
-2843,447564,140
-2844,447704,119
-2845,447823,174
-2846,447997,166
-2847,448163,163
-2848,448326,143
-2849,448469,192
-2850,448661,179
-2851,448840,158
-2852,448998,180
-2853,449178,134
-2854,449312,179
-2855,449491,157
-2856,449648,130
-2857,449778,189
-2858,449967,168
-2859,450135,185
-2860,450320,145
-2861,450465,130
-2862,450595,245
-2863,450840,118
-2864,450958,204
-2865,451162,257
-2866,451419,135
-2867,451554,126
-2868,451680,180
-2869,451860,193
-2870,452053,164
-2871,452217,169
-2872,452386,130
-2873,452516,173
-2874,452689,168
-2875,452857,111
-2876,452968,185
-2877,453153,141
-2878,453294,131
-2879,453425,168
-2880,453593,136
-2881,453729,143
-2882,453872,174
-2883,454046,150
-2884,454196,145
-2885,454341,127
-2886,454468,127
-2887,454595,150
-2888,454745,129
-2889,454874,170
-2890,455044,162
-2891,455206,154
-2892,455360,143
-2893,455503,131
-2894,455634,215
-2895,455849,147
-2896,455996,138
-2897,456134,183
-2898,456317,184
-2899,456501,173
-2900,456674,158
-2901,456832,126
-2902,456958,129
-2903,457087,174
-2904,457261,140
-2905,457401,133
-2906,457534,130
-2907,457664,171
-2908,457835,142
-2909,457977,183
-2910,458160,185
-2911,458345,143
-2912,458488,143
-2913,458631,168
-2914,458799,188
-2915,458987,144
-2916,459131,152
-2917,459283,114
-2918,459397,184
-2919,459581,214
-2920,459795,184
-2921,459979,142
-2922,460121,183
-2923,460304,172
-2924,460476,142
-2925,460618,169
-2926,460787,151
-2927,460938,186
-2928,461124,152
-2929,461276,166
-2930,461442,123
-2931,461565,168
-2932,461733,187
-2933,461920,133
-2934,462053,166
-2935,462219,152
-2936,462371,154
-2937,462525,140
-2938,462665,145
-2939,462810,128
-2940,462938,149
-2941,463087,199
-2942,463286,153
-2943,463439,141
-2944,463580,148
-2945,463728,142
-2946,463870,173
-2947,464043,152
-2948,464195,120
-2949,464315,149
-2950,464464,137
-2951,464601,148
-2952,464749,125
-2953,464874,201
-2954,465075,130
-2955,465205,146
-2956,465351,134
-2957,465485,128
-2958,465613,162
-2959,465775,193
-2960,465968,183
-2961,466151,216
-2962,466367,136
-2963,466503,155
-2964,466658,192
-2965,466850,162
-2966,467012,139
-2967,467151,193
-2968,467344,160
-2969,467504,159
-2970,467663,207
-2971,467870,143
-2972,468013,178
-2973,468191,185
-2974,468376,179
-2975,468555,118
-2976,468673,169
-2977,468842,130
-2978,468972,167
-2979,469139,145
-2980,469284,183
-2981,469467,153
-2982,469620,166
-2983,469786,138
-2984,469924,175
-2985,470099,169
-2986,470268,146
-2987,470414,189
-2988,470603,177
-2989,470780,135
-2990,470915,181
-2991,471096,186
-2992,471282,134
-2993,471416,215
-2994,471631,171
-2995,471802,144
-2996,471946,181
-2997,472127,170
-2998,472297,161
-2999,472458,153
-3000,472611,177
-3001,472788,124
-3002,472912,171
-3003,473083,186
-3004,473269,158
-3005,473427,145
-3006,473572,143
-3007,473715,143
-3008,473858,209
-3009,474067,169
-3010,474236,165
-3011,474401,138
-3012,474539,131
-3013,474670,130
-3014,474800,117
-3015,474917,137
-3016,475054,152
-3017,475206,149
-3018,475355,213
-3019,475568,164
-3020,475732,107
-3021,475839,159
-3022,475998,126
-3023,476124,138
-3024,476262,168
-3025,476430,152
-3026,476582,174
-3027,476756,111
-3028,476867,251
-3029,477118,160
-3030,477278,165
-3031,477443,142
-3032,477585,158
-3033,477743,147
-3034,477890,150
-3035,478040,141
-3036,478181,172
-3037,478353,149
-3038,478502,122
-3039,478624,198
-3040,478822,139
-3041,478961,176
-3042,479137,149
-3043,479286,165
-3044,479451,152
-3045,479603,202
-3046,479805,147
-3047,479952,202
-3048,480154,136
-3049,480290,156
-3050,480446,146
-3051,480592,125
-3052,480717,173
-3053,480890,129
-3054,481019,147
-3055,481166,150
-3056,481316,177
-3057,481493,156
-3058,481649,211
-3059,481860,127
-3060,481987,56
-3061,482043,194
-3062,482237,158
-3063,482395,141
-3064,482536,124
-3065,482660,180
-3066,482840,124
-3067,482964,202
-3068,483166,143
-3069,483309,143
-3070,483452,171
-3071,483623,163
-3072,483786,158
-3073,483944,121
-3074,484065,103
-3075,484168,162
-3076,484330,124
-3077,484454,182
-3078,484636,161
-3079,484797,124
-3080,484921,182
-3081,485103,196
-3082,485299,289
-3083,485588,160
-3084,485748,174
-3085,485922,214
-3086,486136,144
-3087,486280,146
-3088,486426,140
-3089,486566,161
-3090,486727,170
-3091,486897,122
-3092,487019,166
-3093,487185,196
-3094,487381,170
-3095,487551,164
-3096,487715,145
-3097,487860,142
-3098,488002,172
-3099,488174,174
-3100,488348,181
-3101,488529,136
-3102,488665,155
-3103,488820,160
-3104,488980,183
-3105,489163,214
-3106,489377,179
-3107,489556,203
-3108,489759,129
-3109,489888,168
-3110,490056,176
-3111,490232,161
-3112,490393,161
-3113,490554,128
-3114,490682,190
-3115,490872,174
-3116,491046,175
-3117,491221,184
-3118,491405,271
-3119,491676,180
-3120,491856,127
-3121,491983,127
-3122,492110,159
-3123,492269,196
-3124,492465,144
-3125,492609,167
-3126,492776,201
-3127,492977,154
-3128,493131,136
-3129,493267,154
-3130,493421,123
-3131,493544,152
-3132,493696,175
-3133,493871,173
-3134,494044,130
-3135,494174,219
-3136,494393,146
-3137,494539,126
-3138,494665,118
-3139,494783,209
-3140,494992,169
-3141,495161,201
-3142,495362,161
-3143,495523,200
-3144,495723,165
-3145,495888,176
-3146,496064,190
-3147,496254,140
-3148,496394,135
-3149,496529,146
-3150,496675,175
-3151,496850,187
-3152,497037,139
-3153,497176,164
-3154,497340,139
-3155,497479,56
-3156,497535,152
-3157,497687,189
-3158,497876,166
-3159,498042,187
-3160,498229,129
-3161,498358,150
-3162,498508,192
-3163,498700,190
-3164,498890,137
-3165,499027,186
-3166,499213,147
-3167,499360,125
-3168,499485,137
-3169,499622,189
-3170,499811,185
-3171,499996,178
-3172,500174,170
-3173,500344,160
-3174,500504,156
-3175,500660,155
-3176,500815,129
-3177,500944,169
-3178,501113,121
-3179,501234,179
-3180,501413,147
-3181,501560,140
-3182,501700,158
-3183,501858,191
-3184,502049,116
-3185,502165,136
-3186,502301,178
-3187,502479,193
-3188,502672,141
-3189,502813,202
-3190,503015,199
-3191,503214,168
-3192,503382,198
-3193,503580,163
-3194,503743,160
-3195,503903,149
-3196,504052,215
-3197,504267,170
-3198,504437,153
-3199,504590,149
-3200,504739,140
-3201,504879,151
-3202,505030,151
-3203,505181,143
-3204,505324,179
-3205,505503,143
-3206,505646,143
-3207,505789,132
-3208,505921,166
-3209,506087,144
-3210,506231,189
-3211,506420,131
-3212,506551,182
-3213,506733,152
-3214,506885,164
-3215,507049,119
-3216,507168,140
-3217,507308,166
-3218,507474,120
-3219,507594,178
-3220,507772,180
-3221,507952,146
-3222,508098,131
-3223,508229,166
-3224,508395,208
-3225,508603,194
-3226,508797,187
-3227,508984,170
-3228,509154,202
-3229,509356,180
-3230,509536,161
-3231,509697,135
-3232,509832,162
-3233,509994,195
-3234,510189,169
-3235,510358,158
-3236,510516,169
-3237,510685,132
-3238,510817,141
-3239,510958,213
-3240,511171,160
-3241,511331,125
-3242,511456,178
-3243,511634,144
-3244,511778,158
-3245,511936,142
-3246,512078,148
-3247,512226,160
-3248,512386,215
-3249,512601,187
-3250,512788,182
-3251,512970,134
-3252,513104,190
-3253,513294,166
-3254,513460,227
-3255,513687,220
-3256,513907,137
-3257,514044,122
-3258,514166,111
-3259,514277,119
-3260,514396,152
-3261,514548,166
-3262,514714,167
-3263,514881,218
-3264,515099,126
-3265,515225,153
-3266,515378,199
-3267,515577,150
-3268,515727,116
-3269,515843,186
-3270,516029,139
-3271,516168,173
-3272,516341,180
-3273,516521,211
-3274,516732,173
-3275,516905,140
-3276,517045,134
-3277,517179,137
-3278,517316,143
-3279,517459,143
-3280,517602,129
-3281,517731,195
-3282,517926,132
-3283,518058,170
-3284,518228,168
-3285,518396,128
-3286,518524,157
-3287,518681,166
-3288,518847,149
-3289,518996,169
-3290,519165,159
-3291,519324,155
-3292,519479,169
-3293,519648,151
-3294,519799,162
-3295,519961,145
-3296,520106,163
-3297,520269,148
-3298,520417,133
-3299,520550,156
-3300,520706,165
-3301,520871,132
-3302,521003,146
-3303,521149,185
-3304,521334,167
-3305,521501,139
-3306,521640,182
-3307,521822,164
-3308,521986,158
-3309,522144,159
-3310,522303,116
-3311,522419,201
-3312,522620,124
-3313,522744,158
-3314,522902,133
-3315,523035,127
-3316,523162,165
-3317,523327,143
-3318,523470,137
-3319,523607,146
-3320,523753,159
-3321,523912,140
-3322,524052,172
-3323,524224,192
-3324,524416,156
-3325,524572,187
-3326,524759,168
-3327,524927,155
-3328,525082,141
-3329,525223,168
-3330,525391,146
-3331,525537,147
-3332,525684,179
-3333,525863,164
-3334,526027,188
-3335,526215,154
-3336,526369,151
-3337,526520,192
-3338,526712,140
-3339,526852,160
-3340,527012,153
-3341,527165,154
-3342,527319,182
-3343,527501,118
-3344,527619,123
-3345,527742,152
-3346,527894,171
-3347,528065,155
-3348,528220,215
-3349,528435,124
-3350,528559,165
-3351,528724,165
-3352,528889,196
-3353,529085,149
-3354,529234,172
-3355,529406,233
-3356,529639,188
-3357,529827,241
-3358,530068,151
-3359,530219,127
-3360,530346,203
-3361,530549,153
-3362,530702,164
-3363,530866,152
-3364,531018,159
-3365,531177,140
-3366,531317,208
-3367,531525,148
-3368,531673,127
-3369,531800,127
-3370,531927,107
-3371,532034,137
-3372,532171,172
-3373,532343,143
-3374,532486,189
-3375,532675,169
-3376,532844,159
-3377,533003,174
-3378,533177,171
-3379,533348,136
-3380,533484,216
-3381,533700,170
-3382,533870,205
-3383,534075,152
-3384,534227,124
-3385,534351,137
-3386,534488,135
-3387,534623,215
-3388,534838,145
-3389,534983,164
-3390,535147,177
-3391,535324,171
-3392,535495,174
-3393,535669,163
-3394,535832,183
-3395,536015,157
-3396,536172,166
-3397,536338,179
-3398,536517,151
-3399,536668,148
-3400,536816,190
-3401,537006,173
-3402,537179,131
-3403,537310,127
-3404,537437,169
-3405,537606,159
-3406,537765,173
-3407,537938,150
-3408,538088,130
-3409,538218,142
-3410,538360,192
-3411,538552,173
-3412,538725,176
-3413,538901,170
-3414,539071,149
-3415,539220,185
-3416,539405,56
-3417,539461,142
-3418,539603,138
-3419,539741,189
-3420,539930,151
-3421,540081,149
-3422,540230,168
-3423,540398,141
-3424,540539,189
-3425,540728,193
-3426,540921,156
-3427,541077,146
-3428,541223,148
-3429,541371,143
-3430,541514,143
-3431,541657,140
-3432,541797,158
-3433,541955,141
-3434,542096,177
-3435,542273,135
-3436,542408,119
-3437,542527,157
-3438,542684,132
-3439,542816,149
-3440,542965,151
-3441,543116,135
-3442,543251,131
-3443,543382,157
-3444,543539,157
-3445,543696,200
-3446,543896,165
-3447,544061,139
-3448,544200,146
-3449,544346,165
-3450,544511,166
-3451,544677,145
-3452,544822,132
-3453,544954,129
-3454,545083,155
-3455,545238,272
-3456,545510,149
-3457,545659,136
-3458,545795,112
-3459,545907,164
-3460,546071,155
-3461,546226,153
-3462,546379,138
-3463,546517,206
-3464,546723,173
-3465,546896,151
-3466,547047,192
-3467,547239,133
-3468,547372,164
-3469,547536,197
-3470,547733,169
-3471,547902,155
-3472,548057,150
-3473,548207,193
-3474,548400,198
-3475,548598,132
-3476,548730,170
-3477,548900,152
-3478,549052,168
-3479,549220,164
-3480,549384,198
-3481,549582,194
-3482,549776,165
-3483,549941,175
-3484,550116,134
-3485,550250,159
-3486,550409,175
-3487,550584,136
-3488,550720,133
-3489,550853,171
-3490,551024,167
-3491,551191,192
-3492,551383,150
-3493,551533,167
-3494,551700,166
-3495,551866,56
-3496,551922,185
-3497,552107,141
-3498,552248,179
-3499,552427,229
-3500,552656,144
-3501,552800,132
-3502,552932,203
-3503,553135,152
-3504,553287,163
-3505,553450,182
-3506,553632,129
-3507,553761,198
-3508,553959,119
-3509,554078,203
-3510,554281,132
-3511,554413,158
-3512,554571,115
-3513,554686,129
-3514,554815,162
-3515,554977,148
-3516,555125,143
-3517,555268,143
-3518,555411,180
-3519,555591,177
-3520,555768,121
-3521,555889,135
-3522,556024,56
-3523,556080,208
-3524,556288,155
-3525,556443,180
-3526,556623,192
-3527,556815,152
-3528,556967,137
-3529,557104,158
-3530,557262,160
-3531,557422,185
-3532,557607,162
-3533,557769,171
-3534,557940,141
-3535,558081,132
-3536,558213,152
-3537,558365,140
-3538,558505,153
-3539,558658,189
-3540,558847,138
-3541,558985,187
-3542,559172,172
-3543,559344,120
-3544,559464,140
-3545,559604,126
-3546,559730,137
-3547,559867,207
-3548,560074,134
-3549,560208,221
-3550,560429,165
-3551,560594,152
-3552,560746,163
-3553,560909,154
-3554,561063,165
-3555,561228,149
-3556,561377,146
-3557,561523,154
-3558,561677,198
-3559,561875,148
-3560,562023,184
-3561,562207,120
-3562,562327,192
-3563,562519,155
-3564,562674,143
-3565,562817,143
-3566,562960,167
-3567,563127,145
-3568,563272,173
-3569,563445,192
-3570,563637,56
-3571,563693,118
-3572,563811,173
-3573,563984,183
-3574,564167,173
-3575,564340,152
-3576,564492,162
-3577,564654,164
-3578,564818,150
-3579,564968,119
-3580,565087,150
-3581,565237,180
-3582,565417,169
-3583,565586,184
-3584,565770,184
-3585,565954,173
-3586,566127,134
-3587,566261,119
-3588,566380,136
-3589,566516,153
-3590,566669,160
-3591,566829,175
-3592,567004,141
-3593,567145,212
-3594,567357,134
-3595,567491,239
-3596,567730,160
-3597,567890,145
-3598,568035,151
-3599,568186,109
-3600,568295,153
-3601,568448,188
-3602,568636,162
-3603,568798,152
-3604,568950,174
-3605,569124,127
-3606,569251,135
-3607,569386,56
-3608,569442,133
-3609,569575,135
-3610,569710,143
-3611,569853,106
-3612,569959,132
-3613,570091,195
-3614,570286,148
-3615,570434,179
-3616,570613,170
-3617,570783,166
-3618,570949,56
-3619,571005,145
-3620,571150,187
-3621,571337,197
-3622,571534,189
-3623,571723,179
-3624,571902,184
-3625,572086,167
-3626,572253,56
-3627,572309,137
-3628,572446,162
-3629,572608,213
-3630,572821,203
-3631,573024,165
-3632,573189,151
-3633,573340,167
-3634,573507,130
-3635,573637,212
-3636,573849,151
-3637,574000,137
-3638,574137,174
-3639,574311,149
-3640,574460,143
-3641,574603,143
-3642,574746,126
-3643,574872,161
-3644,575033,156
-3645,575189,118
-3646,575307,149
-3647,575456,147
-3648,575603,147
-3649,575750,176
-3650,575926,185
-3651,576111,207
-3652,576318,157
-3653,576475,203
-3654,576678,173
-3655,576851,199
-3656,577050,152
-3657,577202,139
-3658,577341,193
-3659,577534,152
-3660,577686,142
-3661,577828,133
-3662,577961,177
-3663,578138,122
-3664,578260,154
-3665,578414,157
-3666,578571,152
-3667,578723,177
-3668,578900,140
-3669,579040,111
-3670,579151,143
-3671,579294,179
-3672,579473,138
-3673,579611,139
-3674,579750,166
-3675,579916,177
-3676,580093,132
-3677,580225,154
-3678,580379,208
-3679,580587,142
-3680,580729,197
-3681,580926,171
-3682,581097,144
-3683,581241,151
-3684,581392,125
-3685,581517,129
-3686,581646,177
-3687,581823,195
-3688,582018,173
-3689,582191,201
-3690,582392,176
-3691,582568,150
-3692,582718,157
-3693,582875,179
-3694,583054,149
-3695,583203,204
-3696,583407,134
-3697,583541,224
-3698,583765,129
-3699,583894,128
-3700,584022,193
-3701,584215,154
-3702,584369,163
-3703,584532,144
-3704,584676,120
-3705,584796,153
-3706,584949,205
-3707,585154,110
-3708,585264,143
-3709,585407,158
-3710,585565,117
-3711,585682,159
-3712,585841,139
-3713,585980,170
-3714,586150,159
-3715,586309,143
-3716,586452,143
-3717,586595,158
-3718,586753,149
-3719,586902,133
-3720,587035,129
-3721,587164,121
-3722,587285,170
-3723,587455,180
-3724,587635,132
-3725,587767,168
-3726,587935,201
-3727,588136,160
-3728,588296,158
-3729,588454,141
-3730,588595,189
-3731,588784,198
-3732,588982,166
-3733,589148,194
-3734,589342,195
-3735,589537,196
-3736,589733,181
-3737,589914,161
-3738,590075,186
-3739,590261,204
-3740,590465,124
-3741,590589,134
-3742,590723,180
-3743,590903,125
-3744,591028,184
-3745,591212,186
-3746,591398,169
-3747,591567,191
-3748,591758,140
-3749,591898,125
-3750,592023,161
-3751,592184,136
-3752,592320,218
-3753,592538,234
-3754,592772,152
-3755,592924,121
-3756,593045,190
-3757,593235,175
-3758,593410,192
-3759,593602,130
-3760,593732,140
-3761,593872,185
-3762,594057,151
-3763,594208,133
-3764,594341,205
-3765,594546,195
-3766,594741,174
-3767,594915,158
-3768,595073,138
-3769,595211,181
-3770,595392,177
-3771,595569,135
-3772,595704,146
-3773,595850,158
-3774,596008,190
-3775,596198,163
-3776,596361,144
-3777,596505,149
-3778,596654,158
-3779,596812,150
-3780,596962,136
-3781,597098,165
-3782,597263,197
-3783,597460,161
-3784,597621,137
-3785,597758,196
-3786,597954,138
-3787,598092,158
-3788,598250,146
-3789,598396,120
-3790,598516,134
-3791,598650,184
-3792,598834,162
-3793,598996,147
-3794,599143,155
-3795,599298,144
-3796,599442,141
-3797,599583,158
-3798,599741,143
-3799,599884,143
-3800,600027,147
-3801,600174,130
-3802,600304,185
-3803,600489,131
-3804,600620,185
-3805,600805,139
-3806,600944,142
-3807,601086,132
-3808,601218,162
-3809,601380,164
-3810,601544,152
-3811,601696,173
-3812,601869,175
-3813,602044,166
-3814,602210,137
-3815,602347,211
-3816,602558,232
-3817,602790,172
-3818,602962,192
-3819,603154,200
-3820,603354,118
-3821,603472,132
-3822,603604,137
-3823,603741,56
-3824,603797,130
-3825,603927,137
-3826,604064,168
-3827,604232,123
-3828,604355,196
-3829,604551,177
-3830,604728,201
-3831,604929,151
-3832,605080,173
-3833,605253,141
-3834,605394,222
-3835,605616,132
-3836,605748,145
-3837,605893,152
-3838,606045,159
-3839,606204,131
-3840,606335,152
-3841,606487,128
-3842,606615,180
-3843,606795,162
-3844,606957,132
-3845,607089,145
-3846,607234,144
-3847,607378,153
-3848,607531,120
-3849,607651,56
-3850,607707,147
-3851,607854,162
-3852,608016,144
-3853,608160,199
-3854,608359,173
-3855,608532,193
-3856,608725,128
-3857,608853,123
-3858,608976,138
-3859,609114,149
-3860,609263,199
-3861,609462,137
-3862,609599,211
-3863,609810,139
-3864,609949,168
-3865,610117,141
-3866,610258,140
-3867,610398,189
-3868,610587,176
-3869,610763,150
-3870,610913,271
-3871,611184,129
-3872,611313,159
-3873,611472,179
-3874,611651,142
-3875,611793,143
-3876,611936,143
-3877,612079,135
-3878,612214,146
-3879,612360,167
-3880,612527,149
-3881,612676,173
-3882,612849,164
-3883,613013,179
-3884,613192,146
-3885,613338,234
-3886,613572,208
-3887,613780,190
-3888,613970,175
-3889,614145,125
-3890,614270,171
-3891,614441,186
-3892,614627,143
-3893,614770,143
-3894,614913,164
-3895,615077,160
-3896,615237,146
-3897,615383,125
-3898,615508,150
-3899,615658,175
-3900,615833,141
-3901,615974,196
-3902,616170,149
-3903,616319,147
-3904,616466,175
-3905,616641,187
-3906,616828,120
-3907,616948,158
-3908,617106,132
-3909,617238,133
-3910,617371,118
-3911,617489,125
-3912,617614,171
-3913,617785,182
-3914,617967,172
-3915,618139,181
-3916,618320,144
-3917,618464,136
-3918,618600,126
-3919,618726,153
-3920,618879,171
-3921,619050,157
-3922,619207,169
-3923,619376,176
-3924,619552,173
-3925,619725,186
-3926,619911,150
-3927,620061,184
-3928,620245,185
-3929,620430,143
-3930,620573,138
-3931,620711,177
-3932,620888,181
-3933,621069,143
-3934,621212,111
-3935,621323,174
-3936,621497,158
-3937,621655,140
-3938,621795,151
-3939,621946,147
-3940,622093,144
-3941,622237,165
-3942,622402,126
-3943,622528,165
-3944,622693,197
-3945,622890,155
-3946,623045,144
-3947,623189,172
-3948,623361,128
-3949,623489,177
-3950,623666,101
-3951,623767,165
-3952,623932,153
-3953,624085,153
-3954,624238,133
-3955,624371,191
-3956,624562,145
-3957,624707,151
-3958,624858,165
-3959,625023,172
-3960,625195,146
-3961,625341,209
-3962,625550,218
-3963,625768,147
-3964,625915,198
-3965,626113,132
-3966,626245,193
-3967,626438,195
-3968,626633,199
-3969,626832,154
-3970,626986,153
-3971,627139,166
-3972,627305,158
-3973,627463,178
-3974,627641,158
-3975,627799,155
-3976,627954,131
-3977,628085,214
-3978,628299,162
-3979,628461,160
-3980,628621,164
-3981,628785,141
-3982,628926,182
-3983,629108,143
-3984,629251,143
-3985,629394,158
-3986,629552,143
-3987,629695,124
-3988,629819,117
-3989,629936,207
-3990,630143,150
-3991,630293,148
-3992,630441,163
-3993,630604,199
-3994,630803,140
-3995,630943,152
-3996,631095,140
-3997,631235,183
-3998,631418,153
-3999,631571,132
-4000,631703,187
-4001,631890,190
-4002,632080,157
-4003,632237,184
-4004,632421,153
-4005,632574,151
-4006,632725,148
-4007,632873,161
-4008,633034,149
-4009,633183,123
-4010,633306,140
-4011,633446,199
-4012,633645,136
-4013,633781,151
-4014,633932,163
-4015,634095,136
-4016,634231,164
-4017,634395,151
-4018,634546,225
-4019,634771,159
-4020,634930,161
-4021,635091,139
-4022,635230,160
-4023,635390,149
-4024,635539,160
-4025,635699,141
-4026,635840,115
-4027,635955,195
-4028,636150,180
-4029,636330,155
-4030,636485,151
-4031,636636,127
-4032,636763,110
-4033,636873,131
-4034,637004,145
-4035,637149,170
-4036,637319,132
-4037,637451,148
-4038,637599,136
-4039,637735,147
-4040,637882,157
-4041,638039,119
-4042,638158,165
-4043,638323,176
-4044,638499,152
-4045,638651,144
-4046,638795,174
-4047,638969,158
-4048,639127,123
-4049,639250,205
-4050,639455,153
-4051,639608,138
-4052,639746,159
-4053,639905,131
-4054,640036,173
-4055,640209,141
-4056,640350,131
-4057,640481,162
-4058,640643,145
-4059,640788,144
-4060,640932,168
-4061,641100,122
-4062,641222,170
-4063,641392,176
-4064,641568,209
-4065,641777,239
-4066,642016,249
-4067,642265,148
-4068,642413,176
-4069,642589,164
-4070,642753,160
-4071,642913,166
-4072,643079,144
-4073,643223,161
-4074,643384,196
-4075,643580,147
-4076,643727,112
-4077,643839,185
-4078,644024,162
-4079,644186,166
-4080,644352,124
-4081,644476,140
-4082,644616,156
-4083,644772,211
-4084,644983,150
-4085,645133,169
-4086,645302,184
-4087,645486,143
-4088,645629,145
-4089,645774,187
-4090,645961,147
-4091,646108,167
-4092,646275,153
-4093,646428,170
-4094,646598,185
-4095,646783,125
-4096,646908,181
-4097,647089,149
-4098,647238,126
-4099,647364,145
-4100,647509,164
-4101,647673,141
-4102,647814,163
-4103,647977,158
-4104,648135,176
-4105,648311,139
-4106,648450,183
-4107,648633,157
-4108,648790,130
-4109,648920,154
-4110,649074,154
-4111,649228,151
-4112,649379,148
-4113,649527,150
-4114,649677,156
-4115,649833,122
-4116,649955,150
-4117,650105,117
-4118,650222,139
-4119,650361,135
-4120,650496,169
-4121,650665,167
-4122,650832,144
-4123,650976,160
-4124,651136,167
-4125,651303,200
-4126,651503,197
-4127,651700,148
-4128,651848,163
-4129,652011,171
-4130,652182,157
-4131,652339,177
-4132,652516,168
-4133,652684,131
-4134,652815,171
-4135,652986,160
-4136,653146,166
-4137,653312,150
-4138,653462,153
-4139,653615,191
-4140,653806,126
-4141,653932,155
-4142,654087,209
-4143,654296,148
-4144,654444,127
-4145,654571,178
-4146,654749,145
-4147,654894,166
-4148,655060,136
-4149,655196,211
-4150,655407,165
-4151,655572,186
-4152,655758,174
-4153,655932,136
-4154,656068,140
-4155,656208,152
-4156,656360,153
-4157,656513,123
-4158,656636,156
-4159,656792,162
-4160,656954,168
-4161,657122,153
-4162,657275,154
-4163,657429,133
-4164,657562,201
-4165,657763,166
-4166,657929,148
-4167,658077,158
-4168,658235,156
-4169,658391,132
-4170,658523,159
-4171,658682,161
-4172,658843,143
-4173,658986,195
-4174,659181,133
-4175,659314,154
-4176,659468,137
-4177,659605,144
-4178,659749,156
-4179,659905,161
-4180,660066,150
-4181,660216,176
-4182,660392,148
-4183,660540,149
-4184,660689,156
-4185,660845,152
-4186,660997,162
-4187,661159,129
-4188,661288,188
-4189,661476,133
-4190,661609,165
-4191,661774,125
-4192,661899,177
-4193,662076,166
-4194,662242,140
-4195,662382,166
-4196,662548,134
-4197,662682,142
-4198,662824,171
-4199,662995,168
-4200,663163,155
-4201,663318,171
-4202,663489,166
-4203,663655,143
-4204,663798,127
-4205,663925,165
-4206,664090,128
-4207,664218,158
-4208,664376,158
-4209,664534,110
-4210,664644,165
-4211,664809,152
-4212,664961,182
-4213,665143,144
-4214,665287,119
-4215,665406,152
-4216,665558,167
-4217,665725,148
-4218,665873,139
-4219,666012,153
-4220,666165,134
-4221,666299,177
-4222,666476,148
-4223,666624,153
-4224,666777,155
-4225,666932,125
-4226,667057,158
-4227,667215,171
-4228,667386,138
-4229,667524,165
-4230,667689,149
-4231,667838,183
-4232,668021,159
-4233,668180,123
-4234,668303,144
-4235,668447,155
-4236,668602,222
-4237,668824,175
-4238,668999,205
-4239,669204,130
-4240,669334,131
-4241,669465,136
-4242,669601,152
-4243,669753,147
-4244,669900,198
-4245,670098,142
-4246,670240,157
-4247,670397,205
-4248,670602,157
-4249,670759,162
-4250,670921,110
-4251,671031,143
-4252,671174,155
-4253,671329,153
-4254,671482,121
-4255,671603,120
-4256,671723,182
-4257,671905,170
-4258,672075,121
-4259,672196,138
-4260,672334,130
-4261,672464,181
-4262,672645,150
-4263,672795,170
-4264,672965,172
-4265,673137,141
-4266,673278,138
-4267,673416,146
-4268,673562,159
-4269,673721,151
-4270,673872,159
-4271,674031,152
-4272,674183,169
-4273,674352,139
-4274,674491,153
-4275,674644,182
-4276,674826,146
-4277,674972,210
-4278,675182,161
-4279,675343,167
-4280,675510,154
-4281,675664,134
-4282,675798,164
-4283,675962,200
-4284,676162,138
-4285,676300,190
-4286,676490,133
-4287,676623,141
-4288,676764,127
-4289,676891,147
-4290,677038,150
-4291,677188,151
-4292,677339,186
-4293,677525,159
-4294,677684,148
-4295,677832,163
-4296,677995,219
-4297,678214,216
-4298,678430,146
-4299,678576,158
-4300,678734,169
-4301,678903,132
-4302,679035,167
-4303,679202,158
-4304,679360,113
-4305,679473,157
-4306,679630,152
-4307,679782,140
-4308,679922,161
-4309,680083,176
-4310,680259,140
-4311,680399,167
-4312,680566,135
-4313,680701,154
-4314,680855,158
-4315,681013,156
-4316,681169,197
-4317,681366,176
-4318,681542,182
-4319,681724,180
-4320,681904,154
-4321,682058,128
-4322,682186,134
-4323,682320,153
-4324,682473,133
-4325,682606,145
-4326,682751,174
-4327,682925,143
-4328,683068,154
-4329,683222,162
-4330,683384,140
-4331,683524,151
-4332,683675,129
-4333,683804,179
-4334,683983,144
-4335,684127,157
-4337,684284,144
-4338,684428,135
-4339,684563,207
-4340,684770,166
-4341,684936,143
-4342,685079,150
-4343,685229,147
-4344,685376,139
-4345,685515,145
-4346,685660,136
-4347,685796,195
-4348,685991,157
-4349,686148,111
-4350,686259,199
-4351,686458,150
-4352,686608,144
-4353,686752,182
-4354,686934,170
-4355,687104,143
-4356,687247,158
-4357,687405,198
-4358,687603,138
-4359,687741,154
-4360,687895,164
-4361,688059,173
-4362,688232,153
-4363,688385,155
-4364,688540,176
-4365,688716,156
-4366,688872,167
-4367,689039,165
-4368,689204,165
-4369,689369,142
-4370,689511,133
-4371,689644,135
-4372,689779,197
-4373,689976,177
-4374,690153,143
-4375,690296,107
-4376,690403,180
-4377,690583,144
-4378,690727,132
-4379,690859,198
-4380,691057,159
-4381,691216,174
-4382,691390,233
-4383,691623,140
-4384,691763,143
-4385,691906,143
-4386,692049,177
-4387,692226,152
-4388,692378,133
-4389,692511,176
-4390,692687,134
-4391,692821,122
-4392,692943,119
-4393,693062,151
-4394,693213,121
-4395,693334,119
-4396,693453,122
-4397,693575,201
-4398,693776,132
-4399,693908,161
-4400,694069,216
-4401,694285,176
-4402,694461,166
-4403,694627,139
-4404,694766,148
-4405,694914,158
-4406,695072,167
-4407,695239,159
-4408,695398,131
-4409,695529,178
-4410,695707,166
-4411,695873,189
-4412,696062,131
-4413,696193,189
-4414,696382,149
-4415,696531,114
-4416,696645,134
-4417,696779,195
-4418,696974,165
-4419,697139,139
-4420,697278,165
-4421,697443,155
-4422,697598,141
-4423,697739,162
-4424,697901,152
-4425,698053,130
-4426,698183,198
-4427,698381,169
-4428,698550,161
-4429,698711,166
-4430,698877,146
-4431,699023,166
-4432,699189,150
-4433,699339,122
-4434,699461,145
-4435,699606,146
-4436,699752,197
-4437,699949,144
-4438,700093,161
-4439,700254,155
-4440,700409,144
-4441,700553,151
-4442,700704,138
-4443,700842,212
-4444,701054,127
-4445,701181,127
-4446,701308,164
-4447,701472,198
-4448,701670,180
-4449,701850,149
-4450,701999,151
-4451,702150,173
-4452,702323,182
-4453,702505,132
-4454,702637,187
-4455,702824,226
-4456,703050,130
-4457,703180,151
-4458,703331,152
-4459,703483,224
-4460,703707,177
-4461,703884,153
-4462,704037,159
-4463,704196,178
-4464,704374,120
-4465,704494,204
-4466,704698,185
-4467,704883,162
-4468,705045,157
-4469,705202,139
-4470,705341,174
-4471,705515,156
-4472,705671,168
-4473,705839,215
-4474,706054,192
-4475,706246,144
-4476,706390,109
-4477,706499,158
-4478,706657,139
-4479,706796,206
-4480,707002,132
-4481,707134,195
-4482,707329,162
-4483,707491,132
-4484,707623,150
-4485,707773,159
-4486,707932,144
-4487,708076,149
-4488,708225,124
-4489,708349,128
-4490,708477,211
-4491,708688,193
-4492,708881,186
-4493,709067,184
-4494,709251,169
-4495,709420,167
-4496,709587,167
-4497,709754,177
-4498,709931,143
-4499,710074,143
-4500,710217,195
-4501,710412,175
-4502,710587,168
-4503,710755,206
-4504,710961,195
-4505,711156,123
-4506,711279,123
-4507,711402,170
-4508,711572,140
-4509,711712,187
-4510,711899,162
-4511,712061,132
-4512,712193,163
-4513,712356,187
-4514,712543,168
-4515,712711,189
-4516,712900,195
-4517,713095,176
-4518,713271,134
-4519,713405,178
-4520,713583,160
-4521,713743,188
-4522,713931,196
-4523,714127,196
-4524,714323,149
-4525,714472,153
-4526,714625,132
-4527,714757,164
-4528,714921,144
-4529,715065,193
-4530,715258,182
-4531,715440,154
-4532,715594,133
-4533,715727,235
-4534,715962,177
-4535,716139,143
-4536,716282,176
-4537,716458,149
-4538,716607,144
-4539,716751,143
-4540,716894,143
-4541,717037,164
-4542,717201,168
-4543,717369,128
-4544,717497,185
-4545,717682,151
-4546,717833,204
-4547,718037,205
-4548,718242,207
-4549,718449,152
-4550,718601,147
-4551,718748,163
-4552,718911,164
-4553,719075,134
-4554,719209,155
-4555,719364,115
-4556,719479,194
-4557,719673,140
-4558,719813,170
-4559,719983,146
-4560,720129,124
-4561,720253,147
-4562,720400,162
-4563,720562,156
-4564,720718,146
-4565,720864,329
-4566,721193,130
-4567,721323,130
-4568,721453,161
-4569,721614,112
-4570,721726,192
-4571,721918,158
-4572,722076,119
-4573,722195,185
-4574,722380,152
-4575,722532,148
-4576,722680,173
-4577,722853,149
-4578,723002,191
-4579,723193,139
-4580,723332,146
-4581,723478,200
-4582,723678,173
-4583,723851,189
-4584,724040,111
-4585,724151,175
-4586,724326,146
-4587,724472,152
-4588,724624,136
-4589,724760,155
-4590,724915,128
-4591,725043,149
-4592,725192,166
-4593,725358,156
-4594,725514,197
-4595,725711,169
-4596,725880,163
-4597,726043,172
-4598,726215,206
-4599,726421,199
-4600,726620,128
-4601,726748,144
-4602,726892,147
-4603,727039,171
-4604,727210,182
-4605,727392,127
-4606,727519,195
-4607,727714,211
-4608,727925,127
-4609,728052,127
-4610,728179,204
-4611,728383,151
-4612,728534,139
-4613,728673,186
-4614,728859,146
-4615,729005,202
-4616,729207,153
-4617,729360,113
-4618,729473,161
-4619,729634,179
-4620,729813,151
-4621,729964,228
-4622,730192,144
-4623,730336,127
-4624,730463,147
-4625,730610,173
-4626,730783,159
-4627,730942,122
-4628,731064,145
-4629,731209,164
-4630,731373,175
-4631,731548,136
-4632,731684,165
-4633,731849,184
-4634,732033,163
-4635,732196,141
-4636,732337,119
-4637,732456,161
-4638,732617,156
-4639,732773,129
-4640,732902,131
-4641,733033,152
-4642,733185,171
-4643,733356,123
-4644,733479,140
-4645,733619,132
-4646,733751,177
-4647,733928,167
-4648,734095,128
-4649,734223,216
-4650,734439,190
-4651,734629,149
-4652,734778,143
-4653,734921,149
-4654,735070,171
-4655,735241,172
-4656,735413,233
-4657,735646,176
-4658,735822,158
-4659,735980,159
-4660,736139,123
-4661,736262,143
-4662,736405,143
-4663,736548,154
-4664,736702,188
-4665,736890,171
-4666,737061,198
-4667,737259,122
-4668,737381,154
-4669,737535,200
-4670,737735,190
-4671,737925,122
-4672,738047,164
-4673,738211,182
-4674,738393,130
-4675,738523,127
-4676,738650,127
-4677,738777,165
-4678,738942,180
-4679,739122,179
-4680,739301,153
-4681,739454,137
-4682,739591,164
-4683,739755,158
-4684,739913,161
-4685,740074,120
-4686,740194,179
-4687,740373,155
-4688,740528,175
-4689,740703,106
-4690,740809,135
-4691,740944,114
-4692,741058,209
-4693,741267,173
-4694,741440,162
-4695,741602,223
-4696,741825,131
-4697,741956,162
-4698,742118,159
-4699,742277,184
-4700,742461,164
-4701,742625,190
-4702,742815,107
-4703,742922,165
-4704,743087,152
-4705,743239,145
-4706,743384,132
-4707,743516,162
-4708,743678,142
-4709,743820,160
-4710,743980,165
-4711,744145,184
-4712,744329,129
-4713,744458,176
-4714,744634,169
-4715,744803,192
-4716,744995,118
-4717,745113,176
-4718,745289,177
-4719,745466,198
-4720,745664,145
-4721,745809,158
-4722,745967,134
-4723,746101,130
-4724,746231,123
-4725,746354,151
-4726,746505,171
-4727,746676,193
-4728,746869,149
-4729,747018,159
-4730,747177,167
-4731,747344,195
-4732,747539,121
-4733,747660,138
-4734,747798,178
-4735,747976,127
-4736,748103,127
-4737,748230,129
-4738,748359,134
-4739,748493,144
-4740,748637,113
-4741,748750,190
-4742,748940,146
-4743,749086,202
-4744,749288,131
-4745,749419,173
-4746,749592,152
-4747,749744,150
-4748,749894,143
-4749,750037,141
-4750,750178,119
-4751,750297,108
-4752,750405,169
-4753,750574,148
-4754,750722,144
-4755,750866,134
-4756,751000,160
-4757,751160,136
-4758,751296,114
-4759,751410,141
-4760,751551,220
-4761,751771,173
-4762,751944,146
-4763,752090,177
-4764,752267,151
-4765,752418,222
-4766,752640,223
-4767,752863,154
-4768,753017,185
-4769,753202,205
-4770,753407,114
-4771,753521,169
-4772,753690,146
-4773,753836,138
-4774,753974,148
-4775,754122,153
-4776,754275,121
-4777,754396,176
-4778,754572,125
-4779,754697,136
-4780,754833,184
-4781,755017,126
-4782,755143,157
-4783,755300,147
-4784,755447,150
-4785,755597,162
-4786,755759,129
-4787,755888,204
-4788,756092,141
-4789,756233,130
-4790,756363,185
-4791,756548,124
-4792,756672,131
-4793,756803,214
-4794,757017,143
-4795,757160,227
-4796,757387,139
-4797,757526,206
-4798,757732,168
-4799,757900,216
-4800,758116,147
-4801,758263,161
-4802,758424,205
-4803,758629,135
-4804,758764,148
-4805,758912,212
-4806,759124,151
-4807,759275,199
-4808,759474,151
-4809,759625,132
-4810,759757,131
-4811,759888,141
-4812,760029,169
-4813,760198,111
-4814,760309,178
-4815,760487,206
-4816,760693,151
-4817,760844,162
-4818,761006,153
-4819,761159,162
-4820,761321,174
-4821,761495,162
-4822,761657,169
-4823,761826,153
-4824,761979,209
-4825,762188,143
-4826,762331,143
-4827,762474,180
-4828,762654,173
-4829,762827,228
-4830,763055,151
-4831,763206,146
-4832,763352,126
-4833,763478,149
-4834,763627,177
-4835,763804,135
-4836,763939,180
-4837,764119,142
-4838,764261,181
-4839,764442,226
-4840,764668,127
-4841,764795,159
-4842,764954,121
-4843,765075,139
-4844,765214,141
-4845,765355,161
-4846,765516,170
-4847,765686,133
-4848,765819,160
-4849,765979,116
-4850,766095,154
-4851,766249,127
-4852,766376,186
-4853,766562,125
-4854,766687,133
-4855,766820,251
-4856,767071,154
-4857,767225,151
-4858,767376,145
-4859,767521,175
-4860,767696,192
-4861,767888,135
-4862,768023,257
-4863,768280,152
-4864,768432,151
-4865,768583,130
-4866,768713,160
-4867,768873,158
-4868,769031,185
-4869,769216,123
-4870,769339,151
-4871,769490,172
-4872,769662,143
-4873,769805,170
-4874,769975,126
-4875,770101,131
-4876,770232,176
-4877,770408,129
-4878,770537,210
-4879,770747,199
-4880,770946,132
-4881,771078,159
-4882,771237,150
-4883,771387,183
-4884,771570,165
-4885,771735,180
-4886,771915,137
-4887,772052,143
-4888,772195,240
-4889,772435,143
-4890,772578,143
-4891,772721,189
-4892,772910,146
-4893,773056,160
-4894,773216,168
-4895,773384,138
-4896,773522,160
-4897,773682,153
-4898,773835,159
-4899,773994,153
-4900,774147,164
-4901,774311,158
-4902,774469,157
-4903,774626,149
-4904,774775,156
-4905,774931,186
-4906,775117,169
-4907,775286,147
-4908,775433,142
-4909,775575,179
-4910,775754,168
-4911,775922,170
-4912,776092,152
-4913,776244,126
-4914,776370,250
-4915,776620,180
-4916,776800,135
-4917,776935,146
-4918,777081,208
-4919,777289,184
-4920,777473,121
-4921,777594,125
-4922,777719,142
-4923,777861,205
-4924,778066,162
-4925,778228,140
-4926,778368,145
-4927,778513,164
-4928,778677,127
-4929,778804,209
-4930,779013,139
-4931,779152,203
-4932,779355,159
-4933,779514,152
-4934,779666,168
-4935,779834,155
-4936,779989,216
-4937,780205,198
-4938,780403,120
-4939,780523,170
-4940,780693,197
-4941,780890,134
-4942,781024,179
-4943,781203,187
-4944,781390,165
-4945,781555,152
-4946,781707,130
-4947,781837,156
-4948,781993,164
-4949,782157,180
-4950,782337,156
-4951,782493,246
-4952,782739,158
-4953,782897,164
-4954,783061,184
-4955,783245,148
-4956,783393,169
-4957,783562,160
-4958,783722,115
-4959,783837,143
-4960,783980,143
-4961,784123,181
-4962,784304,198
-4963,784502,148
-4964,784650,184
-4965,784834,126
-4966,784960,158
-4967,785118,176
-4968,785294,137
-4969,785431,149
-4970,785580,158
-4971,785738,148
-4972,785886,119
-4973,786005,134
-4974,786139,170
-4975,786309,159
-4976,786468,132
-4977,786600,132
-4978,786732,123
-4979,786855,216
-4980,787071,173
-4981,787244,165
-4982,787409,138
-4983,787547,219
-4984,787766,184
-4985,787950,217
-4986,788167,182
-4987,788349,177
-4988,788526,174
-4989,788700,136
-4990,788836,165
-4991,789001,143
-4992,789144,143
-4993,789287,165
-4994,789452,175
-4995,789627,252
-4996,789879,162
-4997,790041,187
-4998,790228,149
-4999,790377,136
-5000,790513,152
-5001,790665,170
-5002,790835,211
-5003,791046,162
-5004,791208,173
-5005,791381,142
-5006,791523,137
-5007,791660,186
-5008,791846,186
-5009,792032,167
-5010,792199,154
-5011,792353,174
-5012,792527,194
-5013,792721,121
-5014,792842,165
-5015,793007,144
-5016,793151,171
-5017,793322,138
-5018,793460,163
-5019,793623,128
-5020,793751,180
-5021,793931,178
-5022,794109,163
-5023,794272,181
-5024,794453,145
-5025,794598,147
-5026,794745,142
-5027,794887,150
-5028,795037,143
-5029,795180,156
-5030,795336,110
-5031,795446,156
-5032,795602,163
-5033,795765,223
-5034,795988,153
-5035,796141,138
-5036,796279,205
-5037,796484,155
-5038,796639,161
-5039,796800,158
-5040,796958,129
-5041,797087,197
-5042,797284,164
-5043,797448,238
-5044,797686,137
-5045,797823,139
-5046,797962,156
-5047,798118,140
-5048,798258,203
-5049,798461,105
-5050,798566,157
-5051,798723,165
-5052,798888,157
-5053,799045,149
-5054,799194,150
-5055,799344,180
-5056,799524,166
-5057,799690,161
-5058,799851,150
-5059,800001,143
-5060,800144,143
-5061,800287,187
-5062,800474,148
-5063,800622,133
-5064,800755,159
-5065,800914,210
-5066,801124,174
-5067,801298,138
-5068,801436,152
-5069,801588,154
-5070,801742,154
-5071,801896,162
-5072,802058,134
-5073,802192,125
-5074,802317,146
-5075,802463,197
-5076,802660,186
-5077,802846,121
-5078,802967,165
-5079,803132,160
-5080,803292,151
-5081,803443,175
-5082,803618,153
-5083,803771,151
-5084,803922,141
-5085,804063,151
-5086,804214,142
-5087,804356,139
-5088,804495,163
-5089,804658,112
-5090,804770,168
-5091,804938,183
-5092,805121,177
-5093,805298,161
-5094,805459,128
-5095,805587,143
-5096,805730,154
-5097,805884,131
-5098,806015,117
-5099,806132,164
-5100,806296,137
-5101,806433,148
-5102,806581,135
-5103,806716,194
-5104,806910,163
-5105,807073,214
-5106,807287,120
-5107,807407,192
-5108,807599,182
-5109,807781,155
-5110,807936,118
-5111,808054,130
-5112,808184,186
-5113,808370,141
-5114,808511,176
-5115,808687,146
-5116,808833,145
-5117,808978,132
-5118,809110,197
-5119,809307,151
-5120,809458,196
-5121,809654,202
-5122,809856,123
-5123,809979,137
-5124,810116,132
-5125,810248,198
-5126,810446,119
-5127,810565,179
-5128,810744,154
-5129,810898,168
-5130,811066,188
-5131,811254,215
-5132,811469,190
-5133,811659,126
-5134,811785,126
-5135,811911,234
-5136,812145,160
-5137,812305,176
-5138,812481,136
-5139,812617,227
-5140,812844,168
-5141,813012,155
-5142,813167,145
-5143,813312,172
-5144,813484,156
-5145,813640,119
-5146,813759,138
-5147,813897,143
-5148,814040,143
-5149,814183,152
-5150,814335,146
-5151,814481,225
-5152,814706,204
-5153,814910,209
-5154,815119,123
-5155,815242,147
-5156,815389,187
-5157,815576,161
-5158,815737,150
-5159,815887,126
-5160,816013,131
-5161,816144,191
-5162,816335,213
-5163,816548,194
-5164,816742,168
-5165,816910,118
-5166,817028,134
-5167,817162,148
-5168,817310,164
-5169,817474,145
-5170,817619,172
-5171,817791,192
-5172,817983,151
-5173,818134,178
-5174,818312,140
-5175,818452,155
-5176,818607,159
-5177,818766,183
-5178,818949,149
-5179,819098,148
-5180,819246,171
-5181,819417,153
-5182,819570,163
-5183,819733,202
-5184,819935,156
-5185,820091,223
-5186,820314,138
-5187,820452,161
-5188,820613,141
-5189,820754,160
-5190,820914,156
-5191,821070,211
-5192,821281,203
-5193,821484,175
-5194,821659,207
-5195,821866,141
-5196,822007,159
-5197,822166,148
-5198,822314,122
-5199,822436,154
-5200,822590,169
-5201,822759,155
-5202,822914,146
-5203,823060,210
-5204,823270,145
-5205,823415,175
-5206,823590,135
-5207,823725,110
-5208,823835,127
-5209,823962,192
-5210,824154,125
-5211,824279,139
-5212,824418,137
-5213,824555,156
-5214,824711,129
-5215,824840,162
-5216,825002,157
-5217,825159,144
-5218,825303,184
-5219,825487,117
-5220,825604,132
-5221,825736,121
-5222,825857,142
-5223,825999,151
-5224,826150,179
-5225,826329,143
-5226,826472,143
-5227,826615,136
-5228,826751,141
-5229,826892,139
-5230,827031,145
-5231,827176,133
-5232,827309,150
-5233,827459,196
-5234,827655,217
-5235,827872,121
-5236,827993,138
-5237,828131,147
-5238,828278,191
-5239,828469,122
-5240,828591,220
-5241,828811,168
-5242,828979,139
-5243,829118,134
-5244,829252,176
-5245,829428,175
-5246,829603,141
-5247,829744,154
-5248,829898,204
-5249,830102,126
-5250,830228,135
-5251,830363,145
-5252,830508,187
-5253,830695,141
-5254,830836,167
-5255,831003,166
-5256,831169,118
-5257,831287,151
-5258,831438,141
-5259,831579,168
-5260,831747,153
-5261,831900,172
-5262,832072,143
-5263,832215,182
-5264,832397,142
-5265,832539,141
-5266,832680,200
-5267,832880,149
-5268,833029,112
-5269,833141,133
-5270,833274,142
-5271,833416,219
-5272,833635,199
-5273,833834,148
-5274,833982,184
-5275,834166,179
-5276,834345,121
-5277,834466,146
-5278,834612,183
-5279,834795,181
-5280,834976,156
-5281,835132,200
-5282,835332,167
-5283,835499,139
-5284,835638,213
-5285,835851,201
-5286,836052,159
-5287,836211,130
-5288,836341,143
-5289,836484,143
-5290,836627,134
-5291,836761,203
-5292,836964,139
-5293,837103,162
-5294,837265,181
-5295,837446,128
-5296,837574,157
-5297,837731,111
-5298,837842,180
-5299,838022,157
-5300,838179,195
-5301,838374,144
-5302,838518,167
-5303,838685,178
-5304,838863,126
-5305,838989,150
-5306,839139,170
-5307,839309,168
-5308,839477,205
-5309,839682,139
-5310,839821,212
-5311,840033,134
-5312,840167,174
-5313,840341,165
-5314,840506,151
-5315,840657,147
-5316,840804,195
-5317,840999,161
-5318,841160,153
-5319,841313,126
-5320,841439,168
-5321,841607,179
-5322,841786,179
-5323,841965,173
-5324,842138,133
-5325,842271,193
-5326,842464,157
-5327,842621,122
-5328,842743,135
-5329,842878,167
-5330,843045,139
-5331,843184,138
-5332,843322,165
-5333,843487,298
-5334,843785,209
-5335,843994,191
-5336,844185,118
-5337,844303,152
-5338,844455,204
-5339,844659,159
-5340,844818,197
-5341,845015,149
-5342,845164,146
-5343,845310,157
-5344,845467,159
-5345,845626,134
-5346,845760,148
-5347,845908,135
-5348,846043,166
-5349,846209,162
-5350,846371,141
-5351,846512,163
-5352,846675,132
-5353,846807,185
-5354,846992,204
-5355,847196,160
-5356,847356,160
-5357,847516,151
-5358,847667,180
-5359,847847,156
-5360,848003,157
-5361,848160,143
-5362,848303,143
-5363,848446,155
-5364,848601,157
-5365,848758,154
-5366,848912,156
-5367,849068,143
-5368,849211,166
-5369,849377,135
-5370,849512,135
-5371,849647,150
-5372,849797,148
-5373,849945,192
-5374,850137,180
-5375,850317,159
-5376,850476,160
-5377,850636,114
-5378,850750,111
-5379,850861,140
-5380,851001,171
-5381,851172,159
-5382,851331,136
-5383,851467,184
-5384,851651,204
-5385,851855,201
-5386,852056,146
-5387,852202,201
-5388,852403,107
-5389,852510,160
-5390,852670,216
-5391,852886,161
-5392,853047,175
-5393,853222,143
-5394,853365,182
-5395,853547,99
-5396,853646,190
-5397,853836,132
-5398,853968,185
-5399,854153,159
-5400,854312,222
-5401,854534,158
-5402,854692,165
-5403,854857,144
-5404,855001,183
-5405,855184,218
-5406,855402,246
-5407,855648,235
-5408,855883,117
-5409,856000,120
-5410,856120,114
-5411,856234,173
-5412,856407,145
-5413,856552,163
-5414,856715,156
-5415,856871,135
-5416,857006,196
-5417,857202,195
-5418,857397,115
-5419,857512,143
-5420,857655,143
-5421,857798,149
-5422,857947,157
-5423,858104,132
-5424,858236,140
-5425,858376,152
-5426,858528,170
-5427,858698,159
-5428,858857,207
-5429,859064,108
-5430,859172,203
-5431,859375,155
-5432,859530,141
-5433,859671,152
-5434,859823,214
-5435,860037,184
-5436,860221,219
-5437,860440,188
-5438,860628,124
-5439,860752,162
-5440,860914,126
-5441,861040,187
-5442,861227,144
-5443,861371,180
-5444,861551,120
-5445,861671,175
-5446,861846,195
-5447,862041,173
-5448,862214,156
-5449,862370,182
-5450,862552,214
-5451,862766,209
-5452,862975,145
-5453,863120,174
-5454,863294,124
-5455,863418,183
-5456,863601,195
-5457,863796,175
-5458,863971,147
-5459,864118,140
-5460,864258,135
-5461,864393,126
-5462,864519,157
-5463,864676,110
-5464,864786,184
-5465,864970,166
-5466,865136,188
-5467,865324,179
-5468,865503,131
-5469,865634,151
-5470,865785,130
-5471,865915,133
-5472,866048,159
-5473,866207,160
-5474,866367,143
-5475,866510,143
-5476,866653,182
-5477,866835,219
-5478,867054,198
-5479,867252,127
-5480,867379,144
-5481,867523,131
-5482,867654,226
-5483,867880,162
-5484,868042,186
-5485,868228,151
-5486,868379,193
-5487,868572,162
-5488,868734,216
-5489,868950,136
-5490,869086,152
-5491,869238,187
-5492,869425,161
-5493,869586,162
-5494,869748,167
-5495,869915,159
-5496,870074,161
-5497,870235,163
-5498,870398,121
-5499,870519,168
-5500,870687,156
-5501,870843,174
-5502,871017,151
-5503,871168,241
-5504,871409,181
-5505,871590,155
-5506,871745,142
-5507,871887,144
-5508,872031,147
-5509,872178,202
-5510,872380,220
-5511,872600,160
-5512,872760,208
-5513,872968,187
-5514,873155,192
-5515,873347,163
-5516,873510,112
-5517,873622,133
-5518,873755,159
-5519,873914,202
-5520,874116,142
-5521,874258,123
-5522,874381,191
-5523,874572,164
-5524,874736,197
-5525,874933,163
-5526,875096,159
-5527,875255,168
-5528,875423,116
-5529,875539,185
-5530,875724,132
-5531,875856,126
-5532,875982,177
-5533,876159,166
-5534,876325,213
-5535,876538,132
-5536,876670,132
-5537,876802,127
-5538,876929,159
-5539,877088,159
-5540,877247,159
-5541,877406,168
-5542,877574,207
-5543,877781,117
-5544,877898,166
-5545,878064,179
-5546,878243,192
-5547,878435,145
-5548,878580,132
-5549,878712,157
-5550,878869,149
-5551,879018,183
-5552,879201,178
-5553,879379,137
-5554,879516,184
-5555,879700,114
-5556,879814,158
-5557,879972,157
-5558,880129,157
-5559,880286,109
-5560,880395,107
-5561,880502,182
-5562,880684,120
-5563,880804,146
-5564,880950,112
-5565,881062,190
-5566,881252,122
-5567,881374,130
-5568,881504,213
-5569,881717,180
-5570,881897,118
-5571,882015,133
-5572,882148,175
-5573,882323,121
-5574,882444,143
-5575,882587,143
-5576,882730,117
-5577,882847,152
-5578,882999,147
-5579,883146,183
-5580,883329,174
-5581,883503,193
-5582,883696,159
-5583,883855,159
-5584,884014,159
-5585,884173,141
-5586,884314,166
-5587,884480,193
-5588,884673,115
-5589,884788,124
-5590,884912,123
-5591,885035,168
-5592,885203,145
-5593,885348,129
-5594,885477,127
-5595,885604,142
-5596,885746,162
-5597,885908,208
-5598,886116,134
-5599,886250,125
-5600,886375,145
-5601,886520,174
-5602,886694,146
-5603,886840,180
-5604,887020,143
-5605,887163,177
-5606,887340,187
-5607,887527,130
-5608,887657,126
-5609,887783,168
-5610,887951,165
-5611,888116,195
-5612,888311,151
-5613,888462,158
-5614,888620,160
-5615,888780,150
-5616,888930,127
-5617,889057,210
-5618,889267,182
-5619,889449,119
-5620,889568,119
-5621,889687,158
-5622,889845,186
-5623,890031,176
-5624,890207,198
-5625,890405,143
-5626,890548,143
-5627,890691,181
-5628,890872,145
-5629,891017,177
-5630,891194,144
-5631,891338,173
-5632,891511,174
-5633,891685,139
-5634,891824,214
-5635,892038,160
-5636,892198,132
-5637,892330,162
-5638,892492,136
-5639,892628,153
-5640,892781,186
-5641,892967,206
-5642,893173,136
-5643,893309,138
-5644,893447,177
-5645,893624,158
-5646,893782,171
-5647,893953,141
-5648,894094,144
-5649,894238,126
-5650,894364,164
-5651,894528,180
-5652,894708,145
-5653,894853,157
-5654,895010,205
-5655,895215,135
-5656,895350,164
-5657,895514,192
-5658,895706,122
-5659,895828,158
-5660,895986,116
-5661,896102,193
-5662,896295,134
-5663,896429,174
-5664,896603,170
-5665,896773,128
-5666,896901,142
-5667,897043,132
-5668,897175,142
-5669,897317,143
-5670,897460,132
-5671,897592,168
-5672,897760,223
-5673,897983,127
-5674,898110,172
-5675,898282,158
-5676,898440,121
-5677,898561,192
-5678,898753,222
-5679,898975,124
-5680,899099,158
-5681,899257,185
-5682,899442,192
-5683,899634,176
-5684,899810,167
-5685,899977,159
-5686,900136,178
-5687,900314,118
-5688,900432,169
-5689,900601,169
-5690,900770,176
-5691,900946,167
-5692,901113,137
-5693,901250,209
-5694,901459,146
-5695,901605,184
-5696,901789,208
-5697,901997,143
-5698,902140,138
-5699,902278,155
-5700,902433,178
-5701,902611,152
-5702,902763,143
-5703,902906,143
-5704,903049,147
-5705,903196,144
-5706,903340,201
-5707,903541,152
-5708,903693,183
-5709,903876,181
-5710,904057,132
-5711,904189,191
-5712,904380,136
-5713,904516,137
-5714,904653,186
-5715,904839,172
-5716,905011,190
-5717,905201,184
-5718,905385,155
-5719,905540,139
-5720,905679,197
-5721,905876,130
-5722,906006,147
-5723,906153,138
-5724,906291,148
-5725,906439,155
-5726,906594,148
-5727,906742,156
-5728,906898,126
-5729,907024,196
-5730,907220,168
-5731,907388,173
-5732,907561,117
-5733,907678,140
-5734,907818,214
-5735,908032,185
-5736,908217,156
-5737,908373,153
-5738,908526,131
-5739,908657,173
-5740,908830,227
-5741,909057,256
-5742,909313,139
-5743,909452,140
-5744,909592,177
-5745,909769,182
-5746,909951,184
-5747,910135,141
-5748,910276,171
-5749,910447,137
-5750,910584,162
-5751,910746,152
-5752,910898,224
-5753,911122,156
-5754,911278,192
-5755,911470,124
-5756,911594,176
-5757,911770,185
-5758,911955,145
-5759,912100,144
-5760,912244,145
-5761,912389,163
-5762,912552,145
-5763,912697,191
-5764,912888,153
-5765,913041,112
-5766,913153,137
-5767,913290,145
-5768,913435,146
-5769,913581,185
-5770,913766,143
-5771,913909,143
-5772,914052,115
-5773,914167,177
-5774,914344,174
-5775,914518,145
-5776,914663,176
-5777,914839,127
-5778,914966,176
-5779,915142,213
-5780,915355,162
-5781,915517,171
-5782,915688,202
-5783,915890,136
-5784,916026,188
-5785,916214,183
-5786,916397,130
-5787,916527,144
-5788,916671,143
-5789,916814,143
-5790,916957,170
-5791,917127,213
-5792,917340,130
-5793,917470,136
-5794,917606,150
-5795,917756,199
-5796,917955,138
-5797,918093,128
-5798,918221,161
-5799,918382,122
-5800,918504,151
-5801,918655,135
-5802,918790,159
-5803,918949,130
-5804,919079,163
-5805,919242,171
-5806,919413,109
-5807,919522,236
-5808,919758,165
-5809,919923,132
-5810,920055,151
-5811,920206,166
-5812,920372,56
-5813,920428,132
-5814,920560,122
-5815,920682,153
-5816,920835,166
-5817,921001,158
-5818,921159,124
-5819,921283,217
-5820,921500,132
-5821,921632,171
-5822,921803,171
-5823,921974,142
-5824,922116,147
-5825,922263,143
-5826,922406,156
-5827,922562,132
-5828,922694,144
-5829,922838,247
-5830,923085,153
-5831,923238,132
-5832,923370,143
-5833,923513,138
-5834,923651,126
-5835,923777,141
-5836,923918,175
-5837,924093,149
-5838,924242,191
-5839,924433,191
-5840,924624,149
-5841,924773,118
-5842,924891,119
-5843,925010,179
-5844,925189,184
-5845,925373,189
-5846,925562,150
-5847,925712,131
-5848,925843,113
-5849,925956,150
-5850,926106,206
-5851,926312,179
-5852,926491,108
-5853,926599,159
-5854,926758,121
-5855,926879,121
-5856,927000,176
-5857,927176,141
-5858,927317,164
-5859,927481,171
-5860,927652,197
-5861,927849,192
-5862,928041,165
-5863,928206,162
-5864,928368,145
-5865,928513,136
-5866,928649,159
-5867,928808,154
-5868,928962,217
-5869,929179,150
-5870,929329,182
-5871,929511,142
-5872,929653,111
-5873,929764,133
-5874,929897,196
-5875,930093,187
-5876,930280,197
-5877,930477,201
-5878,930678,153
-5879,930831,191
-5880,931022,179
-5881,931201,138
-5882,931339,128
-5883,931467,164
-5884,931631,129
-5885,931760,173
-5886,931933,160
-5887,932093,178
-5888,932271,132
-5889,932403,147
-5890,932550,170
-5891,932720,183
-5892,932903,168
-5893,933071,139
-5894,933210,246
-5895,933456,136
-5896,933592,140
-5897,933732,147
-5898,933879,196
-5899,934075,190
-5900,934265,117
-5901,934382,143
-5902,934525,143
-5903,934668,143
-5904,934811,170
-5905,934981,151
-5906,935132,153
-5907,935285,175
-5908,935460,154
-5909,935614,143
-5910,935757,163
-5911,935920,156
-5912,936076,138
-5913,936214,147
-5914,936361,142
-5915,936503,173
-5916,936676,148
-5917,936824,119
-5918,936943,156
-5919,937099,144
-5920,937243,179
-5921,937422,121
-5922,937543,162
-5923,937705,174
-5924,937879,171
-5925,938050,151
-5926,938201,194
-5927,938395,159
-5928,938554,135
-5929,938689,163
-5930,938852,205
-5931,939057,177
-5932,939234,173
-5933,939407,188
-5934,939595,137
-5935,939732,150
-5936,939882,146
-5937,940028,182
-5938,940210,177
-5939,940387,156
-5940,940543,153
-5941,940696,56
-5942,940752,127
-5943,940879,158
-5944,941037,157
-5945,941194,207
-5946,941401,151
-5947,941552,167
-5948,941719,176
-5949,941895,125
-5950,942020,194
-5951,942214,148
-5952,942362,164
-5953,942526,110
-5954,942636,190
-5955,942826,108
-5956,942934,122
-5957,943056,170
-5958,943226,150
-5959,943376,119
-5960,943495,156
-5961,943651,182
-5962,943833,114
-5963,943947,132
-5964,944079,148
-5965,944227,167
-5966,944394,146
-5967,944540,175
-5968,944715,148
-5969,944863,169
-5970,945032,169
-5971,945201,163
-5972,945364,216
-5973,945580,132
-5974,945712,136
-5975,945848,181
-5976,946029,163
-5977,946192,143
-5978,946335,143
-5979,946478,166
-5980,946644,144
-5981,946788,158
-5982,946946,112
-5983,947058,211
-5984,947269,172
-5985,947441,147
-5986,947588,151
-5987,947739,140
-5988,947879,137
-5989,948016,129
-5990,948145,150
-5991,948295,106
-5992,948401,163
-5993,948564,145
-5994,948709,143
-5995,948852,144
-5996,948996,146
-5997,949142,143
-5998,949285,133
-5999,949418,262
-6000,949680,188
-6001,949868,177
-6002,950045,183
-6003,950228,226
-6004,950454,128
-6005,950582,164
-6006,950746,162
-6007,950908,195
-6008,951103,187
-6009,951290,116
-6010,951406,148
-6011,951554,159
-6012,951713,148
-6013,951861,188
-6014,952049,148
-6015,952197,143
-6016,952340,209
-6017,952549,165
-6018,952714,140
-6019,952854,147
-6020,953001,151
-6021,953152,183
-6022,953335,151
-6023,953486,157
-6024,953643,152
-6025,953795,183
-6026,953978,181
-6027,954159,182
-6028,954341,174
-6029,954515,151
-6030,954666,147
-6031,954813,213
-6032,955026,200
-6033,955226,126
-6034,955352,173
-6035,955525,156
-6036,955681,143
-6037,955824,143
-6038,955967,146
-6039,956113,142
-6040,956255,181
-6041,956436,157
-6042,956593,169
-6043,956762,190
-6044,956952,154
-6045,957106,175
-6046,957281,138
-6047,957419,125
-6048,957544,122
-6049,957666,154
-6050,957820,167
-6051,957987,112
-6052,958099,153
-6053,958252,207
-6054,958459,184
-6055,958643,183
-6056,958826,133
-6057,958959,125
-6058,959084,167
-6059,959251,155
-6060,959406,155
-6061,959561,163
-6062,959724,164
-6063,959888,108
-6064,959996,132
-6065,960128,183
-6066,960311,173
-6067,960484,166
-6068,960650,173
-6069,960823,178
-6070,961001,118
-6071,961119,188
-6072,961307,190
-6073,961497,121
-6074,961618,187
-6075,961805,168
-6076,961973,176
-6077,962149,156
-6078,962305,148
-6079,962453,188
-6080,962641,161
-6081,962802,198
-6082,963000,141
-6083,963141,207
-6084,963348,186
-6085,963534,124
-6086,963658,186
-6087,963844,151
-6088,963995,163
-6089,964158,190
-6090,964348,157
-6091,964505,160
-6092,964665,137
-6093,964802,186
-6094,964988,176
-6095,965164,130
-6096,965294,186
-6097,965480,129
-6098,965609,145
-6099,965754,157
-6100,965911,170
-6101,966081,179
-6102,966260,178
-6103,966438,182
-6104,966620,158
-6105,966778,139
-6106,966917,146
-6107,967063,194
-6108,967257,190
-6109,967447,154
-6110,967601,148
-6111,967749,143
-6112,967892,143
-6113,968035,204
-6114,968239,151
-6115,968390,147
-6116,968537,147
-6117,968684,147
-6118,968831,147
-6119,968978,147
-6120,969125,147
-6121,969272,147
-6122,969419,147
-6123,969566,147
-6124,969713,147
-6125,969860,182
-6126,970042,132
-6127,970174,194
-6128,970368,252
-6129,970620,167
-6130,970787,141
-6131,970928,165
-6132,971093,169
-6133,971262,157
-6134,971419,141
-6135,971560,169
-6136,971729,199
-6137,971928,124
-6138,972052,174
-6139,972226,124
-6140,972350,181
-6141,972531,169
-6142,972700,152
-6143,972852,143
-6144,972995,166
-6145,973161,159
-6146,973320,189
-6147,973509,184
-6148,973693,205
-6149,973898,229
-6150,974127,153
-6151,974280,146
-6152,974426,139
-6153,974565,128
-6154,974693,137
-6155,974830,178
-6156,975008,154
-6157,975162,185
-6158,975347,134
-6159,975481,137
-6160,975618,169
-6161,975787,188
-6162,975975,259
-6163,976234,166
-6164,976400,158
-6165,976558,185
-6166,976743,178
-6167,976921,163
-6168,977084,143
-6169,977227,143
-6170,977370,190
-6171,977560,166
-6172,977726,181
-6173,977907,174
-6174,978081,167
-6175,978248,200
-6176,978448,139
-6177,978587,148
-6178,978735,165
-6179,978900,167
-6180,979067,183
-6181,979250,139
-6182,979389,116
-6183,979505,190
-6184,979695,167
-6185,979862,134
-6186,979996,167
-6187,980163,133
-6188,980296,184
-6189,980480,123
-6190,980603,149
-6191,980752,147
-6192,980899,147
-6193,981046,147
-6194,981193,147
-6195,981340,147
-6196,981487,147
-6197,981634,133
-6198,981767,165
-6199,981932,173
-6200,982105,209
-6201,982314,130
-6202,982444,144
-6203,982588,174
-6204,982762,177
-6205,982939,194
-6206,983133,140
-6207,983273,131
-6208,983404,158
-6209,983562,156
-6210,983718,134
-6211,983852,142
-6212,983994,183
-6213,984177,132
-6214,984309,118
-6215,984427,146
-6216,984573,142
-6217,984715,145
-6218,984860,143
-6219,985003,169
-6220,985172,139
-6221,985311,141
-6222,985452,192
-6223,985644,175
-6224,985819,119
-6225,985938,136
-6226,986074,192
-6227,986266,152
-6228,986418,140
-6229,986558,157
-6230,986715,132
-6231,986847,148
-6232,986995,127
-6233,987122,159
-6234,987281,151
-6235,987432,152
-6236,987584,136
-6237,987720,254
-6238,987974,130
-6239,988104,140
-6240,988244,222
-6241,988466,130
-6242,988596,139
-6243,988735,192
-6244,988927,154
-6245,989081,235
-6246,989316,134
-6247,989450,158
-6248,989608,185
-6249,989793,136
-6250,989929,214
-6251,990143,208
-6252,990351,132
-6253,990483,204
-6254,990687,177
-6255,990864,198
-6256,991062,164
-6257,991226,153
-6258,991379,165
-6259,991544,143
-6260,991687,143
-6261,991830,170
-6262,992000,155
-6263,992155,113
-6264,992268,136
-6265,992404,104
-6266,992508,124
-6267,992632,159
-6268,992791,140
-6269,992931,151
-6270,993082,134
-6271,993216,125
-6272,993341,174
-6273,993515,197
-6274,993712,200
-6275,993912,175
-6276,994087,123
-6277,994210,157
-6278,994367,181
-6279,994548,127
-6280,994675,115
-6281,994790,160
-6282,994950,155
-6283,995105,113
-6284,995218,201
-6285,995419,129
-6286,995548,127
-6287,995675,168
-6288,995843,127
-6289,995970,229
-6290,996199,156
-6291,996355,230
-6292,996585,155
-6293,996740,185
-6294,996925,181
-6295,997106,194
-6296,997300,225
-6297,997525,260
-6298,997785,192
-6299,997977,142
-6300,998119,142
-6301,998261,142
-6302,998403,132
-6303,998535,168
-6304,998703,149
-6305,998852,152
-6306,999004,135
-6307,999139,177
-6308,999316,151
-6309,999467,197
-6310,999664,156
-6311,999820,149
-6312,999969,168
-6313,1000137,186
-6314,1000323,177
-6315,1000500,189
-6316,1000689,212
-6317,1000901,157
-6318,1001058,179
-6319,1001237,179
-6320,1001416,129
-6321,1001545,179
-6322,1001724,115
-6323,1001839,192
-6324,1002031,173
-6325,1002204,135
-6326,1002339,131
-6327,1002470,142
-6328,1002612,154
-6329,1002766,143
-6330,1002909,143
-6331,1003052,153
-6332,1003205,150
-6333,1003355,245
-6334,1003600,177
-6335,1003777,207
-6336,1003984,132
-6337,1004116,184
-6338,1004300,139
-6339,1004439,177
-6340,1004616,164
-6341,1004780,129
-6342,1004909,167
-6343,1005076,153
-6344,1005229,141
-6345,1005370,184
-6346,1005554,130
-6347,1005684,193
-6348,1005877,115
-6349,1005992,188
-6350,1006180,175
-6351,1006355,151
-6352,1006506,168
-6353,1006674,173
-6354,1006847,155
-6355,1007002,126
-6356,1007128,178
-6357,1007306,165
-6358,1007471,117
-6359,1007588,178
-6360,1007766,190
-6361,1007956,165
-6362,1008121,135
-6363,1008256,150
-6364,1008406,168
-6365,1008574,160
-6366,1008734,164
-6367,1008898,146
-6368,1009044,157
-6369,1009201,163
-6370,1009364,181
-6371,1009545,156
-6372,1009701,153
-6373,1009854,139
-6374,1009993,147
-6375,1010140,176
-6376,1010316,177
-6377,1010493,161
-6378,1010654,143
-6379,1010797,161
-6380,1010958,177
-6381,1011135,211
-6382,1011346,189
-6383,1011535,181
-6384,1011716,174
-6385,1011890,168
-6386,1012058,238
-6387,1012296,155
-6388,1012451,180
-6389,1012631,280
-6390,1012911,154
-6391,1013065,136
-6392,1013201,136
-6393,1013337,147
-6394,1013484,186
-6395,1013670,170
-6396,1013840,150
-6397,1013990,200
-6398,1014190,153
-6399,1014343,126
-6400,1014469,186
-6401,1014655,181
-6402,1014836,173
-6403,1015009,147
-6404,1015156,171
-6405,1015327,141
-6406,1015468,143
-6407,1015611,143
-6408,1015754,159
-6409,1015913,106
-6410,1016019,125
-6411,1016144,173
-6412,1016317,159
-6413,1016476,176
-6414,1016652,180
-6415,1016832,157
-6416,1016989,181
-6417,1017170,278
-6418,1017448,176
-6419,1017624,195
-6420,1017819,162
-6421,1017981,169
-6422,1018150,127
-6423,1018277,152
-6424,1018429,146
-6425,1018575,144
-6426,1018719,150
-6427,1018869,143
-6428,1019012,151
-6429,1019163,153
-6430,1019316,192
-6431,1019508,204
-6432,1019712,142
-6433,1019854,197
-6434,1020051,172
-6435,1020223,160
-6436,1020383,151
-6437,1020534,168
-6438,1020702,178
-6439,1020880,117
-6440,1020997,176
-6441,1021173,209
-6442,1021382,148
-6443,1021530,152
-6444,1021682,151
-6445,1021833,129
-6446,1021962,154
-6447,1022116,143
-6448,1022259,143
-6449,1022402,122
-6450,1022524,171
-6451,1022695,144
-6452,1022839,208
-6453,1023047,186
-6454,1023233,194
-6455,1023427,127
-6456,1023554,199
-6457,1023753,161
-6458,1023914,158
-6459,1024072,181
-6460,1024253,177
-6461,1024430,162
-6462,1024592,145
-6463,1024737,254
-6464,1024991,138
-6465,1025129,153
-6466,1025282,192
-6467,1025474,134
-6468,1025608,155
-6469,1025763,137
-6470,1025900,207
-6471,1026107,201
-6472,1026308,151
-6473,1026459,188
-6474,1026647,128
-6475,1026775,128
-6476,1026903,232
-6477,1027135,174
-6478,1027309,213
-6479,1027522,132
-6480,1027654,141
-6481,1027795,140
-6482,1027935,174
-6483,1028109,187
-6484,1028296,166
-6485,1028462,143
-6486,1028605,143
-6487,1028748,148
-6488,1028896,159
-6489,1029055,160
-6490,1029215,157
-6491,1029372,172
-6492,1029544,164
-6493,1029708,229
-6494,1029937,132
-6495,1030069,171
-6496,1030240,185
-6497,1030425,140
-6498,1030565,147
-6499,1030712,173
-6500,1030885,131
-6501,1031016,199
-6502,1031215,196
-6503,1031411,161
-6504,1031572,206
-6505,1031778,129
-6506,1031907,110
-6507,1032017,152
-6508,1032169,215
-6509,1032384,188
-6510,1032572,180
-6511,1032752,141
-6512,1032893,181
-6513,1033074,231
-6514,1033305,178
-6515,1033483,147
-6516,1033630,179
-6517,1033809,199
-6518,1034008,152
-6519,1034160,158
-6520,1034318,144
-6521,1034462,132
-6522,1034594,118
-6523,1034712,158
-6524,1034870,157
-6525,1035027,188
-6526,1035215,188
-6527,1035403,150
-6528,1035553,150
-6529,1035703,137
-6530,1035840,140
-6531,1035980,168
-6532,1036148,147
-6533,1036295,146
-6534,1036441,166
-6535,1036607,213
-6536,1036820,140
-6537,1036960,167
-6538,1037127,174
-6539,1037301,172
-6540,1037473,113
-6541,1037586,138
-6542,1037724,110
-6543,1037834,131
-6544,1037965,179
-6545,1038144,158
-6546,1038302,132
-6547,1038434,223
-6548,1038657,192
-6549,1038849,187
-6550,1039036,187
-6551,1039223,162
-6552,1039385,152
-6553,1039537,163
-6554,1039700,127
-6555,1039827,201
-6556,1040028,167
-6557,1040195,116
-6558,1040311,173
-6559,1040484,107
-6560,1040591,171
-6561,1040762,161
-6562,1040923,199
-6563,1041122,193
-6564,1041315,219
-6565,1041534,157
-6566,1041691,132
-6567,1041823,114
-6568,1041937,166
-6569,1042103,143
-6570,1042246,143
-6571,1042389,176
-6572,1042565,211
-6573,1042776,149
-6574,1042925,158
-6575,1043083,185
-6576,1043268,190
-6577,1043458,141
-6578,1043599,171
-6579,1043770,158
-6580,1043928,122
-6581,1044050,132
-6582,1044182,142
-6583,1044324,132
-6584,1044456,135
-6585,1044591,132
-6586,1044723,165
-6587,1044888,153
-6588,1045041,170
-6589,1045211,164
-6590,1045375,201
-6591,1045576,176
-6592,1045752,151
-6593,1045903,158
-6594,1046061,153
-6595,1046214,147
-6596,1046361,168
-6597,1046529,180
-6598,1046709,209
-6599,1046918,178
-6600,1047096,142
-6601,1047238,144
-6602,1047382,165
-6603,1047547,222
-6604,1047769,132
-6605,1047901,233
-6606,1048134,167
-6607,1048301,139
-6608,1048440,141
-6609,1048581,164
-6610,1048745,164
-6611,1048909,133
-6612,1049042,149
-6613,1049191,138
-6614,1049329,163
-6615,1049492,193
-6616,1049685,177
-6617,1049862,130
-6618,1049992,228
-6619,1050220,180
-6620,1050400,173
-6621,1050573,135
-6622,1050708,143
-6623,1050851,142
-6624,1050993,222
-6625,1051215,129
-6626,1051344,142
-6627,1051486,150
-6628,1051636,131
-6629,1051767,164
-6630,1051931,143
-6631,1052074,143
-6632,1052217,143
-6633,1052360,205
-6634,1052565,198
-6635,1052763,153
-6636,1052916,173
-6637,1053089,144
-6638,1053233,183
-6639,1053416,258
-6640,1053674,172
-6641,1053846,230
-6642,1054076,155
-6643,1054231,140
-6644,1054371,139
-6645,1054510,168
-6646,1054678,156
-6647,1054834,153
-6648,1054987,178
-6649,1055165,121
-6650,1055286,207
-6651,1055493,132
-6652,1055625,204
-6653,1055829,155
-6654,1055984,183
-6655,1056167,141
-6656,1056308,138
-6657,1056446,151
-6658,1056597,153
-6659,1056750,187
-6660,1056937,164
-6661,1057101,122
-6662,1057223,146
-6663,1057369,135
-6664,1057504,174
-6665,1057678,189
-6666,1057867,158
-6667,1058025,185
-6668,1058210,159
-6669,1058369,177
-6670,1058546,213
-6671,1058759,171
-6672,1058930,190
-6673,1059120,140
-6674,1059260,114
-6675,1059374,144
-6676,1059518,176
-6677,1059694,131
-6678,1059825,132
-6679,1059957,163
-6680,1060120,180
-6681,1060300,163
-6682,1060463,195
-6683,1060658,151
-6684,1060809,172
-6685,1060981,161
-6686,1061142,133
-6687,1061275,167
-6688,1061442,173
-6689,1061615,133
-6690,1061748,129
-6691,1061877,130
-6692,1062007,176
-6693,1062183,119
-6694,1062302,135
-6695,1062437,159
-6696,1062596,193
-6697,1062789,200
-6698,1062989,220
-6699,1063209,198
-6700,1063407,160
-6701,1063567,135
-6702,1063702,143
-6703,1063845,143
-6704,1063988,143
-6705,1064131,146
-6706,1064277,136
-6707,1064413,152
-6708,1064565,159
-6709,1064724,123
-6710,1064847,161
-6711,1065008,136
-6712,1065144,140
-6713,1065284,129
-6714,1065413,166
-6715,1065579,172
-6716,1065751,156
-6717,1065907,176
-6718,1066083,156
-6719,1066239,137
-6720,1066376,174
-6721,1066550,162
-6722,1066712,222
-6723,1066934,169
-6724,1067103,169
-6725,1067272,145
-6726,1067417,213
-6727,1067630,155
-6728,1067785,164
-6729,1067949,162
-6730,1068111,155
-6731,1068266,153
-6732,1068419,156
-6733,1068575,160
-6734,1068735,136
-6735,1068871,107
-6736,1068978,192
-6737,1069170,154
-6738,1069324,154
-6739,1069478,139
-6740,1069617,195
-6741,1069812,195
-6742,1070007,198
-6743,1070205,153
-6744,1070358,131
-6745,1070489,126
-6746,1070615,232
-6747,1070847,153
-6748,1071000,152
-6749,1071152,150
-6750,1071302,193
-6751,1071495,127
-6752,1071622,206
-6753,1071828,146
-6754,1071974,163
-6755,1072137,154
-6756,1072291,164
-6757,1072455,124
-6758,1072579,132
-6759,1072711,206
-6760,1072917,190
-6761,1073107,181
-6762,1073288,166
-6763,1073454,149
-6764,1073603,143
-6765,1073746,143
-6766,1073889,147
-6767,1074036,135
-6768,1074171,146
-6769,1074317,185
-6770,1074502,198
-6771,1074700,199
-6772,1074899,183
-6773,1075082,166
-6774,1075248,208
-6775,1075456,151
-6776,1075607,148
-6777,1075755,161
-6778,1075916,206
-6779,1076122,144
-6780,1076266,186
-6781,1076452,178
-6782,1076630,175
-6783,1076805,177
-6784,1076982,221
-6785,1077203,130
-6786,1077333,206
-6787,1077539,161
-6788,1077700,153
-6789,1077853,156
-6790,1078009,154
-6791,1078163,217
-6792,1078380,206
-6793,1078586,132
-6794,1078718,179
-6795,1078897,211
-6796,1079108,130
-6797,1079238,142
-6798,1079380,181
-6799,1079561,129
-6800,1079690,284
-6801,1079974,167
-6802,1080141,155
-6803,1080296,145
-6804,1080441,136
-6805,1080577,200
-6806,1080777,113
-6807,1080890,194
-6808,1081084,209
-6809,1081293,229
-6810,1081522,243
-6811,1081765,140
-6812,1081905,169
-6813,1082074,182
-6814,1082256,194
-6815,1082450,123
-6816,1082573,133
-6817,1082706,143
-6818,1082849,143
-6819,1082992,120
-6820,1083112,163
-6821,1083275,144
-6822,1083419,218
-6823,1083637,141
-6824,1083778,162
-6825,1083940,231
-6826,1084171,133
-6827,1084304,137
-6828,1084441,118
-6829,1084559,132
-6830,1084691,149
-6831,1084840,193
-6832,1085033,210
-6833,1085243,235
-6834,1085478,164
-6835,1085642,179
-6836,1085821,163
-6837,1085984,203
-6838,1086187,144
-6839,1086331,155
-6840,1086486,157
-6841,1086643,117
-6842,1086760,182
-6843,1086942,211
-6844,1087153,156
-6845,1087309,133
-6846,1087442,144
-6847,1087586,156
-6848,1087742,190
-6849,1087932,176
-6850,1088108,122
-6851,1088230,174
-6852,1088404,131
-6853,1088535,171
-6854,1088706,147
-6855,1088853,152
-6856,1089005,240
-6857,1089245,169
-6858,1089414,161
-6859,1089575,184
-6860,1089759,216
-6861,1089975,161
-6862,1090136,167
-6863,1090303,154
-6864,1090457,149
-6865,1090606,171
-6866,1090777,193
-6867,1090970,105
-6868,1091075,186
-6869,1091261,189
-6870,1091450,202
-6871,1091652,176
-6872,1091828,126
-6873,1091954,227
-6874,1092181,154
-6875,1092335,151
-6876,1092486,132
-6877,1092618,158
-6878,1092776,132
-6879,1092908,178
-6880,1093086,199
-6881,1093285,154
-6882,1093439,143
-6883,1093582,143
-6884,1093725,143
-6885,1093868,166
-6886,1094034,218
-6887,1094252,145
-6888,1094397,210
-6889,1094607,155
-6890,1094762,186
-6891,1094948,168
-6892,1095116,190
-6893,1095306,128
-6894,1095434,147
-6895,1095581,191
-6896,1095772,141
-6897,1095913,132
-6898,1096045,151
-6899,1096196,181
-6900,1096377,159
-6901,1096536,192
-6902,1096728,163
-6903,1096891,136
-6904,1097027,151
-6905,1097178,167
-6906,1097345,167
-6907,1097512,139
-6908,1097651,152
-6909,1097803,140
-6910,1097943,130
-6911,1098073,156
-6912,1098229,143
-6913,1098372,168
-6914,1098540,149
-6915,1098689,215
-6916,1098904,160
-6917,1099064,158
-6918,1099222,167
-6919,1099389,140
-6920,1099529,124
-6921,1099653,155
-6922,1099808,213
-6923,1100021,134
-6924,1100155,143
-6925,1100298,143
-6926,1100441,174
-6927,1100615,121
-6928,1100736,215
-6929,1100951,172
-6930,1101123,179
-6931,1101302,169
-6932,1101471,206
-6933,1101677,148
-6934,1101825,151
-6935,1101976,148
-6936,1102124,167
-6937,1102291,172
-6938,1102463,167
-6939,1102630,173
-6940,1102803,127
-6941,1102930,198
-6942,1103128,176
-6943,1103304,187
-6944,1103491,145
-6945,1103636,160
-6946,1103796,212
-6947,1104008,157
-6948,1104165,183
-6949,1104348,129
-6950,1104477,161
-6951,1104638,140
-6952,1104778,153
-6953,1104931,169
-6954,1105100,143
-6955,1105243,143
-6956,1105386,151
-6957,1105537,148
-6958,1105685,142
-6959,1105827,141
-6960,1105968,134
-6961,1106102,175
-6962,1106277,160
-6963,1106437,132
-6964,1106569,176
-6965,1106745,260
-6966,1107005,196
-6967,1107201,128
-6968,1107329,231
-6969,1107560,140
-6970,1107700,155
-6971,1107855,163
-6972,1108018,191
-6973,1108209,133
-6974,1108342,148
-6975,1108490,167
-6976,1108657,138
-6977,1108795,185
-6978,1108980,183
-6979,1109163,209
-6980,1109372,148
-6981,1109520,181
-6982,1109701,190
-6983,1109891,112
-6984,1110003,222
-6985,1110225,177
-6986,1110402,174
-6987,1110576,181
-6988,1110757,175
-6989,1110932,181
-6990,1111113,151
-6991,1111264,150
-6992,1111414,233
-6993,1111647,172
-6994,1111819,151
-6995,1111970,143
-6996,1112113,143
-6997,1112256,179
-6998,1112435,134
-6999,1112569,225
-7000,1112794,200
-7001,1112994,170
-7002,1113164,170
-7003,1113334,133
-7004,1113467,189
-7005,1113656,154
-7006,1113810,143
-7007,1113953,146
-7008,1114099,125
-7009,1114224,153
-7010,1114377,192
-7011,1114569,150
-7012,1114719,210
-7013,1114929,180
-7014,1115109,173
-7015,1115282,174
-7016,1115456,185
-7017,1115641,179
-7018,1115820,170
-7019,1115990,146
-7020,1116136,151
-7021,1116287,138
-7022,1116425,156
-7023,1116581,136
-7024,1116717,174
-7025,1116891,150
-7026,1117041,118
-7027,1117159,165
-7028,1117324,157
-7029,1117481,155
-7030,1117636,150
-7031,1117786,160
-7032,1117946,153
-7033,1118099,168
-7034,1118267,155
-7035,1118422,161
-7036,1118583,156
-7037,1118739,137
-7038,1118876,122
-7039,1118998,176
-7040,1119174,140
-7041,1119314,153
-7042,1119467,195
-7043,1119662,129
-7044,1119791,155
-7045,1119946,123
-7046,1120069,167
-7047,1120236,197
-7048,1120433,201
-7049,1120634,168
-7050,1120802,124
-7051,1120926,148
-7052,1121074,203
-7053,1121277,169
-7054,1121446,130
-7055,1121576,143
-7056,1121719,143
-7057,1121862,123
-7058,1121985,141
-7059,1122126,132
-7060,1122258,149
-7061,1122407,148
-7062,1122555,131
-7063,1122686,141
-7064,1122827,174
-7065,1123001,127
-7066,1123128,163
-7067,1123291,177
-7068,1123468,131
-7069,1123599,160
-7070,1123759,169
-7071,1123928,152
-7072,1124080,131
-7073,1124211,142
-7074,1124353,170
-7075,1124523,138
-7076,1124661,121
-7077,1124782,196
-7078,1124978,193
-7079,1125171,142
-7080,1125313,161
-7081,1125474,223
-7082,1125697,127
-7083,1125824,165
-7084,1125989,209
-7085,1126198,170
-7086,1126368,170
-7087,1126538,132
-7088,1126670,139
-7089,1126809,180
-7090,1126989,170
-7091,1127159,123
-7092,1127282,154
-7093,1127436,152
-7094,1127588,146
-7095,1127734,177
-7096,1127911,194
-7097,1128105,201
-7098,1128306,129
-7099,1128435,176
-7100,1128611,159
-7101,1128770,152
-7102,1128922,128
-7103,1129050,134
-7104,1129184,143
-7105,1129327,196
-7106,1129523,202
-7107,1129725,161
-7108,1129886,132
-7109,1130018,157
-7110,1130175,142
-7111,1130317,202
-7112,1130519,129
-7113,1130648,233
-7114,1130881,180
-7115,1131061,155
-7116,1131216,191
-7117,1131407,160
-7118,1131567,186
-7119,1131753,147
-7120,1131900,126
-7121,1132026,139
-7122,1132165,154
-7123,1132319,177
-7124,1132496,144
-7125,1132640,144
-7126,1132784,153
-7127,1132937,201
-7128,1133138,104
-7129,1133242,159
-7130,1133401,133
-7131,1133534,149
-7132,1133683,171
-7133,1133854,132
-7134,1133986,144
-7135,1134130,124
-7136,1134254,158
-7137,1134412,118
-7138,1134530,145
-7139,1134675,174
-7140,1134849,118
-7141,1134967,158
-7142,1135125,111
-7143,1135236,191
-7144,1135427,137
-7145,1135564,145
-7146,1135709,155
-7147,1135864,186
-7148,1136050,194
-7149,1136244,154
-7150,1136398,132
-7151,1136530,207
-7152,1136737,200
-7153,1136937,266
-7154,1137203,178
-7155,1137381,162
-7156,1137543,171
-7157,1137714,184
-7158,1137898,215
-7159,1138113,128
-7160,1138241,143
-7161,1138384,200
-7162,1138584,124
-7163,1138708,157
-7164,1138865,155
-7165,1139020,176
-7166,1139196,165
-7167,1139361,149
-7168,1139510,170
-7169,1139680,120
-7170,1139800,152
-7171,1139952,143
-7172,1140095,150
-7173,1140245,146
-7174,1140391,210
-7175,1140601,182
-7176,1140783,141
-7177,1140924,210
-7178,1141134,238
-7179,1141372,172
-7180,1141544,146
-7181,1141690,148
-7182,1141838,144
-7183,1141982,144
-7184,1142126,146
-7185,1142272,132
-7186,1142404,156
-7187,1142560,219
-7188,1142779,128
-7189,1142907,140
-7190,1143047,154
-7191,1143201,129
-7192,1143330,127
-7193,1143457,156
-7194,1143613,168
-7195,1143781,142
-7196,1143923,167
-7197,1144090,196
-7198,1144286,143
-7199,1144429,164
-7200,1144593,131
-7201,1144724,142
-7202,1144866,155
-7203,1145021,133
-7204,1145154,182
-7205,1145336,187
-7206,1145523,187
-7207,1145710,179
-7208,1145889,168
-7209,1146057,231
-7210,1146288,166
-7211,1146454,161
-7212,1146615,121
-7213,1146736,137
-7214,1146873,158
-7215,1147031,132
-7216,1147163,178
-7217,1147341,216
-7218,1147557,174
-7219,1147731,118
-7220,1147849,213
-7221,1148062,133
-7222,1148195,126
-7223,1148321,141
-7224,1148462,167
-7225,1148629,174
-7226,1148803,163
-7227,1148966,180
-7228,1149146,138
-7229,1149284,133
-7230,1149417,135
-7231,1149552,185
-7232,1149737,137
-7233,1149874,172
-7234,1150046,147
-7235,1150193,169
-7236,1150362,160
-7237,1150522,187
-7238,1150709,171
-7239,1150880,202
-7240,1151082,145
-7241,1151227,165
-7242,1151392,107
-7243,1151499,137
-7244,1151636,147
-7245,1151783,125
-7246,1151908,172
-7247,1152080,112
-7248,1152192,233
-7249,1152425,137
-7250,1152562,135
-7251,1152697,153
-7252,1152850,168
-7253,1153018,181
-7254,1153199,191
-7255,1153390,144
-7256,1153534,144
-7257,1153678,142
-7258,1153820,154
-7259,1153974,189
-7260,1154163,173
-7261,1154336,156
-7262,1154492,135
-7263,1154627,153
-7264,1154780,162
-7265,1154942,193
-7266,1155135,158
-7267,1155293,151
-7268,1155444,142
-7269,1155586,128
-7270,1155714,164
-7271,1155878,180
-7272,1156058,177
-7273,1156235,155
-7274,1156390,141
-7275,1156531,145
-7276,1156676,254
-7277,1156930,195
-7278,1157125,149
-7279,1157274,116
-7280,1157390,140
-7281,1157530,181
-7282,1157711,166
-7283,1157877,168
-7284,1158045,183
-7285,1158228,136
-7286,1158364,169
-7287,1158533,126
-7288,1158659,123
-7289,1158782,192
-7290,1158974,183
-7291,1159157,178
-7292,1159335,176
-7293,1159511,186
-7294,1159697,109
-7295,1159806,181
-7296,1159987,231
-7297,1160218,164
-7298,1160382,202
-7299,1160584,193
-7300,1160777,204
-7301,1160981,144
-7302,1161125,147
-7303,1161272,165
-7304,1161437,177
-7305,1161614,150
-7306,1161764,148
-7307,1161912,154
-7308,1162066,197
-7309,1162263,125
-7310,1162388,151
-7311,1162539,192
-7312,1162731,159
-7313,1162890,130
-7314,1163020,126
-7315,1163146,126
-7316,1163272,143
-7317,1163415,148
-7318,1163563,186
-7319,1163749,168
-7320,1163917,218
-7321,1164135,135
-7322,1164270,132
-7323,1164402,140
-7324,1164542,129
-7325,1164671,135
-7326,1164806,140
-7327,1164946,145
-7328,1165091,171
-7329,1165262,157
-7330,1165419,145
-7331,1165564,111
-7332,1165675,166
-7333,1165841,142
-7334,1165983,156
-7335,1166139,205
-7336,1166344,167
-7337,1166511,128
-7338,1166639,142
-7339,1166781,167
-7340,1166948,194
-7341,1167142,194
-7342,1167336,144
-7343,1167480,158
-7344,1167638,144
-7345,1167782,144
-7346,1167926,124
-7347,1168050,132
-7348,1168182,148
-7349,1168330,195
-7350,1168525,193
-7351,1168718,183
-7352,1168901,130
-7353,1169031,208
-7354,1169239,156
-7355,1169395,126
-7356,1169521,141
-7357,1169662,189
-7358,1169851,160
-7359,1170011,160
-7360,1170171,160
-7361,1170331,156
-7362,1170487,150
-7363,1170637,182
-7364,1170819,153
-7365,1170972,193
-7366,1171165,156
-7367,1171321,216
-7368,1171537,211
-7369,1171748,209
-7370,1171957,218
-7371,1172175,213
-7372,1172388,158
-7373,1172546,160
-7374,1172706,126
-7375,1172832,175
-7376,1173007,137
-7377,1173144,163
-7378,1173307,218
-7379,1173525,154
-7380,1173679,132
-7381,1173811,142
-7382,1173953,132
-7383,1174085,194
-7384,1174279,147
-7385,1174426,205
-7386,1174631,169
-7387,1174800,172
-7388,1174972,170
-7389,1175142,156
-7390,1175298,192
-7391,1175490,154
-7392,1175644,170
-7393,1175814,156
-7394,1175970,159
-7395,1176129,147
-7396,1176276,136
-7397,1176412,161
-7398,1176573,118
-7399,1176691,142
-7400,1176833,125
-7401,1176958,188
-7402,1177146,174
-7403,1177320,129
-7404,1177449,181
-7405,1177630,136
-7406,1177766,138
-7407,1177904,165
-7408,1178069,172
-7409,1178241,193
-7410,1178434,192
-7411,1178626,170
-7412,1178796,181
-7413,1178977,211
-7414,1179188,144
-7415,1179332,151
-7416,1179483,199
-7417,1179682,144
-7418,1179826,128
-7419,1179954,132
-7420,1180086,246
-7421,1180332,155
-7422,1180487,146
-7423,1180633,157
-7424,1180790,160
-7425,1180950,145
-7426,1181095,168
-7427,1181263,147
-7428,1181410,158
-7429,1181568,147
-7430,1181715,142
-7431,1181857,278
-7432,1182135,187
-7433,1182322,132
-7434,1182454,149
-7435,1182603,157
-7436,1182760,161
-7437,1182921,180
-7438,1183101,191
-7439,1183292,206
-7440,1183498,150
-7441,1183648,182
-7442,1183830,150
-7443,1183980,171
-7444,1184151,192
-7445,1184343,230
-7446,1184573,144
-7447,1184717,151
-7448,1184868,141
-7449,1185009,220
-7450,1185229,129
-7451,1185358,189
-7452,1185547,140
-7453,1185687,157
-7454,1185844,159
-7455,1186003,158
-7456,1186161,192
-7457,1186353,128
-7458,1186481,140
-7459,1186621,158
-7460,1186779,165
-7461,1186944,169
-7462,1187113,182
-7463,1187295,138
-7464,1187433,170
-7465,1187603,108
-7466,1187711,202
-7467,1187913,250
-7468,1188163,244
-7469,1188407,150
-7470,1188557,152
-7471,1188709,155
-7472,1188864,169
-7473,1189033,191
-7474,1189224,228
-7475,1189452,190
-7476,1189642,180
-7477,1189822,155
-7478,1189977,222
-7479,1190199,195
-7480,1190394,139
-7481,1190533,204
-7482,1190737,132
-7483,1190869,132
-7484,1191001,136
-7485,1191137,138
-7486,1191275,173
-7487,1191448,146
-7488,1191594,177
-7489,1191771,143
-7490,1191914,129
-7491,1192043,254
-7492,1192297,114
-7493,1192411,144
-7494,1192555,144
-7495,1192699,130
-7496,1192829,160
-7497,1192989,169
-7498,1193158,153
-7499,1193311,140
-7500,1193451,139
-7501,1193590,169
-7502,1193759,153
-7503,1193912,150
-7504,1194062,146
-7505,1194208,137
-7506,1194345,139
-7507,1194484,206
-7508,1194690,187
-7509,1194877,138
-7510,1195015,145
-7511,1195160,139
-7512,1195299,141
-7513,1195440,159
-7514,1195599,140
-7515,1195739,174
-7516,1195913,188
-7517,1196101,158
-7518,1196259,180
-7519,1196439,148
-7520,1196587,155
-7521,1196742,170
-7522,1196912,148
-7523,1197060,129
-7524,1197189,201
-7525,1197390,180
-7526,1197570,181
-7527,1197751,131
-7528,1197882,156
-7529,1198038,129
-7530,1198167,173
-7531,1198340,184
-7532,1198524,172
-7533,1198696,170
-7534,1198866,131
-7535,1198997,204
-7536,1199201,144
-7537,1199345,144
-7538,1199489,178
-7539,1199667,155
-7540,1199822,244
-7541,1200066,144
-7542,1200210,170
-7543,1200380,132
-7544,1200512,207
-7545,1200719,146
-7546,1200865,174
-7547,1201039,160
-7548,1201199,151
-7549,1201350,182
-7550,1201532,146
-7551,1201678,187
-7552,1201865,184
-7553,1202049,229
-7554,1202278,157
-7555,1202435,193
-7556,1202628,167
-7557,1202795,212
-7558,1203007,224
-7559,1203231,193
-7560,1203424,133
-7561,1203557,149
-7562,1203706,137
-7563,1203843,145
-7564,1203988,157
-7565,1204145,122
-7566,1204267,157
-7567,1204424,144
-7568,1204568,139
-7569,1204707,143
-7570,1204850,176
-7571,1205026,153
-7572,1205179,201
-7573,1205380,131
-7574,1205511,133
-7575,1205644,175
-7576,1205819,132
-7577,1205951,157
-7578,1206108,197
-7579,1206305,160
-7580,1206465,169
-7581,1206634,190
-7582,1206824,149
-7583,1206973,159
-7584,1207132,226
-7585,1207358,144
-7586,1207502,144
-7587,1207646,128
-7588,1207774,206
-7589,1207980,129
-7590,1208109,149
-7591,1208258,155
-7592,1208413,179
-7593,1208592,194
-7594,1208786,186
-7595,1208972,141
-7596,1209113,152
-7597,1209265,248
-7598,1209513,214
-7599,1209727,129
-7600,1209856,242
-7601,1210098,136
-7602,1210234,182
-7603,1210416,158
-7604,1210574,174
-7605,1210748,141
-7606,1210889,168
-7607,1211057,171
-7608,1211228,140
-7609,1211368,146
-7610,1211514,225
-7611,1211739,216
-7612,1211955,155
-7613,1212110,134
-7614,1212244,156
-7615,1212400,161
-7616,1212561,141
-7617,1212702,124
-7618,1212826,120
-7619,1212946,136
-7620,1213082,170
-7621,1213252,227
-7622,1213479,155
-7623,1213634,203
-7624,1213837,147
-7625,1213984,129
-7626,1214113,196
-7627,1214309,138
-7628,1214447,154
-7629,1214601,141
-7630,1214742,141
-7631,1214883,141
-7632,1215024,141
-7633,1215165,141
-7634,1215306,141
-7635,1215447,141
-7636,1215588,141
-7637,1215729,141
-7638,1215870,141
-7639,1216011,114
-7640,1216125,159
-7641,1216284,184
-7642,1216468,162
-7643,1216630,157
-7644,1216787,225
-7645,1217012,183
-7646,1217195,234
-7647,1217429,196
-7648,1217625,160
-7649,1217785,160
-7650,1217945,152
-7651,1218097,135
-7652,1218232,173
-7653,1218405,144
-7654,1218549,144
-7655,1218693,211
-7656,1218904,174
-7657,1219078,132
-7658,1219210,170
-7659,1219380,156
-7660,1219536,154
-7661,1219690,153
-7662,1219843,232
-7663,1220075,127
-7664,1220202,150
-7665,1220352,148
-7666,1220500,136
-7667,1220636,187
-7668,1220823,165
-7669,1220988,150
-7670,1221138,169
-7671,1221307,164
-7672,1221471,200
-7673,1221671,189
-7674,1221860,233
-7675,1222093,205
-7676,1222298,174
-7677,1222472,132
-7678,1222604,125
-7679,1222729,174
-7680,1222903,192
-7681,1223095,174
-7682,1223269,185
-7683,1223454,162
-7684,1223616,160
-7685,1223776,174
-7686,1223950,153
-7687,1224103,216
-7688,1224319,183
-7689,1224502,148
-7690,1224650,171
-7691,1224821,153
-7692,1224974,187
-7693,1225161,140
-7694,1225301,186
-7695,1225487,146
-7696,1225633,242
-7697,1225875,195
-7698,1226070,149
-7699,1226219,144
-7700,1226363,144
-7701,1226507,183
-7702,1226690,117
-7703,1226807,114
-7704,1226921,131
-7705,1227052,103
-7706,1227155,198
-7707,1227353,214
-7708,1227567,153
-7709,1227720,162
-7710,1227882,150
-7711,1228032,129
-7712,1228161,186
-7713,1228347,141
-7714,1228488,147
-7715,1228635,171
-7716,1228806,184
-7717,1228990,213
-7718,1229203,181
-7719,1229384,201
-7720,1229585,150
-7721,1229735,149
-7722,1229884,141
-7723,1230025,164
-7724,1230189,174
-7725,1230363,138
-7726,1230501,121
-7727,1230622,134
-7728,1230756,129
-7729,1230885,168
-7730,1231053,110
-7731,1231163,193
-7732,1231356,135
-7733,1231491,160
-7734,1231651,102
-7735,1231753,147
-7736,1231900,211
-7737,1232111,144
-7738,1232255,131
-7739,1232386,132
-7740,1232518,131
-7741,1232649,155
-7742,1232804,150
-7743,1232954,56
-7744,1233010,211
-7745,1233221,233
-7746,1233454,114
-7747,1233568,144
-7748,1233712,130
-7749,1233842,170
-7750,1234012,132
-7751,1234144,187
-7752,1234331,110
-7753,1234441,144
-7754,1234585,144
-7755,1234729,141
-7756,1234870,186
-7757,1235056,162
-7758,1235218,186
-7759,1235404,134
-7760,1235538,138
-7761,1235676,137
-7762,1235813,148
-7763,1235961,180
-7764,1236141,163
-7765,1236304,181
-7766,1236485,155
-7767,1236640,149
-7768,1236789,172
-7769,1236961,168
-7770,1237129,132
-7771,1237261,145
-7772,1237406,151
-7773,1237557,123
-7774,1237680,147
-7775,1237827,130
-7776,1237957,168
-7777,1238125,116
-7778,1238241,124
-7779,1238365,131
-7780,1238496,160
-7781,1238656,160
-7782,1238816,169
-7783,1238985,160
-7784,1239145,177
-7785,1239322,138
-7786,1239460,199
-7787,1239659,185
-7788,1239844,142
-7789,1239986,149
-7790,1240135,215
-7791,1240350,161
-7792,1240511,180
-7793,1240691,151
-7794,1240842,132
-7795,1240974,190
-7796,1241164,134
-7797,1241298,145
-7798,1241443,162
-7799,1241605,116
-7800,1241721,204
-7801,1241925,144
-7802,1242069,144
-7803,1242213,130
-7804,1242343,190
-7805,1242533,169
-7806,1242702,129
-7807,1242831,158
-7808,1242989,154
-7809,1243143,179
-7810,1243322,164
-7811,1243486,211
-7812,1243697,160
-7813,1243857,147
-7814,1244004,151
-7815,1244155,169
-7816,1244324,169
-7817,1244493,171
-7818,1244664,117
-7819,1244781,198
-7820,1244979,155
-7821,1245134,156
-7822,1245290,126
-7823,1245416,127
-7824,1245543,184
-7825,1245727,174
-7826,1245901,128
-7827,1246029,152
-7828,1246181,194
-7829,1246375,184
-7830,1246559,155
-7831,1246714,243
-7832,1246957,192
-7833,1247149,192
-7834,1247341,143
-7835,1247484,137
-7836,1247621,163
-7837,1247784,169
-7838,1247953,186
-7839,1248139,181
-7840,1248320,107
-7841,1248427,115
-7842,1248542,145
-7843,1248687,132
-7844,1248819,132
-7845,1248951,204
-7846,1249155,225
-7847,1249380,159
-7848,1249539,229
-7849,1249768,160
-7850,1249928,148
-7851,1250076,123
-7852,1250199,171
-7853,1250370,168
-7854,1250538,174
-7855,1250712,127
-7856,1250839,133
-7857,1250972,147
-7858,1251119,163
-7859,1251282,137
-7860,1251419,185
-7861,1251604,201
-7862,1251805,147
-7863,1251952,180
-7864,1252132,186
-7865,1252318,242
-7866,1252560,148
-7867,1252708,166
-7868,1252874,208
-7869,1253082,144
-7870,1253226,144
-7871,1253370,141
-7872,1253511,165
-7873,1253676,168
-7874,1253844,124
-7875,1253968,131
-7876,1254099,132
-7877,1254231,163
-7878,1254394,162
-7879,1254556,119
-7880,1254675,216
-7881,1254891,132
-7882,1255023,129
-7883,1255152,172
-7884,1255324,126
-7885,1255450,151
-7886,1255601,201
-7887,1255802,190
-7888,1255992,110
-7889,1256102,139
-7890,1256241,200
-7891,1256441,185
-7892,1256626,150
-7893,1256776,140
-7894,1256916,126
-7895,1257042,172
-7896,1257214,158
-7897,1257372,178
-7898,1257550,170
-7899,1257720,157
-7900,1257877,170
-7901,1258047,119
-7902,1258166,177
-7903,1258343,185
-7904,1258528,127
-7905,1258655,169
-7906,1258824,169
-7907,1258993,207
-7908,1259200,153
-7909,1259353,146
-7910,1259499,217
-7911,1259716,137
-7912,1259853,120
-7913,1259973,156
-7914,1260129,146
-7915,1260275,138
-7916,1260413,231
-7917,1260644,155
-7918,1260799,165
-7919,1260964,255
-7920,1261219,151
-7921,1261370,138
-7922,1261508,141
-7923,1261649,139
-7924,1261788,191
-7925,1261979,172
-7926,1262151,144
-7927,1262295,144
-7928,1262439,140
-7929,1262579,177
-7930,1262756,158
-7931,1262914,170
-7932,1263084,168
-7933,1263252,116
-7934,1263368,123
-7935,1263491,169
-7936,1263660,133
-7937,1263793,133
-7938,1263926,176
-7939,1264102,114
-7940,1264216,157
-7941,1264373,164
-7942,1264537,161
-7943,1264698,142
-7944,1264840,120
-7945,1264960,188
-7946,1265148,138
-7947,1265286,217
-7948,1265503,194
-7949,1265697,172
-7950,1265869,152
-7951,1266021,156
-7952,1266177,243
-7953,1266420,163
-7954,1266583,143
-7955,1266726,147
-7956,1266873,145
-7957,1267018,131
-7958,1267149,177
-7959,1267326,158
-7960,1267484,191
-7961,1267675,174
-7962,1267849,167
-7963,1268016,187
-7964,1268203,162
-7965,1268365,184
-7966,1268549,180
-7967,1268729,199
-7968,1268928,147
-7969,1269075,256
-7970,1269331,159
-7971,1269490,122
-7972,1269612,202
-7973,1269814,128
-7974,1269942,144
-7975,1270086,144
-7976,1270230,158
-7977,1270388,153
-7978,1270541,139
-7979,1270680,174
-7980,1270854,159
-7981,1271013,179
-7982,1271192,173
-7983,1271365,140
-7984,1271505,128
-7985,1271633,120
-7986,1271753,160
-7987,1271913,138
-7988,1272051,204
-7989,1272255,127
-7990,1272382,179
-7991,1272561,181
-7992,1272742,181
-7993,1272923,204
-7994,1273127,187
-7995,1273314,160
-7996,1273474,160
-7997,1273634,114
-7998,1273748,143
-7999,1273891,107
-8000,1273998,141
-8001,1274139,138
-8002,1274277,168
-8003,1274445,177
-8004,1274622,153
-8005,1274775,122
-8006,1274897,123
-8007,1275020,176
-8008,1275196,149
-8009,1275345,166
-8010,1275511,127
-8011,1275638,130
-8012,1275768,148
-8013,1275916,146
-8014,1276062,134
-8015,1276196,174
-8016,1276370,123
-8017,1276493,148
-8018,1276641,201
-8019,1276842,225
-8020,1277067,142
-8021,1277209,256
-8022,1277465,206
-8023,1277671,177
-8024,1277848,162
-8025,1278010,153
-8026,1278163,149
-8027,1278312,140
-8028,1278452,132
-8029,1278584,132
-8030,1278716,190
-8031,1278906,130
-8032,1279036,180
-8033,1279216,217
-8034,1279433,136
-8035,1279569,148
-8036,1279717,204
-8037,1279921,184
-8038,1280105,131
-8039,1280236,131
-8040,1280367,146
-8041,1280513,220
-8042,1280733,158
-8043,1280891,145
-8044,1281036,144
-8045,1281180,144
-8046,1281324,175
-8047,1281499,331
-8048,1281830,171
-8049,1282001,163
-8050,1282164,173
-8051,1282337,223
-8052,1282560,132
-8053,1282692,153
-8054,1282845,150
-8055,1282995,120
-8056,1283115,173
-8057,1283288,138
-8058,1283426,149
-8059,1283575,166
-8060,1283741,114
-8061,1283855,139
-8062,1283994,156
-8063,1284150,167
-8064,1284317,126
-8065,1284443,158
-8066,1284601,228
-8067,1284829,213
-8068,1285042,166
-8069,1285208,153
-8070,1285361,120
-8071,1285481,151
-8072,1285632,162
-8073,1285794,125
-8074,1285919,204
-8075,1286123,159
-8076,1286282,148
-8077,1286430,180
-8078,1286610,135
-8079,1286745,201
-8080,1286946,159
-8081,1287105,163
-8082,1287268,146
-8083,1287414,153
-8084,1287567,174
-8085,1287741,134
-8086,1287875,184
-8087,1288059,129
-8088,1288188,131
-8089,1288319,176
-8090,1288495,143
-8091,1288638,172
-8092,1288810,118
-8093,1288928,144
-8094,1289072,144
-8095,1289216,154
-8096,1289370,129
-8097,1289499,127
-8098,1289626,180
-8099,1289806,183
-8100,1289989,206
-8101,1290195,157
-8102,1290352,107
-8103,1290459,172
-8104,1290631,155
-8105,1290786,143
-8106,1290929,133
-8107,1291062,174
-8108,1291236,141
-8109,1291377,166
-8110,1291543,174
-8111,1291717,152
-8112,1291869,131
-8113,1292000,140
-8114,1292140,179
-8115,1292319,121
-8116,1292440,139
-8117,1292579,149
-8118,1292728,177
-8119,1292905,198
-8120,1293103,183
-8121,1293286,130
-8122,1293416,206
-8123,1293622,169
-8124,1293791,143
-8125,1293934,157
-8126,1294091,218
-8127,1294309,236
-8128,1294545,152
-8129,1294697,191
-8130,1294888,195
-8131,1295083,149
-8132,1295232,132
-8133,1295364,160
-8134,1295524,166
-8135,1295690,203
-8136,1295893,212
-8137,1296105,144
-8138,1296249,144
-8139,1296393,138
-8140,1296531,169
-8141,1296700,153
-8142,1296853,151
-8143,1297004,159
-8144,1297163,181
-8145,1297344,126
-8146,1297470,214
-8147,1297684,142
-8148,1297826,132
-8149,1297958,148
-8150,1298106,136
-8151,1298242,130
-8152,1298372,200
-8153,1298572,194
-8154,1298766,138
-8155,1298904,145
-8156,1299049,132
-8157,1299181,145
-8158,1299326,132
-8159,1299458,132
-8160,1299590,137
-8161,1299727,190
-8162,1299917,190
-8163,1300107,146
-8164,1300253,166
-8165,1300419,133
-8166,1300552,186
-8167,1300738,118
-8168,1300856,184
-8169,1301040,134
-8170,1301174,188
-8171,1301362,148
-8172,1301510,144
-8173,1301654,140
-8174,1301794,147
-8175,1301941,157
-8176,1302098,151
-8177,1302249,151
-8178,1302400,172
-8179,1302572,124
-8180,1302696,159
-8181,1302855,159
-8182,1303014,150
-8183,1303164,191
-8184,1303355,253
-8185,1303608,179
-8186,1303787,178
-8187,1303965,227
-8188,1304192,128
-8189,1304320,224
-8190,1304544,158
-8191,1304702,149
-8192,1304851,175
-8193,1305026,147
-8194,1305173,215
-8195,1305388,168
-8196,1305556,156
-8197,1305712,140
-8198,1305852,166
-8199,1306018,126
-8200,1306144,165
-8201,1306309,157
-8202,1306466,159
-8203,1306625,152
-8204,1306777,157
-8205,1306934,125
-8206,1307059,168
-8207,1307227,148
-8208,1307375,165
-8209,1307540,159
-8210,1307699,152
-8211,1307851,164
-8212,1308015,199
-8213,1308214,157
-8214,1308371,183
-8215,1308554,131
-8216,1308685,184
-8217,1308869,119
-8218,1308988,156
-8219,1309144,180
-8220,1309324,137
-8221,1309461,150
-8222,1309611,158
-8223,1309769,153
-8224,1309922,183
-8225,1310105,185
-8226,1310290,148
-8227,1310438,152
-8228,1310590,167
-8229,1310757,158
-8230,1310915,149
-8231,1311064,222
-8232,1311286,159
-8233,1311445,191
-8234,1311636,139
-8235,1311775,215
-8236,1311990,193
-8237,1312183,132
-8238,1312315,144
-8239,1312459,189
-8240,1312648,155
-8241,1312803,123
-8242,1312926,187
-8243,1313113,166
-8244,1313279,154
-8245,1313433,161
-8246,1313594,138
-8247,1313732,167
-8248,1313899,199
-8249,1314098,124
-8250,1314222,163
-8251,1314385,161
-8252,1314546,117
-8253,1314663,151
-8254,1314814,162
-8255,1314976,142
-8256,1315118,188
-8257,1315306,145
-8258,1315451,142
-8259,1315593,180
-8260,1315773,141
-8261,1315914,152
-8262,1316066,142
-8263,1316208,141
-8264,1316349,154
-8265,1316503,161
-8266,1316664,144
-8267,1316808,202
-8268,1317010,159
-8269,1317169,135
-8270,1317304,177
-8271,1317481,192
-8272,1317673,156
-8273,1317829,145
-8274,1317974,143
-8275,1318117,162
-8276,1318279,135
-8277,1318414,158
-8278,1318572,149
-8279,1318721,149
-8280,1318870,133
-8281,1319003,154
-8282,1319157,134
-8283,1319291,137
-8284,1319428,167
-8285,1319595,133
-8286,1319728,162
-8287,1319890,153
-8288,1320043,141
-8289,1320184,142
-8290,1320326,163
-8291,1320489,156
-8292,1320645,157
-8293,1320802,151
-8294,1320953,149
-8295,1321102,56
-8296,1321158,115
-8297,1321273,172
-8298,1321445,146
-8299,1321591,169
-8300,1321760,159
-8301,1321919,145
-8302,1322064,117
-8303,1322181,157
-8304,1322338,140
-8305,1322478,111
-8306,1322589,150
-8307,1322739,160
-8308,1322899,171
-8309,1323070,173
-8310,1323243,149
-8311,1323392,150
-8312,1323542,190
-8313,1323732,118
-8314,1323850,156
-8315,1324006,154
-8316,1324160,118
-8317,1324278,162
-8318,1324440,145
-8319,1324585,176
-8320,1324761,166
-8321,1324927,145
-8322,1325072,146
-8323,1325218,170
-8324,1325388,144
-8325,1325532,136
-8326,1325668,195
-8327,1325863,164
-8328,1326027,168
-8329,1326195,162
-8330,1326357,176
-8331,1326533,174
-8332,1326707,151
-8333,1326858,126
-8334,1326984,193
-8335,1327177,131
-8336,1327308,177
-8337,1327485,170
-8338,1327655,144
-8339,1327799,178
-8340,1327977,142
-8341,1328119,197
-8342,1328316,126
-8343,1328442,155
-8344,1328597,113
-8345,1328710,161
-8346,1328871,141
-8347,1329012,148
-8348,1329160,152
-8349,1329312,162
-8350,1329474,208
-8351,1329682,168
-8352,1329850,145
-8353,1329995,144
-8354,1330139,143
-8355,1330282,132
-8356,1330414,144
-8357,1330558,137
-8358,1330695,142
-8359,1330837,166
-8360,1331003,172
-8361,1331175,191
-8362,1331366,176
-8363,1331542,160
-8364,1331702,172
-8365,1331874,124
-8366,1331998,161
-8367,1332159,142
-8368,1332301,148
-8369,1332449,146
-8370,1332595,209
-8371,1332804,174
-8372,1332978,132
-8373,1333110,171
-8374,1333281,143
-8375,1333424,141
-8376,1333565,149
-8377,1333714,138
-8378,1333852,197
-8379,1334049,145
-8380,1334194,167
-8381,1334361,154
-8382,1334515,150
-8383,1334665,147
-8384,1334812,156
-8385,1334968,127
-8386,1335095,167
-8387,1335262,154
-8388,1335416,132
-8389,1335548,136
-8390,1335684,126
-8391,1335810,174
-8392,1335984,155
-8393,1336139,135
-8394,1336274,138
-8395,1336412,168
-8396,1336580,166
-8397,1336746,151
-8398,1336897,160
-8399,1337057,164
-8400,1337221,149
-8401,1337370,203
-8402,1337573,168
-8403,1337741,193
-8404,1337934,178
-8405,1338112,113
-8406,1338225,138
-8407,1338363,184
-8408,1338547,145
-8409,1338692,178
-8410,1338870,161
-8411,1339031,151
-8412,1339182,170
-8413,1339352,148
-8414,1339500,210
-8415,1339710,163
-8416,1339873,163
-8417,1340036,143
-8418,1340179,173
-8419,1340352,163
-8420,1340515,197
-8421,1340712,136
-8422,1340848,139
-8423,1340987,197
-8424,1341184,144
-8425,1341328,144
-8426,1341472,178
-8427,1341650,161
-8428,1341811,167
-8429,1341978,166
-8430,1342144,145
-8431,1342289,144
-8432,1342433,205
-8433,1342638,165
-8434,1342803,154
-8435,1342957,148
-8436,1343105,160
-8437,1343265,128
-8438,1343393,197
-8439,1343590,122
-8440,1343712,167
-8441,1343879,165
-8442,1344044,153
-8443,1344197,160
-8444,1344357,116
-8445,1344473,161
-8446,1344634,211
-8447,1344845,157
-8448,1345002,197
-8449,1345199,207
-8450,1345406,150
-8451,1345556,167
-8452,1345723,149
-8453,1345872,143
-8454,1346015,141
-8455,1346156,162
-8456,1346318,132
-8457,1346450,132
-8458,1346582,157
-8459,1346739,171
-8460,1346910,164
-8461,1347074,160
-8462,1347234,133
-8463,1347367,144
-8464,1347511,149
-8465,1347660,134
-8466,1347794,148
-8467,1347942,145
-8468,1348087,177
-8469,1348264,171
-8470,1348435,190
-8471,1348625,149
-8472,1348774,164
-8473,1348938,168
-8474,1349106,154
-8475,1349260,144
-8476,1349404,144
-8477,1349548,119
-8478,1349667,132
-8479,1349799,184
-8480,1349983,158
-8481,1350141,122
-8482,1350263,161
-8483,1350424,149
-8484,1350573,161
-8485,1350734,175
-8486,1350909,230
-8487,1351139,229
-8488,1351368,150
-8489,1351518,146
-8490,1351664,144
-8491,1351808,108
-8492,1351916,227
-8493,1352143,159
-8494,1352302,142
-8495,1352444,134
-8496,1352578,184
-8497,1352762,144
-8498,1352906,143
-8499,1353049,154
-8500,1353203,151
-8501,1353354,122
-8502,1353476,188
-8503,1353664,140
-8504,1353804,122
-8505,1353926,138
-8506,1354064,177
-8507,1354241,144
-8508,1354385,147
-8509,1354532,170
-8510,1354702,132
-8511,1354834,189
-8512,1355023,176
-8513,1355199,110
-8514,1355309,162
-8515,1355471,132
-8516,1355603,149
-8517,1355752,196
-8518,1355948,126
-8519,1356074,155
-8520,1356229,170
-8521,1356399,181
-8522,1356580,162
-8523,1356742,247
-8524,1356989,192
-8525,1357181,253
-8526,1357434,179
-8527,1357613,151
-8528,1357764,167
-8529,1357931,189
-8530,1358120,181
-8531,1358301,132
-8532,1358433,173
-8533,1358606,144
-8534,1358750,144
-8535,1358894,164
-8536,1359058,201
-8537,1359259,141
-8538,1359400,153
-8539,1359553,125
-8540,1359678,160
-8541,1359838,160
-8542,1359998,107
-8543,1360105,137
-8544,1360242,207
-8545,1360449,157
-8546,1360606,138
-8547,1360744,164
-8548,1360908,222
-8549,1361130,141
-8550,1361271,127
-8551,1361398,192
-8552,1361590,141
-8553,1361731,148
-8554,1361879,160
-8555,1362039,160
-8556,1362199,132
-8557,1362331,158
-8558,1362489,245
-8559,1362734,136
-8560,1362870,132
-8561,1363002,223
-8562,1363225,144
-8563,1363369,166
-8564,1363535,153
-8565,1363688,197
-8566,1363885,154
-8567,1364039,146
-8568,1364185,161
-8569,1364346,119
-8570,1364465,198
-8571,1364663,108
-8572,1364771,121
-8573,1364892,174
-8574,1365066,161
-8575,1365227,163
-8576,1365390,132
-8577,1365522,187
-8578,1365709,146
-8579,1365855,136
-8580,1365991,126
-8581,1366117,177
-8582,1366294,145
-8583,1366439,133
-8584,1366572,150
-8585,1366722,135
-8586,1366857,189
-8587,1367046,173
-8588,1367219,128
-8589,1367347,188
-8590,1367535,167
-8591,1367702,209
-8592,1367911,147
-8593,1368058,170
-8594,1368228,254
-8595,1368482,124
-8596,1368606,127
-8597,1368733,151
-8598,1368884,136
-8599,1369020,178
-8600,1369198,199
-8601,1369397,105
-8602,1369502,176
-8603,1369678,132
-8604,1369810,163
-8605,1369973,129
-8606,1370102,166
-8607,1370268,127
-8608,1370395,144
-8609,1370539,144
-8610,1370683,132
-8611,1370815,122
-8612,1370937,130
-8613,1371067,171
-8614,1371238,118
-8615,1371356,214
-8616,1371570,164
-8617,1371734,176
-8618,1371910,132
-8619,1372042,134
-8620,1372176,206
-8621,1372382,120
-8622,1372502,168
-8623,1372670,138
-8624,1372808,162
-8625,1372970,174
-8626,1373144,135
-8627,1373279,125
-8628,1373404,172
-8629,1373576,132
-8630,1373708,171
-8631,1373879,165
-8632,1374044,159
-8633,1374203,153
-8634,1374356,147
-8635,1374503,145
-8636,1374648,112
-8637,1374760,155
-8638,1374915,229
-8639,1375144,194
-8640,1375338,201
-8641,1375539,154
-8642,1375693,170
-8643,1375863,171
-8644,1376034,133
-8645,1376167,143
-8646,1376310,190
-8647,1376500,118
-8648,1376618,136
-8649,1376754,212
-8650,1376966,192
-8651,1377158,167
-8652,1377325,153
-8653,1377478,136
-8654,1377614,144
-8655,1377758,136
-8656,1377894,187
-8657,1378081,169
-8658,1378250,169
-8659,1378419,187
-8660,1378606,148
-8661,1378754,128
-8662,1378882,131
-8663,1379013,144
-8664,1379157,144
-8665,1379301,154
-8666,1379455,167
-8667,1379622,222
-8668,1379844,138
-8669,1379982,161
-8670,1380143,169
-8671,1380312,152
-8672,1380464,161
-8673,1380625,143
-8674,1380768,164
-8675,1380932,144
-8676,1381076,134
-8677,1381210,133
-8678,1381343,172
-8679,1381515,200
-8680,1381715,179
-8681,1381894,124
-8682,1382018,136
-8683,1382154,144
-8684,1382298,138
-8685,1382436,125
-8686,1382561,165
-8687,1382726,159
-8688,1382885,153
-8689,1383038,127
-8690,1383165,217
-8691,1383382,107
-8692,1383489,149
-8693,1383638,175
-8694,1383813,149
-8695,1383962,158
-8696,1384120,151
-8697,1384271,147
-8698,1384418,143
-8699,1384561,146
-8700,1384707,132
-8701,1384839,113
-8702,1384952,132
-8703,1385084,134
-8704,1385218,175
-8705,1385393,140
-8706,1385533,147
-8707,1385680,163
-8708,1385843,132
-8709,1385975,168
-8710,1386143,133
-8711,1386276,159
-8712,1386435,142
-8713,1386577,167
-8714,1386744,142
-8715,1386886,206
-8716,1387092,144
-8717,1387236,144
-8718,1387380,183
-8719,1387563,185
-8720,1387748,132
-8721,1387880,134
-8722,1388014,168
-8723,1388182,173
-8724,1388355,183
-8725,1388538,156
-8726,1388694,178
-8727,1388872,134
-8728,1389006,127
-8729,1389133,132
-8730,1389265,139
-8731,1389404,155
-8732,1389559,56
-8733,1389615,214
-8734,1389829,197
-8735,1390026,200
-8736,1390226,176
-8737,1390402,138
-8738,1390540,141
-8739,1390681,168
-8740,1390849,194
-8741,1391043,156
-8742,1391199,139
-8743,1391338,157
-8744,1391495,159
-8745,1391654,145
-8746,1391799,135
-8747,1391934,130
-8748,1392064,144
-8749,1392208,128
-8750,1392336,122
-8751,1392458,166
-8752,1392624,149
-8753,1392773,170
-8754,1392943,208
-8755,1393151,145
-8756,1393296,152
-8757,1393448,139
-8758,1393587,122
-8759,1393709,158
-8760,1393867,146
-8761,1394013,181
-8762,1394194,187
-8763,1394381,158
-8764,1394539,151
-8765,1394690,160
-8766,1394850,137
-8767,1394987,137
-8768,1395124,159
-8769,1395283,124
-8770,1395407,141
-8771,1395548,184
-8772,1395732,239
-8773,1395971,133
-8774,1396104,228
-8775,1396332,167
-8776,1396499,159
-8777,1396658,157
-8778,1396815,128
-8779,1396943,194
-8780,1397137,155
-8781,1397292,180
-8782,1397472,145
-8783,1397617,188
-8784,1397805,171
-8785,1397976,151
-8786,1398127,155
-8787,1398282,149
-8788,1398431,147
-8789,1398578,144
-8790,1398722,144
-8791,1398866,168
-8792,1399034,150
-8793,1399184,213
-8794,1399397,123
-8795,1399520,146
-8796,1399666,226
-8797,1399892,225
-8798,1400117,168
-8799,1400285,187
-8800,1400472,160
-8801,1400632,181
-8802,1400813,143
-8803,1400956,181
-8804,1401137,153
-8805,1401290,132
-8806,1401422,132
-8807,1401554,146
-8808,1401700,190
-8809,1401890,190
-8810,1402080,134
-8811,1402214,146
-8812,1402360,169
-8813,1402529,223
-8814,1402752,216
-8815,1402968,216
-8816,1403184,152
-8817,1403336,181
-8818,1403517,170
-8819,1403687,172
-8820,1403859,122
-8821,1403981,157
-8822,1404138,127
-8823,1404265,152
-8824,1404417,296
-8825,1404713,150
-8826,1404863,134
-8827,1404997,139
-8828,1405136,166
-8829,1405302,119
-8830,1405421,197
-8831,1405618,152
-8832,1405770,122
-8833,1405892,158
-8834,1406050,147
-8835,1406197,143
-8836,1406340,192
-8837,1406532,166
-8838,1406698,126
-8839,1406824,157
-8840,1406981,154
-8841,1407135,145
-8842,1407280,182
-8843,1407462,198
-8844,1407660,152
-8845,1407812,150
-8846,1407962,118
-8847,1408080,130
-8848,1408210,144
-8849,1408354,144
-8850,1408498,122
-8851,1408620,189
-8852,1408809,160
-8853,1408969,160
-8854,1409129,156
-8855,1409285,155
-8856,1409440,166
-8857,1409606,154
-8858,1409760,133
-8859,1409893,206
-8860,1410099,166
-8861,1410265,180
-8862,1410445,208
-8863,1410653,148
-8864,1410801,157
-8865,1410958,225
-8866,1411183,180
-8867,1411363,175
-8868,1411538,121
-8869,1411659,147
-8870,1411806,197
-8871,1412003,152
-8872,1412155,125
-8873,1412280,157
-8874,1412437,155
-8875,1412592,216
-8876,1412808,184
-8877,1412992,162
-8878,1413154,133
-8879,1413287,147
-8880,1413434,172
-8881,1413606,109
-8882,1413715,154
-8883,1413869,117
-8884,1413986,166
-8885,1414152,153
-8886,1414305,163
-8887,1414468,164
-8888,1414632,171
-8889,1414803,174
-8890,1414977,166
-8891,1415143,148
-8892,1415291,132
-8893,1415423,144
-8894,1415567,144
-8895,1415711,216
-8896,1415927,280
-8897,1416207,147
-8898,1416354,190
-8899,1416544,173
-8900,1416717,111
-8901,1416828,191
-8902,1417019,136
-8903,1417155,169
-8904,1417324,148
-8905,1417472,143
-8906,1417615,168
-8907,1417783,132
-8908,1417915,158
-8909,1418073,201
-8910,1418274,207
-8911,1418481,167
-8912,1418648,131
-8913,1418779,154
-8914,1418933,219
-8915,1419152,151
-8916,1419303,139
-8917,1419442,226
-8918,1419668,131
-8919,1419799,155
-8920,1419954,295
-8921,1420249,197
-8922,1420446,147
-8923,1420593,156
-8924,1420749,157
-8925,1420906,149
-8926,1421055,148
-8927,1421203,131
-8928,1421334,170
-8929,1421504,135
-8930,1421639,152
-8931,1421791,145
-8932,1421936,199
-8933,1422135,181
-8934,1422316,257
-8935,1422573,150
-8936,1422723,206
-8937,1422929,153
-8938,1423082,144
-8939,1423226,118
-8940,1423344,204
-8941,1423548,151
-8942,1423699,162
-8943,1423861,131
-8944,1423992,162
-8945,1424154,56
-8946,1424210,136
-8947,1424346,145
-8948,1424491,170
-8949,1424661,161
-8950,1424822,175
-8951,1424997,132
-8952,1425129,146
-8953,1425275,142
-8954,1425417,160
-8955,1425577,160
-8956,1425737,132
-8957,1425869,132
-8958,1426001,180
-8959,1426181,133
-8960,1426314,197
-8961,1426511,187
-8962,1426698,153
-8963,1426851,179
-8964,1427030,144
-8965,1427174,144
-8966,1427318,151
-8967,1427469,220
-8968,1427689,226
-8969,1427915,169
-8970,1428084,139
-8971,1428223,132
-8972,1428355,176
-8973,1428531,146
-8974,1428677,123
-8975,1428800,170
-8976,1428970,186
-8977,1429156,181
-8978,1429337,124
-8979,1429461,191
-8980,1429652,160
-8981,1429812,160
-8982,1429972,172
-8983,1430144,149
-8984,1430293,109
-8985,1430402,128
-8986,1430530,135
-8987,1430665,157
-8988,1430822,137
-8989,1430959,164
-8990,1431123,196
-8991,1431319,263
-8992,1431582,137
-8993,1431719,159
-8994,1431878,169
-8995,1432047,111
-8996,1432158,190
-8997,1432348,127
-8998,1432475,192
-8999,1432667,184
-9000,1432851,223
-9001,1433074,128
-9002,1433202,178
-9003,1433380,111
-9004,1433491,138
-9005,1433629,138
-9006,1433767,173
-9007,1433940,199
-9008,1434139,184
-9009,1434323,160
-9010,1434483,124
-9011,1434607,144
-9012,1434751,144
-9013,1434895,177
-9014,1435072,141
-9015,1435213,150
-9016,1435363,129
-9017,1435492,153
-9018,1435645,169
-9019,1435814,167
-9020,1435981,118
-9021,1436099,117
-9022,1436216,151
-9023,1436367,134
-9024,1436501,185
-9025,1436686,251
-9026,1436937,150
-9027,1437087,105
-9028,1437192,175
-9029,1437367,166
-9030,1437533,115
-9031,1437648,166
-9032,1437814,134
-9033,1437948,213
-9034,1438161,56
-9035,1438217,188
-9036,1438405,131
-9037,1438536,196
-9038,1438732,195
-9039,1438927,214
-9040,1439141,116
-9041,1439257,121
-9042,1439378,140
-9043,1439518,178
-9044,1439696,162
-9045,1439858,206
-9046,1440064,139
-9047,1440203,188
-9048,1440391,120
-9049,1440511,252
-9050,1440763,219
-9051,1440982,140
-9052,1441122,128
-9053,1441250,144
-9054,1441394,144
-9055,1441538,165
-9056,1441703,180
-9057,1441883,146
-9058,1442029,143
-9059,1442172,216
-9060,1442388,169
-9061,1442557,140
-9062,1442697,223
-9063,1442920,134
-9064,1443054,122
-9065,1443176,146
-9066,1443322,157
-9067,1443479,147
-9068,1443626,124
-9069,1443750,135
-9070,1443885,152
-9071,1444037,187
-9072,1444224,149
-9073,1444373,165
-9074,1444538,254
-9075,1444792,148
-9076,1444940,132
-9077,1445072,132
-9078,1445204,149
-9079,1445353,174
-9080,1445527,139
-9081,1445666,231
-9082,1445897,112
-9083,1446009,147
-9084,1446156,138
-9085,1446294,153
-9086,1446447,122
-9087,1446569,126
-9088,1446695,153
-9089,1446848,230
-9090,1447078,220
-9091,1447298,150
-9092,1447448,144
-9093,1447592,119
-9094,1447711,123
-9095,1447834,133
-9096,1447967,154
-9097,1448121,270
-9098,1448391,143
-9099,1448534,195
-9100,1448729,56
-9101,1448785,170
-9102,1448955,145
-9103,1449100,150
-9104,1449250,204
-9105,1449454,174
-9106,1449628,154
-9107,1449782,132
-9108,1449914,159
-9109,1450073,132
-9110,1450205,221
-9111,1450426,156
-9112,1450582,124
-9113,1450706,215
-9114,1450921,162
-9115,1451083,174
-9116,1451257,143
-9117,1451400,207
-9118,1451607,206
-9119,1451813,147
-9120,1451960,179
-9121,1452139,169
-9122,1452308,132
-9123,1452440,132
-9124,1452572,165
-9125,1452737,148
-9126,1452885,127
-9127,1453012,175
-9128,1453187,146
-9129,1453333,225
-9130,1453558,171
-9131,1453729,144
-9132,1453873,144
-9133,1454017,137
-9134,1454154,134
-9135,1454288,166
-9136,1454454,193
-9137,1454647,212
-9138,1454859,174
-9139,1455033,128
-9140,1455161,132
-9141,1455293,160
-9142,1455453,197
-9143,1455650,174
-9144,1455824,196
-9145,1456020,154
-9146,1456174,183
-9147,1456357,146
-9148,1456503,152
-9149,1456655,151
-9150,1456806,134
-9151,1456940,138
-9152,1457078,162
-9153,1457240,129
-9154,1457369,243
-9155,1457612,145
-9156,1457757,124
-9157,1457881,198
-9158,1458079,147
-9159,1458226,121
-9160,1458347,136
-9161,1458483,242
-9162,1458725,143
-9163,1458868,220
-9164,1459088,155
-9165,1459243,233
-9166,1459476,193
-9167,1459669,155
-9168,1459824,150
-9169,1459974,140
-9170,1460114,175
-9171,1460289,217
-9172,1460506,147
-9173,1460653,149
-9174,1460802,169
-9175,1460971,153
-9176,1461124,112
-9177,1461236,141
-9178,1461377,190
-9179,1461567,128
-9180,1461695,185
-9181,1461880,149
-9182,1462029,157
-9183,1462186,124
-9184,1462310,143
-9185,1462453,151
-9186,1462604,166
-9187,1462770,139
-9188,1462909,173
-9189,1463082,197
-9190,1463279,133
-9191,1463412,117
-9192,1463529,187
-9193,1463716,140
-9194,1463856,144
-9195,1464000,144
-9196,1464144,140
-9197,1464284,132
-9198,1464416,132
-9199,1464548,150
-9200,1464698,236
-9201,1464934,166
-9202,1465100,161
-9203,1465261,154
-9204,1465415,118
-9205,1465533,126
-9206,1465659,197
-9207,1465856,56
-9208,1465912,209
-9209,1466121,182
-9210,1466303,153
-9211,1466456,148
-9212,1466604,156
-9213,1466760,153
-9214,1466913,129
-9215,1467042,202
-9216,1467244,138
-9217,1467382,167
-9218,1467549,133
-9219,1467682,132
-9220,1467814,132
-9221,1467946,132
-9222,1468078,179
-9223,1468257,124
-9224,1468381,144
-9225,1468525,140
-9226,1468665,147
-9227,1468812,141
-9228,1468953,128
-9229,1469081,133
-9230,1469214,193
-9231,1469407,170
-9232,1469577,176
-9233,1469753,156
-9234,1469909,224
-9235,1470133,144
-9236,1470277,144
-9237,1470421,146
-9238,1470567,172
-9239,1470739,157
-9240,1470896,154
-9241,1471050,56
-9242,1471106,145
-9243,1471251,180
-9244,1471431,195
-9245,1471626,181
-9246,1471807,155
-9247,1471962,159
-9248,1472121,136
-9249,1472257,184
-9250,1472441,174
-9251,1472615,218
-9252,1472833,187
-9253,1473020,278
-9254,1473298,150
-9255,1473448,170
-9256,1473618,121
-9257,1473739,181
-9258,1473920,159
-9259,1474079,191
-9260,1474270,189
-9261,1474459,140
-9262,1474599,146
-9263,1474745,138
-9264,1474883,168
-9265,1475051,164
-9266,1475215,194
-9267,1475409,155
-9268,1475564,139
-9269,1475703,176
-9270,1475879,124
-9271,1476003,151
-9272,1476154,154
-9273,1476308,218
-9274,1476526,150
-9275,1476676,133
-9276,1476809,132
-9277,1476941,173
-9278,1477114,56
-9279,1477170,118
-9280,1477288,148
-9281,1477436,164
-9282,1477600,136
-9283,1477736,138
-9284,1477874,160
-9285,1478034,157
-9286,1478191,142
-9287,1478333,130
-9288,1478463,171
-9289,1478634,264
-9290,1478898,146
-9291,1479044,148
-9292,1479192,163
-9293,1479355,187
-9294,1479542,159
-9295,1479701,194
-9296,1479895,144
-9297,1480039,144
-9298,1480183,153
-9299,1480336,119
-9300,1480455,188
-9301,1480643,132
-9302,1480775,121
-9303,1480896,174
-9304,1481070,154
-9305,1481224,159
-9306,1481383,190
-9307,1481573,209
-9308,1481782,170
-9309,1481952,175
-9310,1482127,176
-9311,1482303,179
-9312,1482482,194
-9313,1482676,185
-9314,1482861,182
-9315,1483043,141
-9316,1483184,137
-9317,1483321,144
-9318,1483465,120
-9319,1483585,155
-9320,1483740,218
-9321,1483958,127
-9322,1484085,185
-9323,1484270,166
-9324,1484436,149
-9325,1484585,154
-9326,1484739,140
-9327,1484879,139
-9328,1485018,137
-9329,1485155,186
-9330,1485341,138
-9331,1485479,169
-9332,1485648,152
-9333,1485800,204
-9334,1486004,142
-9335,1486146,177
-9336,1486323,205
-9337,1486528,161
-9338,1486689,198
-9339,1486887,159
-9340,1487046,133
-9341,1487179,132
-9342,1487311,150
-9343,1487461,143
-9344,1487604,140
-9345,1487744,153
-9346,1487897,152
-9347,1488049,146
-9348,1488195,154
-9349,1488349,142
-9350,1488491,149
-9351,1488640,154
-9352,1488794,205
-9353,1488999,136
-9354,1489135,154
-9355,1489289,182
-9356,1489471,156
-9357,1489627,172
-9358,1489799,118
-9359,1489917,183
-9360,1490100,169
-9361,1490269,153
-9362,1490422,198
-9363,1490620,154
-9364,1490774,201
-9365,1490975,166
-9366,1491141,167
-9367,1491308,144
-9368,1491452,144
-9369,1491596,154
-9370,1491750,277
-9371,1492027,202
-9372,1492229,231
-9373,1492460,186
-9374,1492646,135
-9375,1492781,146
-9376,1492927,132
-9377,1493059,132
-9378,1493191,205
-9379,1493396,163
-9380,1493559,145
-9381,1493704,151
-9382,1493855,144
-9383,1493999,184
-9384,1494183,166
-9385,1494349,160
-9386,1494509,148
-9387,1494657,153
-9388,1494810,227
-9389,1495037,143
-9390,1495180,126
-9391,1495306,150
-9392,1495456,128
-9393,1495584,141
-9394,1495725,125
-9395,1495850,160
-9396,1496010,139
-9397,1496149,143
-9398,1496292,139
-9399,1496431,153
-9400,1496584,163
-9401,1496747,243
-9402,1496990,147
-9403,1497137,179
-9404,1497316,152
-9405,1497468,178
-9406,1497646,161
-9407,1497807,110
-9408,1497917,185
-9409,1498102,195
-9410,1498297,139
-9411,1498436,144
-9412,1498580,144
-9413,1498724,155
-9414,1498879,143
-9415,1499022,153
-9416,1499175,164
-9417,1499339,164
-9418,1499503,132
-9419,1499635,143
-9420,1499778,195
-9421,1499973,141
-9422,1500114,141
-9423,1500255,158
-9424,1500413,217
-9425,1500630,137
-9426,1500767,168
-9427,1500935,128
-9428,1501063,125
-9429,1501188,183
-9430,1501371,160
-9431,1501531,160
-9432,1501691,170
-9433,1501861,138
-9434,1501999,180
-9435,1502179,177
-9436,1502356,143
-9437,1502499,128
-9438,1502627,167
-9439,1502794,137
-9440,1502931,145
-9441,1503076,153
-9442,1503229,183
-9443,1503412,132
-9444,1503544,134
-9445,1503678,166
-9446,1503844,162
-9447,1504006,151
-9448,1504157,134
-9449,1504291,245
-9450,1504536,176
-9451,1504712,173
-9452,1504885,240
-9453,1505125,191
-9454,1505316,180
-9455,1505496,161
-9456,1505657,134
-9457,1505791,231
-9458,1506022,239
-9459,1506261,160
-9460,1506421,176
-9461,1506597,146
-9462,1506743,175
-9463,1506918,144
-9464,1507062,161
-9465,1507223,144
-9466,1507367,163
-9467,1507530,56
-9468,1507586,200
-9469,1507786,177
-9470,1507963,107
-9471,1508070,152
-9472,1508222,124
-9473,1508346,148
-9474,1508494,124
-9475,1508618,175
-9476,1508793,162
-9477,1508955,155
-9478,1509110,156
-9479,1509266,125
-9480,1509391,152
-9481,1509543,150
-9482,1509693,172
-9483,1509865,163
-9484,1510028,127
-9485,1510155,158
-9486,1510313,145
-9487,1510458,172
-9488,1510630,172
-9489,1510802,204
-9490,1511006,165
-9491,1511171,127
-9492,1511298,190
-9493,1511488,140
-9494,1511628,167
-9495,1511795,129
-9496,1511924,172
-9497,1512096,132
-9498,1512228,160
-9499,1512388,157
-9500,1512545,124
-9501,1512669,132
-9502,1512801,145
-9503,1512946,133
-9504,1513079,149
-9505,1513228,173
-9506,1513401,195
-9507,1513596,134
-9508,1513730,210
-9509,1513940,134
-9510,1514074,204
-9511,1514278,134
-9512,1514412,151
-9513,1514563,152
-9514,1514715,163
-9515,1514878,194
-9516,1515072,175
-9517,1515247,181
-9518,1515428,134
-9519,1515562,133
-9520,1515695,164
-9521,1515859,152
-9522,1516011,152
-9523,1516163,134
-9524,1516297,56
-9525,1516353,148
-9526,1516501,164
-9527,1516665,178
-9528,1516843,229
-9529,1517072,127
-9530,1517199,133
-9531,1517332,188
-9532,1517520,121
-9533,1517641,157
-9534,1517798,154
-9535,1517952,56
-9536,1518008,180
-9537,1518188,140
-9538,1518328,173
-9539,1518501,150
-9540,1518651,132
-9541,1518783,144
-9542,1518927,144
-9543,1519071,132
-9544,1519203,132
-9545,1519335,235
-9546,1519570,177
-9547,1519747,124
-9548,1519871,149
-9549,1520020,184
-9550,1520204,209
-9551,1520413,140
-9552,1520553,139
-9553,1520692,129
-9554,1520821,136
-9555,1520957,150
-9556,1521107,147
-9557,1521254,154
-9558,1521408,199
-9559,1521607,142
-9560,1521749,170
-9561,1521919,182
-9562,1522101,146
-9563,1522247,136
-9564,1522383,151
-9565,1522534,163
-9566,1522697,195
-9567,1522892,114
-9568,1523006,186
-9569,1523192,167
-9570,1523359,168
-9571,1523527,147
-9572,1523674,134
-9573,1523808,136
-9574,1523944,169
-9575,1524113,153
-9576,1524266,279
-9577,1524545,134
-9578,1524679,171
-9579,1524850,134
-9580,1524984,190
-9581,1525174,154
-9582,1525328,138
-9583,1525466,120
-9584,1525586,223
-9585,1525809,208
-9586,1526017,134
-9587,1526151,208
-9588,1526359,174
-9589,1526533,145
-9590,1526678,147
-9591,1526825,143
-9592,1526968,162
-9593,1527130,134
-9594,1527264,251
-9595,1527515,181
-9596,1527696,205
-9597,1527901,198
-9598,1528099,220
-9599,1528319,186
-9600,1528505,151
-9601,1528656,166
-9602,1528822,156
-9603,1528978,144
-9604,1529122,144
-9605,1529266,143
-9606,1529409,223
-9607,1529632,144
-9608,1529776,147
-9609,1529923,163
-9610,1530086,157
-9611,1530243,159
-9612,1530402,243
-9613,1530645,111
-9614,1530756,168
-9615,1530924,161
-9616,1531085,163
-9617,1531248,130
-9618,1531378,212
-9619,1531590,160
-9620,1531750,131
-9621,1531881,162
-9622,1532043,124
-9623,1532167,231
-9624,1532398,258
-9625,1532656,142
-9626,1532798,126
-9627,1532924,255
-9628,1533179,146
-9629,1533325,56
-9630,1533381,214
-9631,1533595,163
-9632,1533758,155
-9633,1533913,132
-9634,1534045,159
-9635,1534204,161
-9636,1534365,185
-9637,1534550,143
-9638,1534693,201
-9639,1534894,149
-9640,1535043,209
-9641,1535252,242
-9642,1535494,224
-9643,1535718,182
-9644,1535900,147
-9645,1536047,184
-9646,1536231,159
-9647,1536390,156
-9648,1536546,131
-9649,1536677,176
-9650,1536853,124
-9651,1536977,160
-9652,1537137,144
-9653,1537281,144
-9654,1537425,129
-9655,1537554,186
-9656,1537740,172
-9657,1537912,148
-9658,1538060,151
-9659,1538211,226
-9660,1538437,124
-9661,1538561,173
-9662,1538734,156
-9663,1538890,151
-9664,1539041,146
-9665,1539187,189
-9666,1539376,136
-9667,1539512,142
-9668,1539654,152
-9669,1539806,215
-9670,1540021,145
-9671,1540166,182
-9672,1540348,140
-9673,1540488,243
-9674,1540731,144
-9675,1540875,154
-9676,1541029,257
-9677,1541286,123
-9678,1541409,123
-9679,1541532,132
-9680,1541664,133
-9681,1541797,212
-9682,1542009,162
-9683,1542171,179
-9684,1542350,150
-9685,1542500,174
-9686,1542674,133
-9687,1542807,103
-9688,1542910,172
-9812,1543082,179
-12288,1543261,201
-12289,1543462,118
-12290,1543580,154
-12291,1543734,132
-12292,1543866,179
-12293,1544045,156
-12294,1544201,198
-12295,1544399,127
-12296,1544526,145
-12297,1544671,148
-12298,1544819,151
-12299,1544970,181
-12300,1545151,145
-12301,1545296,202
-12302,1545498,135
-12303,1545633,160
-12304,1545793,216
-12305,1546009,156
-12306,1546165,172
-12307,1546337,131
-12308,1546468,131
-12309,1546599,135
-12310,1546734,158
-12311,1546892,152
-12312,1547044,187
-12313,1547231,155
-12314,1547386,150
-12315,1547536,166
-12316,1547702,173
-12317,1547875,142
-12318,1548017,166
-12319,1548183,153
-12320,1548336,126
-12321,1548462,205
-12322,1548667,204
-12323,1548871,171
-12324,1549042,154
-12325,1549196,207
-12326,1549403,140
-12327,1549543,147
-12328,1549690,152
-12329,1549842,166
-12330,1550008,202
-12331,1550210,156
-12332,1550366,160
-12333,1550526,166
-12334,1550692,135
-12335,1550827,151
-12336,1550978,151
-12337,1551129,167
-12338,1551296,137
-12339,1551433,184
-12340,1551617,151
-12341,1551768,157
-12342,1551925,185
-12343,1552110,162
-12344,1552272,117
-12345,1552389,136
-12346,1552525,110
-12347,1552635,207
-12348,1552842,165
-12349,1553007,131
-12350,1553138,123
-12351,1553261,156
-12352,1553417,154
-12353,1553571,192
-12354,1553763,155
-12355,1553918,181
-12356,1554099,138
-12357,1554237,171
-12358,1554408,183
-12359,1554591,181
-12360,1554772,158
-12361,1554930,162
-12362,1555092,122
-12363,1555214,150
-12364,1555364,161
-12365,1555525,109
-12366,1555634,149
-12367,1555783,186
-12368,1555969,148
-12369,1556117,186
-12370,1556303,152
-12371,1556455,122
-12372,1556577,205
-12373,1556782,166
-12374,1556948,124
-12375,1557072,138
-12376,1557210,125
-12377,1557335,133
-12378,1557468,148
-12379,1557616,140
-12380,1557756,166
-12381,1557922,168
-12382,1558090,120
-12383,1558210,117
-12384,1558327,142
-12385,1558469,142
-12386,1558611,175
-12387,1558786,157
-12388,1558943,176
-12389,1559119,153
-12390,1559272,146
-12391,1559418,200
-12392,1559618,183
-12393,1559801,216
-12394,1560017,193
-12395,1560210,153
-12396,1560363,135
-12397,1560498,158
-12398,1560656,135
-12399,1560791,194
-12400,1560985,152
-12401,1561137,154
-12402,1561291,177
-12403,1561468,162
-12404,1561630,145
-12405,1561775,120
-12406,1561895,146
-12407,1562041,136
-12408,1562177,155
-12409,1562332,129
-12410,1562461,211
-12411,1562672,155
-12412,1562827,129
-12413,1562956,137
-12414,1563093,173
-12415,1563266,137
-12416,1563403,155
-12417,1563558,166
-12418,1563724,208
-12419,1563932,145
-12420,1564077,183
-12421,1564260,147
-12422,1564407,157
-12423,1564564,145
-12424,1564709,161
-12425,1564870,163
-12426,1565033,144
-12427,1565177,131
-12428,1565308,153
-12429,1565461,149
-12430,1565610,176
-12431,1565786,161
-12432,1565947,151
-12433,1566098,203
-12434,1566301,133
-12435,1566434,163
-12436,1566597,155
-12437,1566752,205
-12438,1566957,155
-12439,1567112,107
-12440,1567219,183
-12441,1567402,156
-12442,1567558,149
-12443,1567707,121
-12444,1567828,165
-12445,1567993,167
-12446,1568160,142
-12447,1568302,137
-12448,1568439,168
-12449,1568607,172
-12450,1568779,146
-12451,1568925,154
-12452,1569079,181
-12453,1569260,138
-12454,1569398,163
-12455,1569561,175
-12456,1569736,154
-12457,1569890,157
-12458,1570047,219
-12459,1570266,197
-12460,1570463,162
-12461,1570625,173
-12462,1570798,149
-12463,1570947,149
-12464,1571096,161
-12465,1571257,145
-12466,1571402,133
-12467,1571535,167
-12468,1571702,152
-12469,1571854,161
-12470,1572015,155
-12471,1572170,177
-12472,1572347,152
-12473,1572499,118
-12474,1572617,206
-12475,1572823,136
-12476,1572959,125
-12477,1573084,143
-12478,1573227,163
-12479,1573390,138
-12480,1573528,153
-12481,1573681,135
-12482,1573816,106
-12483,1573922,169
-12484,1574091,165
-12485,1574256,170
-12486,1574426,155
-12487,1574581,189
-12488,1574770,123
-12489,1574893,118
-12490,1575011,135
-12491,1575146,168
-12492,1575314,138
-12493,1575452,155
-12494,1575607,127
-12495,1575734,145
-12496,1575879,140
-12497,1576019,143
-12498,1576162,195
-12499,1576357,153
-12500,1576510,146
-12501,1576656,127
-12502,1576783,146
-12503,1576929,161
-12504,1577090,133
-12505,1577223,180
-12506,1577403,184
-12507,1577587,170
-12508,1577757,203
-12509,1577960,163
-12510,1578123,142
-12511,1578265,187
-12512,1578452,158
-12513,1578610,162
-12514,1578772,177
-12515,1578949,155
-12516,1579104,151
-12517,1579255,145
-12518,1579400,157
-12519,1579557,159
-12520,1579716,135
-12521,1579851,206
-12522,1580057,174
-12523,1580231,178
-12524,1580409,126
-12525,1580535,177
-12526,1580712,179
-12527,1580891,157
-12528,1581048,163
-12529,1581211,172
-12530,1581383,155
-12531,1581538,135
-12532,1581673,155
-12533,1581828,145
-12534,1581973,152
-12535,1582125,125
-12536,1582250,184
-12537,1582434,182
-12538,1582616,151
-12539,1582767,141
-12540,1582908,166
-12541,1583074,165
-12542,1583239,108
-12543,1583347,201
-16384,1583548,176
-16385,1583724,194
-16386,1583918,156
-16387,1584074,216
-16388,1584290,135
-16389,1584425,139
-16390,1584564,229
-16391,1584793,152
-16392,1584945,204
-16393,1585149,194
-16394,1585343,169
-16395,1585512,152
-16396,1585664,163
-16397,1585827,179
-16398,1586006,168
-16399,1586174,148
-16400,1586322,153
-16401,1586475,164
-16402,1586639,131
-16403,1586770,213
-16404,1586983,133
-16405,1587116,173
-16406,1587289,197
-16407,1587486,161
-16408,1587647,151
-16409,1587798,151
-16410,1587949,177
-16411,1588126,156
-16412,1588282,152
-16413,1588434,155
-16414,1588589,116
-16415,1588705,187
-16416,1588892,158
-16417,1589050,136
-16418,1589186,153
-16419,1589339,156
-16420,1589495,137
-16421,1589632,152
-16422,1589784,157
-16423,1589941,155
-16424,1590096,184
-16425,1590280,113
-16426,1590393,142
-16427,1590535,186
-16428,1590721,184
-16429,1590905,163
-16430,1591068,169
-16431,1591237,160
-16432,1591397,132
-16433,1591529,168
-16434,1591697,177
-16435,1591874,167
-16436,1592041,144
-16437,1592185,118
-16438,1592303,167
-16439,1592470,140
-16440,1592610,206
-16441,1592816,185
-16442,1593001,167
-16443,1593168,193
-16444,1593361,131
-16445,1593492,128
-16446,1593620,152
-16447,1593772,193
-16448,1593965,145
-16449,1594110,128
-16450,1594238,133
-16451,1594371,197
-16452,1594568,211
-16453,1594779,152
-16454,1594931,175
-16455,1595106,143
-16456,1595249,180
-16457,1595429,138
-16458,1595567,201
-16459,1595768,155
-16460,1595923,154
-16461,1596077,179
-16462,1596256,137
-16463,1596393,182
-16464,1596575,143
-16465,1596718,131
-16466,1596849,147
-16467,1596996,138
-16468,1597134,166
-16469,1597300,152
-16470,1597452,151
-16471,1597603,172
-16472,1597775,127
-16473,1597902,175
-16474,1598077,187
-16475,1598264,171
-16476,1598435,209
-16477,1598644,132
-16478,1598776,137
-16479,1598913,182
-16480,1599095,179
-16481,1599274,245
-16482,1599519,182
-16483,1599701,149
-16484,1599850,161
-16485,1600011,130
-16486,1600141,184
-16487,1600325,155
-16488,1600480,141
-16489,1600621,150
-16490,1600771,168
-16491,1600939,119
-16492,1601058,146
-16493,1601204,148
-16494,1601352,127
-16495,1601479,134
-16496,1601613,186
-16497,1601799,155
-16498,1601954,158
-16499,1602112,146
-16500,1602258,169
-16501,1602427,182
-16502,1602609,171
-16503,1602780,195
-16504,1602975,156
-16505,1603131,206
-16506,1603337,178
-16507,1603515,196
-16508,1603711,151
-16509,1603862,158
-16510,1604020,155
-16511,1604175,120
-16512,1604295,145
-16513,1604440,167
-16514,1604607,172
-16515,1604779,181
-16516,1604960,171
-16517,1605131,133
-16518,1605264,160
-16519,1605424,169
-16520,1605593,157
-16521,1605750,185
-16522,1605935,174
-16523,1606109,148
-16524,1606257,147
-16525,1606404,168
-16526,1606572,136
-16527,1606708,152
-16528,1606860,147
-16529,1607007,178
-16530,1607185,164
-16531,1607349,187
-16532,1607536,150
-16533,1607686,202
-16534,1607888,145
-16535,1608033,163
-16536,1608196,146
-16537,1608342,155
-16538,1608497,152
-16539,1608649,154
-16540,1608803,128
-16541,1608931,145
-16542,1609076,205
-16543,1609281,176
-16544,1609457,154
-16545,1609611,139
-16546,1609750,193
-16547,1609943,171
-16548,1610114,139
-16549,1610253,149
-16550,1610402,124
-16551,1610526,173
-16552,1610699,192
-16553,1610891,141
-16554,1611032,149
-16555,1611181,160
-16556,1611341,152
-16557,1611493,156
-16558,1611649,152
-16559,1611801,152
-16560,1611953,169
-16561,1612122,141
-16562,1612263,134
-16563,1612397,172
-16564,1612569,133
-16565,1612702,202
-16566,1612904,149
-16567,1613053,154
-16568,1613207,133
-16569,1613340,152
-16570,1613492,166
-16571,1613658,180
-16572,1613838,145
-16573,1613983,162
-16574,1614145,169
-16575,1614314,172
-16576,1614486,159
-16577,1614645,214
-16578,1614859,178
-16579,1615037,157
-16580,1615194,160
-16581,1615354,164
-16582,1615518,153
-16583,1615671,193
-16584,1615864,169
-16585,1616033,139
-16586,1616172,211
-16587,1616383,147
-16588,1616530,187
-16589,1616717,177
-16590,1616894,156
-16591,1617050,151
-16592,1617201,168
-16593,1617369,181
-16594,1617550,146
-16595,1617696,185
-16596,1617881,142
-16597,1618023,140
-16598,1618163,138
-16599,1618301,142
-16600,1618443,204
-16601,1618647,156
-16602,1618803,167
-16603,1618970,185
-16604,1619155,154
-16605,1619309,140
-16606,1619449,163
-16607,1619612,155
-16608,1619767,149
-16609,1619916,155
-16610,1620071,175
-16611,1620246,187
-16612,1620433,155
-16613,1620588,149
-16614,1620737,132
-16615,1620869,217
-16616,1621086,168
-16617,1621254,142
-16618,1621396,182
-16619,1621578,161
-16620,1621739,172
-16621,1621911,165
-16622,1622076,134
-16623,1622210,138
-16624,1622348,173
-16625,1622521,167
-16626,1622688,176
-16627,1622864,115
-16628,1622979,166
-16629,1623145,132
-16630,1623277,197
-16631,1623474,143
-16632,1623617,169
-16633,1623786,134
-16634,1623920,152
-16635,1624072,202
-16636,1624274,170
-16637,1624444,112
-16638,1624556,149
-16639,1624705,155
-16978,1624860,161
-17665,1625021,161
-20480,1625182,173
-20481,1625355,137
-20482,1625492,122
-20483,1625614,140
-20484,1625754,142
-20486,1625896,107
-20487,1626003,209
-20488,1626212,166
-20489,1626378,163
-20490,1626541,183
-20491,1626724,164
-20492,1626888,144
-20493,1627032,160
-20494,1627192,159
-20495,1627351,158
-20496,1627509,163
-20498,1627672,123
-20499,1627795,163
-20500,1627958,165
-20501,1628123,149
-20502,1628272,157
-20503,1628429,137
-20504,1628566,157
-20505,1628723,157
-20506,1628880,140
-20507,1629020,144
-20508,1629164,156
-20510,1629320,171
-20511,1629491,164
-20512,1629655,175
-20513,1629830,155
-20514,1629985,195
-20515,1630180,168
-20516,1630348,137
-20518,1630485,139
-20519,1630624,158
-20520,1630782,157
-20521,1630939,154
-20522,1631093,164
-20523,1631257,173
-20524,1631430,196
-20525,1631626,171
-20526,1631797,144
-20527,1631941,164
-20528,1632105,144
-20529,1632249,164
-20530,1632413,158
-20531,1632571,146
-20534,1632717,132
-20535,1632849,160
-20536,1633009,179
-20537,1633188,147
-20538,1633335,166
-20539,1633501,154
-20540,1633655,188
-20542,1633843,165
-20543,1634008,136
-20544,1634144,182
-20545,1634326,182
-20546,1634508,171
-20547,1634679,161
-20548,1634840,148
-20549,1634988,204
-20550,1635192,212
-20551,1635404,56
-20552,1635460,140
-20553,1635600,143
-20554,1635743,141
-20555,1635884,133
-20556,1636017,145
-20557,1636162,180
-20558,1636342,144
-20559,1636486,156
-20560,1636642,157
-20561,1636799,164
-20562,1636963,145
-20563,1637108,156
-20564,1637264,164
-20565,1637428,124
-20566,1637552,129
-20567,1637681,156
-20568,1637837,183
-20569,1638020,144
-20570,1638164,153
-20571,1638317,175
-20572,1638492,136
-20574,1638628,158
-20575,1638786,132
-20576,1638918,138
-20578,1639056,179
-20579,1639235,138
-20580,1639373,136
-20581,1639509,164
-20582,1639673,191
-20583,1639864,134
-20584,1639998,172
-20585,1640170,157
-20586,1640327,139
-20587,1640466,121
-20588,1640587,148
-20589,1640735,165
-20590,1640900,178
-20591,1641078,111
-20592,1641189,218
-20593,1641407,154
-20594,1641561,142
-20595,1641703,164
-20596,1641867,154
-20597,1642021,142
-20598,1642163,139
-20599,1642302,181
-20600,1642483,158
-20601,1642641,56
-20602,1642697,152
-20603,1642849,174
-20604,1643023,138
-20605,1643161,104
-20606,1643265,144
-20607,1643409,169
-20608,1643578,164
-20609,1643742,161
-20610,1643903,174
-20611,1644077,127
-20612,1644204,133
-20614,1644337,142
-20615,1644479,160
-20616,1644639,147
-20617,1644786,174
-20619,1644960,153
-20620,1645113,135
-20621,1645248,196
-20622,1645444,136
-20623,1645580,159
-20624,1645739,138
-20625,1645877,133
-20626,1646010,167
-20627,1646177,124
-20628,1646301,195
-20629,1646496,151
-20630,1646647,170
-20631,1646817,171
-20632,1646988,127
-20633,1647115,154
-20634,1647269,179
-20635,1647448,131
-20636,1647579,122
-20637,1647701,154
-20638,1647855,191
-20639,1648046,154
-20640,1648200,177
-20641,1648377,154
-20642,1648531,158
-20643,1648689,175
-20644,1648864,132
-20645,1648996,207
-20646,1649203,121
-20647,1649324,164
-20648,1649488,145
-20649,1649633,172
-20650,1649805,169
-20651,1649974,145
-20652,1650119,167
-20653,1650286,179
-20654,1650465,198
-20655,1650663,136
-20656,1650799,181
-20657,1650980,142
-20658,1651122,127
-20659,1651249,152
-20660,1651401,192
-20661,1651593,139
-20662,1651732,205
-20663,1651937,195
-20664,1652132,157
-20665,1652289,159
-20666,1652448,150
-20667,1652598,140
-20668,1652738,153
-20669,1652891,158
-20670,1653049,137
-20671,1653186,172
-20672,1653358,130
-20673,1653488,164
-20674,1653652,157
-20676,1653809,102
-20677,1653911,151
-20678,1654062,238
-20680,1654300,164
-20681,1654464,128
-20682,1654592,161
-20683,1654753,112
-20684,1654865,161
-20685,1655026,112
-20686,1655138,185
-20687,1655323,239
-20688,1655562,143
-20689,1655705,164
-20690,1655869,150
-20691,1656019,171
-20692,1656190,200
-20693,1656390,141
-20694,1656531,124
-20695,1656655,112
-20696,1656767,169
-20697,1656936,214
-20698,1657150,155
-20699,1657305,170
-20700,1657475,184
-20701,1657659,177
-20702,1657836,152
-20703,1657988,137
-20705,1658125,211
-20706,1658336,158
-20707,1658494,133
-20708,1658627,151
-20710,1658778,159
-20711,1658937,191
-20712,1659128,146
-20714,1659274,153
-20715,1659427,179
-20716,1659606,111
-20717,1659717,133
-20718,1659850,160
-20719,1660010,135
-20720,1660145,164
-20721,1660309,174
-20722,1660483,139
-20723,1660622,211
-20724,1660833,165
-20726,1660998,186
-20727,1661184,197
-20728,1661381,183
-20729,1661564,137
-20730,1661701,139
-20731,1661840,135
-20732,1661975,198
-20733,1662173,178
-20734,1662351,117
-20735,1662468,171
-24576,1662639,118
-24577,1662757,137
-24578,1662894,188
-24579,1663082,160
-24580,1663242,175
-24581,1663417,155
-24582,1663572,158
-24583,1663730,142
-24584,1663872,142
-24585,1664014,150
-24586,1664164,169
-24587,1664333,119
-24588,1664452,160
-24589,1664612,134
-24590,1664746,165
-24591,1664911,135
-24592,1665046,167
-24593,1665213,154
-24594,1665367,158
-24595,1665525,142
-24596,1665667,158
-24597,1665825,143
-24598,1665968,135
-24599,1666103,126
-24600,1666229,163
-24601,1666392,146
-24602,1666538,145
-24603,1666683,143
-24604,1666826,163
-24605,1666989,166
-24606,1667155,128
-24607,1667283,147
-24608,1667430,156
-24609,1667586,169
-24610,1667755,150
-24611,1667905,159
-24612,1668064,162
-24613,1668226,176
-24614,1668402,149
-24615,1668551,187
-24616,1668738,162
-24617,1668900,159
-24618,1669059,213
-24619,1669272,132
-24620,1669404,161
-24621,1669565,159
-24622,1669724,147
-24623,1669871,150
-24624,1670021,143
-24625,1670164,120
-24626,1670284,134
-24627,1670418,141
-24628,1670559,128
-24629,1670687,170
-24630,1670857,157
-24631,1671014,165
-24632,1671179,193
-24633,1671372,169
-24634,1671541,183
-24635,1671724,126
-24636,1671850,158
-24637,1672008,123
-24638,1672131,150
-24639,1672281,140
-24640,1672421,129
-24641,1672550,166
-24642,1672716,133
-24643,1672849,152
-24644,1673001,156
-24645,1673157,145
-24646,1673302,139
-24647,1673441,150
-24648,1673591,133
-24649,1673724,146
-24650,1673870,147
-24651,1674017,144
-24652,1674161,136
-24653,1674297,153
-24654,1674450,178
-24655,1674628,153
-24656,1674781,130
-24657,1674911,150
-24658,1675061,216
-24659,1675277,160
-24660,1675437,130
-24661,1675567,143
-24662,1675710,158
-24663,1675868,162
-24664,1676030,186
-24665,1676216,163
-24666,1676379,151
-24667,1676530,167
-24668,1676697,150
-24669,1676847,145
-24670,1676992,167
-24671,1677159,181
-24672,1677340,154
-24673,1677494,171
-24674,1677665,143
-24675,1677808,171
-24676,1677979,130
-24677,1678109,184
-24678,1678293,138
-24679,1678431,155
-24680,1678586,157
-24681,1678743,181
-24682,1678924,186
-24683,1679110,134
-24684,1679244,131
-24685,1679375,169
-24686,1679544,165
-24687,1679709,193
-24688,1679902,150
-24689,1680052,131
-24690,1680183,184
-24691,1680367,166
-24692,1680533,146
-24693,1680679,132
-24694,1680811,213
-24695,1681024,152
-24696,1681176,157
-24697,1681333,160
-24698,1681493,114
-24699,1681607,141
-24700,1681748,148
-24701,1681896,157
-24702,1682053,136
-24703,1682189,154
-24704,1682343,155
-24705,1682498,147
-24706,1682645,170
-24707,1682815,150
-24708,1682965,151
-24709,1683116,136
-24710,1683252,184
-24711,1683436,159
-24712,1683595,161
-24713,1683756,125
-24714,1683881,131
-24715,1684012,165
-24716,1684177,147
-24717,1684324,144
-24718,1684468,201
-24719,1684669,191
-24720,1684860,180
-24721,1685040,156
-24722,1685196,139
-24723,1685335,121
-24724,1685456,147
-24725,1685603,150
-24726,1685753,145
-24727,1685898,142
-24728,1686040,143
-24729,1686183,138
-24730,1686321,122
-24731,1686443,145
-24732,1686588,156
-24733,1686744,148
-24734,1686892,227
-24735,1687119,157
-24736,1687276,185
-24737,1687461,141
-24738,1687602,166
-24739,1687768,159
-24740,1687927,154
-24741,1688081,159
-24742,1688240,157
-24743,1688397,141
-24744,1688538,103
-24745,1688641,118
-24746,1688759,170
-24747,1688929,149
-24748,1689078,163
-24749,1689241,149
-24750,1689390,145
-24751,1689535,155
-24752,1689690,155
-24753,1689845,151
-24754,1689996,145
-24755,1690141,178
-24756,1690319,141
-24757,1690460,114
-24758,1690574,145
-24759,1690719,147
-24760,1690866,133
-24761,1690999,158
-24762,1691157,147
-24763,1691304,179
-24764,1691483,208
-24765,1691691,138
-24766,1691829,137
-24767,1691966,154
-24768,1692120,123
-24769,1692243,153
-24770,1692396,115
-24771,1692511,157
-24772,1692668,141
-24773,1692809,132
-24774,1692941,110
-24775,1693051,160
-24776,1693211,176
-24777,1693387,138
-24778,1693525,172
-24779,1693697,160
-24780,1693857,163
-24781,1694020,136
-24782,1694156,159
-24783,1694315,149
-24784,1694464,173
-24785,1694637,155
-24786,1694792,259
-24787,1695051,154
-24788,1695205,148
-24789,1695353,144
-24790,1695497,187
-24791,1695684,189
-24792,1695873,166
-24793,1696039,148
-24794,1696187,148
-24795,1696335,127
-24796,1696462,213
-24797,1696675,137
-24798,1696812,138
-24799,1696950,179
-24800,1697129,195
-24801,1697324,157
-24802,1697481,173
-24803,1697654,148
-24804,1697802,166
-24805,1697968,153
-24806,1698121,173
-24807,1698294,112
-24808,1698406,190
-24809,1698596,213
-24810,1698809,133
-24811,1698942,165
-24812,1699107,163
-24813,1699270,162
-24814,1699432,132
-24815,1699564,191
-24816,1699755,160
-24817,1699915,137
-24818,1700052,130
-24819,1700182,198
-24820,1700380,187
-24821,1700567,143
-24822,1700710,200
-24823,1700910,139
-24824,1701049,203
-24825,1701252,165
-24826,1701417,182
-24827,1701599,145
-24828,1701744,187
-24829,1701931,122
-24830,1702053,164
-24831,1702217,146
-28848,1702363,156
-28851,1702519,157
-32768,1702676,155
-32769,1702831,169
-32770,1703000,184
-32771,1703184,163
-32772,1703347,169
-32773,1703516,165
-32774,1703681,164
-32775,1703845,139
-32776,1703984,185
-32777,1704169,159
-32778,1704328,164
-32779,1704492,158
-32780,1704650,158
-32781,1704808,134
-32782,1704942,155
-32783,1705097,148
-32784,1705245,155
-32785,1705400,180
-32786,1705580,169
-32787,1705749,154
-32788,1705903,185
-32789,1706088,179
-32790,1706267,165
-32791,1706432,147
-32792,1706579,169
-32793,1706748,173
-32794,1706921,147
-32795,1707068,137
-32796,1707205,177
-32797,1707382,162
-32798,1707544,137
-32799,1707681,150
-32800,1707831,174
-32801,1708005,143
-32802,1708148,128
-32803,1708276,218
-32804,1708494,138
-32805,1708632,141
-32806,1708773,168
-32807,1708941,170
-32808,1709111,171
-32809,1709282,160
-32810,1709442,182
-32811,1709624,167
-32812,1709791,182
-32813,1709973,129
-32814,1710102,151
-32815,1710253,171
-32816,1710424,161
-32817,1710585,130
-32818,1710715,164
-32819,1710879,141
-32820,1711020,126
-32821,1711146,151
-32822,1711297,207
-32823,1711504,156
-32824,1711660,187
-32825,1711847,162
-32826,1712009,141
-32827,1712150,157
-32828,1712307,143
-32829,1712450,157
-32830,1712607,133
-32831,1712740,160
-32832,1712900,166
-32833,1713066,153
-32834,1713219,145
-32835,1713364,161
-32836,1713525,155
-32837,1713680,167
-32838,1713847,186
-32839,1714033,143
-32840,1714176,152
-32841,1714328,166
-32842,1714494,125
-32843,1714619,167
-32844,1714786,148
-32845,1714934,156
-32846,1715090,150
-32847,1715240,183
-32848,1715423,151
-32849,1715574,131
-32850,1715705,171
-32851,1715876,143
-32852,1716019,169
-32853,1716188,123
-32854,1716311,177
-32855,1716488,138
-32856,1716626,163
-32857,1716789,177
-32858,1716966,186
-32859,1717152,149
-32860,1717301,169
-32861,1717470,141
-32862,1717611,165
-32863,1717776,153
-32864,1717929,164
-32865,1718093,168
-32866,1718261,140
-32867,1718401,206
-32868,1718607,145
-32869,1718752,178
-32870,1718930,182
-32871,1719112,163
-32872,1719275,168
-32873,1719443,159
-32874,1719602,158
-32875,1719760,162
-32876,1719922,169
-32877,1720091,156
-32878,1720247,160
-32879,1720407,162
-32880,1720569,150
-32881,1720719,145
-32882,1720864,152
-32883,1721016,142
-32884,1721158,139
-32885,1721297,138
-32886,1721435,105
-32887,1721540,169
-32888,1721709,170
-32889,1721879,184
-32890,1722063,162
-32891,1722225,162
-32892,1722387,136
-32893,1722523,146
-32894,1722669,172
-32895,1722841,160
-32896,1723001,152
-32897,1723153,165
-32898,1723318,174
-32899,1723492,155
-32900,1723647,165
-32901,1723812,185
-32902,1723997,160
-32903,1724157,164
-32904,1724321,171
-32905,1724492,164
-32906,1724656,160
-32907,1724816,170
-32908,1724986,163
-32909,1725149,161
-32910,1725310,161
-32911,1725471,151
-32912,1725622,170
-32913,1725792,160
-32914,1725952,152
-32915,1726104,138
-32916,1726242,140
-32917,1726382,176
-32918,1726558,168
-32919,1726726,160
-32920,1726886,183
-32921,1727069,174
-32922,1727243,176
-32923,1727419,153
-32924,1727572,132
-32925,1727704,139
-32926,1727843,139
-32927,1727982,154
-32928,1728136,179
-32929,1728315,141
-32930,1728456,189
-32931,1728645,126
-32932,1728771,151
-32933,1728922,143
-32934,1729065,151
-32935,1729216,135
-32936,1729351,151
-32937,1729502,139
-32938,1729641,121
-32939,1729762,160
-32940,1729922,173
-32941,1730095,146
-32942,1730241,156
-32943,1730397,141
-32944,1730538,169
-32945,1730707,137
-32946,1730844,171
-32947,1731015,181
-32948,1731196,134
-32949,1731330,146
-32950,1731476,136
-32951,1731612,133
-32952,1731745,171
-32953,1731916,169
-32954,1732085,182
-32955,1732267,149
-32956,1732416,183
-32957,1732599,177
-32958,1732776,134
-32959,1732910,197
-32960,1733107,147
-32961,1733254,143
-32962,1733397,191
-32963,1733588,191
-32964,1733779,167
-32965,1733946,173
-32966,1734119,231
-32967,1734350,118
-32968,1734468,141
-32969,1734609,177
-32970,1734786,162
-32971,1734948,150
-32972,1735098,166
-32973,1735264,160
-32974,1735424,181
-32975,1735605,162
-32976,1735767,167
-32977,1735934,162
-32978,1736096,161
-32979,1736257,128
-32980,1736385,168
-32981,1736553,151
-32982,1736704,142
-32983,1736846,142
-32984,1736988,162
-32985,1737150,153
-32986,1737303,137
-32987,1737440,148
-32988,1737588,143
-32989,1737731,137
-32990,1737868,152
-32991,1738020,168
-32992,1738188,150
-32993,1738338,151
-32994,1738489,171
-32995,1738660,206
-32996,1738866,161
-32997,1739027,151
-32998,1739178,154
-32999,1739332,193
-33000,1739525,150
-33001,1739675,147
-33002,1739822,172
-33003,1739994,152
-33004,1740146,171
-33005,1740317,165
-33006,1740482,160
-33007,1740642,127
-33008,1740769,170
-33009,1740939,134
-33010,1741073,146
-33011,1741219,156
-33012,1741375,176
-33013,1741551,133
-33014,1741684,161
-33015,1741845,145
-33016,1741990,127
-33017,1742117,147
-33018,1742264,132
-33019,1742396,137
-33020,1742533,140
-33021,1742673,164
-33022,1742837,157
-33023,1742994,205
-36864,1743199,162
-36865,1743361,190
-36866,1743551,111
-36867,1743662,112
-36868,1743774,166
-36869,1743940,185
-36870,1744125,142
-36871,1744267,194
-36872,1744461,161
-36873,1744622,178
-36874,1744800,218
-36875,1745018,193
-36876,1745211,158
-36877,1745369,151
-36878,1745520,217
-36879,1745737,182
-36880,1745919,168
-36881,1746087,134
-36882,1746221,162
-36883,1746383,188
-36884,1746571,173
-36885,1746744,168
-36886,1746912,103
-36887,1747015,149
-36888,1747164,177
-36889,1747341,161
-36890,1747502,141
-36891,1747643,144
-36892,1747787,128
-36893,1747915,134
-36894,1748049,144
-36895,1748193,153
-36896,1748346,152
-36897,1748498,156
-36898,1748654,130
-36899,1748784,130
-36900,1748914,146
-36901,1749060,212
-36902,1749272,193
-36903,1749465,162
-36904,1749627,161
-36905,1749788,108
-36906,1749896,160
-36907,1750056,160
-36908,1750216,193
-36909,1750409,178
-36910,1750587,158
-36911,1750745,154
-36912,1750899,141
-36913,1751040,116
-36914,1751156,158
-36915,1751314,131
-36916,1751445,130
-36917,1751575,187
-36918,1751762,119
-36919,1751881,146
-36920,1752027,158
-36921,1752185,142
-36922,1752327,152
-36923,1752479,158
-36924,1752637,173
-36925,1752810,147
-36926,1752957,174
-36927,1753131,136
-36928,1753267,180
-36929,1753447,151
-36930,1753598,128
-36931,1753726,153
-36932,1753879,149
-36933,1754028,154
-36934,1754182,151
-36935,1754333,178
-36936,1754511,143
-36937,1754654,169
-36938,1754823,168
-36939,1754991,212
-36940,1755203,134
-36941,1755337,110
-36942,1755447,121
-36943,1755568,162
-36944,1755730,116
-36945,1755846,151
-36946,1755997,151
-36947,1756148,213
-36948,1756361,190
-36949,1756551,210
-36950,1756761,149
-36951,1756910,151
-36952,1757061,263
-36953,1757324,166
-36954,1757490,156
-36955,1757646,173
-36956,1757819,112
-36957,1757931,150
-36958,1758081,152
-36959,1758233,160
-36960,1758393,150
-36961,1758543,193
-36962,1758736,161
-36963,1758897,195
-36964,1759092,142
-36965,1759234,147
-36966,1759381,172
-36967,1759553,173
-36968,1759726,135
-36969,1759861,161
-36970,1760022,157
-36971,1760179,153
-36972,1760332,144
-36973,1760476,157
-36974,1760633,128
-36975,1760761,156
-36976,1760917,146
-36977,1761063,158
-36978,1761221,106
-36979,1761327,168
-36980,1761495,143
-36981,1761638,183
-36982,1761821,176
-36983,1761997,181
-36984,1762178,168
-36985,1762346,135
-36986,1762481,132
-36987,1762613,147
-36988,1762760,169
-36989,1762929,140
-36990,1763069,145
-36991,1763214,178
-36992,1763392,155
-36993,1763547,178
-36994,1763725,126
-36995,1763851,169
-36996,1764020,168
-36997,1764188,188
-36998,1764376,156
-36999,1764532,150
-37000,1764682,206
-37001,1764888,160
-37002,1765048,153
-37003,1765201,155
-37004,1765356,178
-37005,1765534,165
-37006,1765699,168
-37007,1765867,132
-37008,1765999,118
-37009,1766117,142
-37010,1766259,164
-37011,1766423,141
-37012,1766564,170
-37013,1766734,149
-37014,1766883,188
-37015,1767071,135
-37016,1767206,148
-37017,1767354,166
-37018,1767520,158
-37019,1767678,109
-37020,1767787,133
-37021,1767920,189
-37022,1768109,155
-37023,1768264,146
-37024,1768410,133
-37025,1768543,187
-37026,1768730,194
-37027,1768924,165
-37028,1769089,139
-37029,1769228,132
-37030,1769360,156
-37031,1769516,163
-37032,1769679,162
-37033,1769841,138
-37034,1769979,202
-37035,1770181,158
-37036,1770339,141
-37037,1770480,152
-37038,1770632,126
-37039,1770758,156
-37040,1770914,112
-37041,1771026,156
-37042,1771182,144
-37043,1771326,133
-37044,1771459,166
-37045,1771625,188
-37046,1771813,138
-37047,1771951,165
-37048,1772116,168
-37049,1772284,176
-37050,1772460,141
-37051,1772601,210
-37052,1772811,176
-37053,1772987,161
-37054,1773148,181
-37055,1773329,158
-37056,1773487,155
-37057,1773642,131
-37058,1773773,147
-37059,1773920,167
-37060,1774087,145
-37061,1774232,156
-37062,1774388,154
-37063,1774542,117
-37064,1774659,165
-37065,1774824,142
-37066,1774966,190
-37067,1775156,161
-37068,1775317,173
-37069,1775490,232
-37070,1775722,124
-37071,1775846,120
-37072,1775966,148
-37073,1776114,191
-37074,1776305,144
-37075,1776449,155
-37076,1776604,162
-37077,1776766,133
-37078,1776899,128
-37079,1777027,142
-37080,1777169,171
-37081,1777340,165
-37082,1777505,136
-37083,1777641,163
-37084,1777804,179
-37085,1777983,174
-37086,1778157,154
-37087,1778311,168
-37088,1778479,130
-37089,1778609,118
-37090,1778727,170
-37091,1778897,151
-37092,1779048,143
-37093,1779191,136
-37094,1779327,150
-37095,1779477,149
-37096,1779626,206
-37097,1779832,132
-37098,1779964,152
-37099,1780116,146
-37100,1780262,112
-37101,1780374,176
-37102,1780550,171
-37103,1780721,147
-37104,1780868,196
-37105,1781064,163
-37106,1781227,158
-37107,1781385,157
-37108,1781542,147
-37109,1781689,160
-37110,1781849,140
-37111,1781989,154
-37112,1782143,141
-37113,1782284,119
-37114,1782403,129
-37115,1782532,163
-37116,1782695,162
-37117,1782857,150
-37118,1783007,212
-37119,1783219,159
-37334,1783378,140
-40334,1783518,168
-40960,1783686,162
-40961,1783848,160
-40962,1784008,175
-40963,1784183,138
-40964,1784321,136
-40965,1784457,152
-40966,1784609,172
-40967,1784781,156
-40968,1784937,142
-40969,1785079,161
-40970,1785240,142
-40971,1785382,165
-40972,1785547,186
-40973,1785733,150
-40974,1785883,158
-40975,1786041,166
-40976,1786207,149
-40977,1786356,164
-40978,1786520,157
-40979,1786677,168
-40980,1786845,120
-40981,1786965,117
-40982,1787082,143
-40983,1787225,141
-40984,1787366,157
-40985,1787523,148
-40986,1787671,146
-40987,1787817,164
-40988,1787981,170
-40989,1788151,116
-40990,1788267,133
-40991,1788400,159
-40992,1788559,137
-40993,1788696,168
-40994,1788864,207
-40995,1789071,180
-40996,1789251,142
-40997,1789393,140
-40998,1789533,141
-40999,1789674,158
-41000,1789832,145
-41001,1789977,144
-41002,1790121,157
-41003,1790278,156
-41004,1790434,175
-41005,1790609,151
-41006,1790760,181
-41007,1790941,115
-41008,1791056,112
-41009,1791168,168
-41010,1791336,149
-41011,1791485,133
-41012,1791618,123
-41013,1791741,142
-41014,1791883,173
-41015,1792056,145
-41016,1792201,132
-41017,1792333,157
-41018,1792490,151
-41019,1792641,194
-41020,1792835,153
-41021,1792988,125
-41022,1793113,163
-41023,1793276,253
-41024,1793529,141
-41025,1793670,123
-41026,1793793,145
-41027,1793938,187
-41028,1794125,144
-41029,1794269,158
-41030,1794427,124
-41031,1794551,149
-41032,1794700,147
-41033,1794847,170
-41034,1795017,182
-41035,1795199,185
-41036,1795384,207
-41037,1795591,158
-41038,1795749,159
-41039,1795908,136
-41040,1796044,153
-41041,1796197,157
-41042,1796354,167
-41043,1796521,148
-41044,1796669,56
-41045,1796725,149
-41046,1796874,112
-41047,1796986,156
-41048,1797142,125
-41049,1797267,139
-41050,1797406,146
-41051,1797552,136
-41052,1797688,192
-41053,1797880,145
-41054,1798025,145
-41055,1798170,160
-41056,1798330,171
-41057,1798501,137
-41058,1798638,141
-41059,1798779,136
-41060,1798915,126
-41061,1799041,154
-41062,1799195,157
-41063,1799352,164
-41064,1799516,123
-41065,1799639,143
-41066,1799782,145
-41067,1799927,157
-41068,1800084,175
-41069,1800259,159
-41070,1800418,131
-41071,1800549,151
-41072,1800700,131
-41073,1800831,168
-41074,1800999,184
-41075,1801183,134
-41076,1801317,148
-41077,1801465,170
-41078,1801635,147
-41079,1801782,144
-41080,1801926,154
-41081,1802080,159
-41082,1802239,208
-41083,1802447,168
-41084,1802615,208
-41085,1802823,150
-41086,1802973,177
-41087,1803150,181
-41088,1803331,143
-41089,1803474,154
-41090,1803628,127
-41091,1803755,167
-41092,1803922,141
-41093,1804063,56
-41094,1804119,172
-41095,1804291,164
-41096,1804455,166
-41097,1804621,167
-41098,1804788,169
-41099,1804957,205
-41100,1805162,173
-41101,1805335,151
-41102,1805486,170
-41103,1805656,150
-41104,1805806,148
-41105,1805954,149
-41106,1806103,192
-41107,1806295,143
-41108,1806438,149
-41109,1806587,149
-41110,1806736,153
-41111,1806889,157
-41112,1807046,121
-41113,1807167,152
-41114,1807319,143
-41115,1807462,152
-41116,1807614,129
-41117,1807743,168
-41118,1807911,119
-41119,1808030,139
-41120,1808169,141
-41121,1808310,141
-41122,1808451,130
-41123,1808581,157
-41124,1808738,152
-41125,1808890,158
-41126,1809048,146
-41127,1809194,152
-41128,1809346,144
-41129,1809490,158
-41130,1809648,137
-41131,1809785,175
-41132,1809960,158
-41133,1810118,126
-41134,1810244,202
-41135,1810446,133
-41136,1810579,149
-41137,1810728,168
-41138,1810896,121
-41139,1811017,126
-41140,1811143,155
-41141,1811298,138
-41142,1811436,160
-41143,1811596,140
-41144,1811736,145
-41145,1811881,164
-41146,1812045,159
-41147,1812204,124
-41148,1812328,147
-41149,1812475,138
-41150,1812613,219
-41151,1812832,164
-41152,1812996,143
-41153,1813139,130
-41154,1813269,164
-41155,1813433,152
-41156,1813585,172
-41157,1813757,198
-41158,1813955,149
-41159,1814104,147
-41160,1814251,135
-41161,1814386,167
-41162,1814553,142
-41163,1814695,169
-41164,1814864,165
-41165,1815029,166
-41166,1815195,151
-41167,1815346,133
-41168,1815479,166
-41169,1815645,205
-41170,1815850,183
-41171,1816033,183
-41172,1816216,143
-41173,1816359,154
-41174,1816513,124
-41175,1816637,172
-41176,1816809,156
-41177,1816965,191
-41178,1817156,192
-41179,1817348,174
-41180,1817522,146
-41181,1817668,157
-41182,1817825,177
-41183,1818002,174
-41184,1818176,181
-41185,1818357,169
-41186,1818526,176
-41187,1818702,139
-41188,1818841,126
-41189,1818967,143
-41190,1819110,143
-41191,1819253,154
-41192,1819407,156
-41193,1819563,191
-41194,1819754,135
-41195,1819889,135
-41196,1820024,162
-41197,1820186,154
-41198,1820340,139
-41199,1820479,164
-41200,1820643,175
-41201,1820818,116
-41202,1820934,166
-41203,1821100,128
-41204,1821228,125
-41205,1821353,127
-41206,1821480,141
-41207,1821621,149
-41208,1821770,184
-41209,1821954,149
-41210,1822103,162
-41211,1822265,167
-41212,1822432,144
-41213,1822576,163
-41214,1822739,159
-41215,1822898,171
-43520,1823069,149
-43521,1823218,100
-43522,1823318,100
-43580,1823418,173
-45065,1823591,147
-45079,1823738,160
-45081,1823898,132
-45084,1824030,147
-45086,1824177,143
-45098,1824320,120
-45101,1824440,172
-45115,1824612,135
-45128,1824747,171
-45130,1824918,155
-45138,1825073,155
-45156,1825228,155
-45161,1825383,117
-45165,1825500,141
-45184,1825641,150
-45190,1825791,145
-45198,1825936,154
-45201,1826090,140
-45204,1826230,134
-45210,1826364,161
-45213,1826525,169
-45228,1826694,173
-45230,1826867,130
-45235,1826997,153
-45250,1827150,155
-45255,1827305,181
-45262,1827486,140
-45264,1827626,140
-45275,1827766,133
-45279,1827899,140
-45287,1828039,152
-45292,1828191,116
-45294,1828307,161
-45296,1828468,135
-45301,1828603,183
-47808,1828786,157
-47873,1828943,141
-48112,1829084,148
-49152,1829232,144
-49153,1829376,178
-49154,1829554,172
-49155,1829726,167
-49156,1829893,175
-49157,1830068,175
-49158,1830243,187
-49159,1830430,164
-49160,1830594,119
-49161,1830713,170
-49162,1830883,145
-49163,1831028,131
-49164,1831159,210
-49165,1831369,157
-49166,1831526,143
-49167,1831669,186
-49168,1831855,183
-49169,1832038,176
-49170,1832214,163
-49171,1832377,128
-49172,1832505,171
-49173,1832676,163
-49174,1832839,158
-49175,1832997,138
-49176,1833135,142
-49177,1833277,134
-49178,1833411,175
-49179,1833586,160
-49180,1833746,194
-49181,1833940,169
-49182,1834109,158
-49183,1834267,128
-49184,1834395,176
-49185,1834571,155
-49186,1834726,171
-49187,1834897,154
-49188,1835051,175
-49189,1835226,165
-49190,1835391,175
-49191,1835566,164
-49192,1835730,149
-49193,1835879,168
-49194,1836047,168
-49195,1836215,186
-49196,1836401,169
-49197,1836570,175
-49198,1836745,115
-49199,1836860,139
-49200,1836999,179
-49201,1837178,187
-49202,1837365,184
-49203,1837549,159
-49204,1837708,189
-49205,1837897,144
-49206,1838041,207
-49207,1838248,131
-49208,1838379,172
-49209,1838551,169
-49210,1838720,165
-49211,1838885,172
-49212,1839057,132
-49213,1839189,154
-49214,1839343,156
-49215,1839499,163
-49216,1839662,122
-49217,1839784,166
-49218,1839950,133
-49219,1840083,126
-49220,1840209,129
-49221,1840338,162
-49222,1840500,175
-49223,1840675,153
-49224,1840828,178
-49225,1841006,155
-49226,1841161,156
-49227,1841317,186
-49228,1841503,186
-49229,1841689,153
-49230,1841842,142
-49231,1841984,168
-49232,1842152,164
-49233,1842316,168
-49234,1842484,125
-49235,1842609,151
-49236,1842760,198
-49237,1842958,163
-49238,1843121,124
-49239,1843245,136
-49240,1843381,149
-49241,1843530,138
-49242,1843668,172
-49243,1843840,149
-49244,1843989,138
-49245,1844127,154
-49246,1844281,129
-49247,1844410,193
-49248,1844603,135
-49249,1844738,158
-49250,1844896,144
-49251,1845040,167
-49252,1845207,179
-49253,1845386,156
-49254,1845542,135
-49255,1845677,164
-49256,1845841,175
-49257,1846016,168
-49258,1846184,188
-49259,1846372,151
-49260,1846523,193
-49261,1846716,148
-49262,1846864,172
-49263,1847036,137
-49264,1847173,165
-49265,1847338,173
-49266,1847511,169
-49267,1847680,146
-49268,1847826,167
-49269,1847993,139
-49270,1848132,159
-49271,1848291,199
-49272,1848490,162
-49273,1848652,151
-49274,1848803,122
-49275,1848925,164
-49276,1849089,172
-49277,1849261,169
-49278,1849430,185
-49279,1849615,152
-49280,1849767,167
-49281,1849934,184
-49282,1850118,143
-49283,1850261,167
-49284,1850428,157
-49285,1850585,164
-49286,1850749,151
-49287,1850900,167
-49288,1851067,143
-49289,1851210,151
-49290,1851361,163
-49291,1851524,168
-49292,1851692,168
-49293,1851860,168
-49294,1852028,171
-49295,1852199,185
-49296,1852384,120
-49297,1852504,149
-49298,1852653,148
-49299,1852801,158
-49300,1852959,120
-49301,1853079,114
-49302,1853193,174
-49303,1853367,135
-49304,1853502,230
-49305,1853732,172
-49306,1853904,158
-49307,1854062,181
-49308,1854243,161
-49309,1854404,176
-49310,1854580,150
-49311,1854730,194
-49312,1854924,164
-49313,1855088,149
-49314,1855237,134
-49315,1855371,203
-49316,1855574,120
-49317,1855694,157
-49318,1855851,170
-49319,1856021,138
-49320,1856159,142
-49321,1856301,178
-49322,1856479,162
-49323,1856641,141
-49324,1856782,183
-49325,1856965,175
-49326,1857140,166
-49327,1857306,155
-49328,1857461,146
-49329,1857607,169
-49330,1857776,145
-49331,1857921,168
-49332,1858089,206
-49333,1858295,176
-49334,1858471,142
-49335,1858613,173
-49336,1858786,161
-49337,1858947,143
-49338,1859090,140
-49339,1859230,148
-49340,1859378,174
-49341,1859552,166
-49342,1859718,131
-49343,1859849,178
-49344,1860027,157
-49345,1860184,141
-49346,1860325,190
-49347,1860515,188
-49348,1860703,206
-49349,1860909,174
-49350,1861083,158
-49351,1861241,171
-49352,1861412,169
-49353,1861581,170
-49354,1861751,178
-49355,1861929,164
-49356,1862093,171
-49357,1862264,160
-49358,1862424,202
-49359,1862626,136
-49360,1862762,168
-49361,1862930,177
-49362,1863107,139
-49363,1863246,167
-49364,1863413,144
-49365,1863557,152
-49366,1863709,143
-49367,1863852,188
-49368,1864040,158
-49369,1864198,197
-49370,1864395,144
-49371,1864539,157
-49372,1864696,164
-49373,1864860,140
-49374,1865000,135
-49375,1865135,163
-49376,1865298,157
-49377,1865455,143
-49378,1865598,164
-49379,1865762,173
-49380,1865935,170
-49381,1866105,141
-49382,1866246,145
-49383,1866391,127
-49384,1866518,138
-49385,1866656,175
-49386,1866831,168
-49387,1866999,169
-49388,1867168,148
-49389,1867316,166
-49390,1867482,151
-49391,1867633,145
-49392,1867778,165
-49393,1867943,194
-49394,1868137,151
-49395,1868288,175
-49396,1868463,185
-49397,1868648,135
-49398,1868783,166
-49399,1868949,159
-49400,1869108,139
-49401,1869247,175
-49402,1869422,163
-49403,1869585,184
-49404,1869769,147
-49405,1869916,119
-49406,1870035,162
-49407,1870197,163
-52157,1870360,220
-53020,1870580,163
-53248,1870743,175
-53249,1870918,143
-53250,1871061,152
-53251,1871213,197
-53252,1871410,147
-53253,1871557,184
-53254,1871741,147
-53255,1871888,154
-53256,1872042,141
-53257,1872183,214
-53258,1872397,168
-53259,1872565,144
-53260,1872709,160
-53261,1872869,181
-53262,1873050,132
-53263,1873182,145
-53264,1873327,155
-53265,1873482,151
-53266,1873633,135
-53267,1873768,180
-53268,1873948,149
-53269,1874097,206
-53270,1874303,150
-53271,1874453,213
-53272,1874666,146
-53273,1874812,191
-53274,1875003,133
-53275,1875136,177
-53276,1875313,180
-53277,1875493,165
-53278,1875658,133
-53279,1875791,147
-53280,1875938,182
-53281,1876120,167
-53282,1876287,168
-53283,1876455,204
-53284,1876659,200
-53285,1876859,165
-53286,1877024,168
-53287,1877192,158
-53288,1877350,153
-53289,1877503,162
-53290,1877665,184
-53291,1877849,143
-53292,1877992,154
-53293,1878146,113
-53294,1878259,172
-53295,1878431,146
-53296,1878577,154
-53297,1878731,170
-53298,1878901,169
-53299,1879070,171
-53300,1879241,141
-53301,1879382,212
-53302,1879594,172
-53303,1879766,117
-53304,1879883,190
-53305,1880073,140
-53306,1880213,156
-53307,1880369,178
-53308,1880547,141
-53309,1880688,141
-53310,1880829,144
-53311,1880973,209
-53312,1881182,167
-53313,1881349,229
-53314,1881578,148
-53315,1881726,159
-53316,1881885,161
-53317,1882046,117
-53318,1882163,164
-53319,1882327,128
-53320,1882455,135
-53321,1882590,194
-53322,1882784,173
-53323,1882957,139
-53324,1883096,177
-53325,1883273,200
-53326,1883473,119
-53327,1883592,142
-53328,1883734,123
-53329,1883857,146
-53330,1884003,190
-53331,1884193,149
-53332,1884342,140
-53333,1884482,153
-53334,1884635,140
-53335,1884775,137
-53336,1884912,147
-53337,1885059,213
-53338,1885272,160
-53339,1885432,164
-53340,1885596,176
-53341,1885772,152
-53342,1885924,166
-53343,1886090,131
-53344,1886221,163
-53345,1886384,221
-53346,1886605,126
-53347,1886731,147
-53348,1886878,152
-53349,1887030,140
-53350,1887170,159
-53351,1887329,157
-53352,1887486,171
-53353,1887657,161
-53354,1887818,166
-53355,1887984,147
-53356,1888131,146
-53357,1888277,130
-53358,1888407,181
-53359,1888588,160
-53360,1888748,225
-53361,1888973,133
-53362,1889106,129
-53363,1889235,189
-53364,1889424,152
-53365,1889576,191
-53366,1889767,158
-53367,1889925,197
-53368,1890122,119
-53369,1890241,147
-53370,1890388,196
-53371,1890584,199
-53372,1890783,172
-53373,1890955,153
-53374,1891108,135
-53375,1891243,191
-53376,1891434,141
-53377,1891575,175
-53378,1891750,133
-53379,1891883,142
-53380,1892025,215
-53381,1892240,150
-53382,1892390,140
-53383,1892530,135
-53384,1892665,133
-53385,1892798,202
-53386,1893000,151
-53387,1893151,197
-53388,1893348,148
-53389,1893496,143
-53390,1893639,137
-53391,1893776,156
-53392,1893932,147
-53393,1894079,162
-53394,1894241,161
-53395,1894402,155
-53396,1894557,159
-53397,1894716,193
-53398,1894909,165
-53399,1895074,161
-53400,1895235,165
-53401,1895400,139
-53402,1895539,145
-53403,1895684,152
-53404,1895836,151
-53405,1895987,136
-53406,1896123,126
-53407,1896249,144
-53408,1896393,133
-53409,1896526,171
-53410,1896697,173
-53411,1896870,144
-53412,1897014,161
-53413,1897175,133
-53414,1897308,208
-53415,1897516,183
-53416,1897699,148
-53417,1897847,190
-53418,1898037,174
-53419,1898211,155
-53420,1898366,140
-53421,1898506,130
-53422,1898636,167
-53423,1898803,163
-53424,1898966,172
-53425,1899138,160
-53426,1899298,153
-53427,1899451,163
-53428,1899614,156
-53429,1899770,161
-53430,1899931,154
-53431,1900085,160
-53432,1900245,95
-53433,1900340,239
-53434,1900579,154
-53435,1900733,154
-53436,1900887,153
-53437,1901040,138
-53438,1901178,122
-53439,1901300,157
-53440,1901457,152
-53441,1901609,164
-53442,1901773,150
-53443,1901923,172
-53444,1902095,154
-53445,1902249,163
-53446,1902412,189
-53447,1902601,136
-53448,1902737,120
-53449,1902857,194
-53450,1903051,197
-53451,1903248,180
-53452,1903428,174
-53453,1903602,197
-53454,1903799,142
-53455,1903941,144
-53456,1904085,178
-53457,1904263,135
-53458,1904398,149
-53459,1904547,161
-53460,1904708,148
-53461,1904856,137
-53462,1904993,153
-53463,1905146,144
-53464,1905290,144
-53465,1905434,197
-53466,1905631,198
-53467,1905829,158
-53468,1905987,165
-53469,1906152,149
-53470,1906301,173
-53471,1906474,178
-53472,1906652,198
-53473,1906850,151
-53474,1907001,145
-53475,1907146,226
-53476,1907372,147
-53477,1907519,163
-53478,1907682,148
-53479,1907830,160
-53480,1907990,198
-53481,1908188,193
-53482,1908381,168
-53483,1908549,150
-53484,1908699,179
-53485,1908878,112
-53486,1908990,159
-53487,1909149,110
-53488,1909259,159
-53489,1909418,167
-53490,1909585,147
-53491,1909732,139
-53492,1909871,161
-53493,1910032,144
-53494,1910176,133
-53495,1910309,173
-53496,1910482,191
-53497,1910673,210
-53498,1910883,211
-53499,1911094,166
-53500,1911260,151
-53501,1911411,147
-53502,1911558,166
-53503,1911724,147
-56576,1911871,148
-56577,1912019,148
-56578,1912167,148
-56579,1912315,148
-56580,1912463,148
-56581,1912611,148
-56582,1912759,148
-56583,1912907,148
-56584,1913055,148
-56585,1913203,148
-56586,1913351,148
-56587,1913499,148
-56588,1913647,148
-56589,1913795,148
-56590,1913943,148
-56591,1914091,148
-57344,1914239,186
-57345,1914425,167
-57346,1914592,169
-57347,1914761,213
-57348,1914974,138
-57349,1915112,150
-57350,1915262,203
-57351,1915465,160
-57352,1915625,151
-57353,1915776,169
-57354,1915945,125
-57355,1916070,159
-57356,1916229,128
-57357,1916357,137
-57358,1916494,159
-57359,1916653,183
-57360,1916836,156
-57361,1916992,139
-57362,1917131,177
-57363,1917308,201
-57364,1917509,150
-57365,1917659,150
-57366,1917809,157
-57367,1917966,121
-57368,1918087,154
-57369,1918241,151
-57370,1918392,168
-57371,1918560,158
-57372,1918718,150
-57373,1918868,144
-57374,1919012,150
-57375,1919162,161
-57376,1919323,115
-57377,1919438,138
-57378,1919576,154
-57379,1919730,98
-57380,1919828,139
-57381,1919967,159
-57382,1920126,153
-57383,1920279,124
-57384,1920403,142
-57385,1920545,148
-57386,1920693,145
-57387,1920838,140
-57388,1920978,129
-57389,1921107,153
-57390,1921260,155
-57391,1921415,176
-57392,1921591,169
-57393,1921760,172
-57394,1921932,172
-57395,1922104,131
-57396,1922235,150
-57397,1922385,145
-57398,1922530,168
-57399,1922698,133
-57400,1922831,155
-57401,1922986,136
-57402,1923122,164
-57403,1923286,159
-57404,1923445,123
-57405,1923568,160
-57406,1923728,159
-57407,1923887,146
-57408,1924033,161
-57409,1924194,111
-57410,1924305,145
-57411,1924450,120
-57412,1924570,143
-57413,1924713,138
-57414,1924851,134
-57415,1924985,157
-57416,1925142,147
-57417,1925289,143
-57418,1925432,175
-57419,1925607,180
-57420,1925787,214
-57421,1926001,160
-57422,1926161,148
-57423,1926309,150
-57424,1926459,180
-57425,1926639,138
-57426,1926777,160
-57427,1926937,143
-57428,1927080,139
-57429,1927219,182
-57430,1927401,150
-57431,1927551,204
-57432,1927755,144
-57433,1927899,156
-57434,1928055,164
-57435,1928219,161
-57436,1928380,190
-57437,1928570,144
-57438,1928714,194
-57439,1928908,145
-57440,1929053,122
-57441,1929175,157
-57442,1929332,154
-57443,1929486,189
-57444,1929675,144
-57445,1929819,169
-57446,1929988,156
-57447,1930144,159
-57448,1930303,148
-57449,1930451,124
-57450,1930575,112
-57451,1930687,147
-57452,1930834,204
-57453,1931038,147
-57454,1931185,132
-57455,1931317,133
-57456,1931450,140
-57457,1931590,158
-57458,1931748,132
-57459,1931880,173
-57460,1932053,162
-57461,1932215,145
-57462,1932360,160
-57463,1932520,132
-57464,1932652,144
-57465,1932796,105
-57466,1932901,120
-57467,1933021,123
-57468,1933144,150
-57469,1933294,126
-57470,1933420,151
-57471,1933571,135
-57472,1933706,166
-57473,1933872,145
-57474,1934017,107
-57475,1934124,162
-57476,1934286,141
-57477,1934427,156
-57478,1934583,155
-57479,1934738,193
-57480,1934931,144
-57481,1935075,152
-57482,1935227,167
-57483,1935394,137
-57484,1935531,160
-57485,1935691,148
-57486,1935839,122
-57487,1935961,150
-57488,1936111,161
-57489,1936272,162
-57490,1936434,142
-57491,1936576,139
-57492,1936715,105
-57493,1936820,199
-57494,1937019,151
-57495,1937170,157
-57496,1937327,172
-57497,1937499,118
-57498,1937617,146
-57499,1937763,161
-57500,1937924,139
-57501,1938063,139
-57502,1938202,148
-57503,1938350,122
-57504,1938472,129
-57505,1938601,177
-57506,1938778,136
-57507,1938914,150
-57508,1939064,124
-57509,1939188,171
-57510,1939359,151
-57511,1939510,180
-57512,1939690,122
-57513,1939812,152
-57514,1939964,153
-57515,1940117,116
-57516,1940233,130
-57517,1940363,147
-57518,1940510,146
-57519,1940656,214
-57520,1940870,150
-57521,1941020,193
-57522,1941213,162
-57523,1941375,151
-57524,1941526,144
-57525,1941670,168
-57526,1941838,149
-57527,1941987,151
-57528,1942138,134
-57529,1942272,140
-57530,1942412,160
-57531,1942572,138
-57532,1942710,169
-57533,1942879,160
-57534,1943039,157
-57535,1943196,200
-57536,1943396,168
-57537,1943564,168
-57538,1943732,115
-57539,1943847,195
-57540,1944042,156
-57541,1944198,165
-57542,1944363,137
-57543,1944500,127
-57544,1944627,173
-57545,1944800,167
-57546,1944967,147
-57547,1945114,122
-57548,1945236,187
-57549,1945423,145
-57550,1945568,117
-57551,1945685,191
-57552,1945876,136
-57553,1946012,158
-57554,1946170,173
-57555,1946343,131
-57556,1946474,140
-57557,1946614,143
-57558,1946757,207
-57559,1946964,169
-57560,1947133,171
-57561,1947304,128
-57562,1947432,161
-57563,1947593,181
-57564,1947774,139
-57565,1947913,169
-57566,1948082,108
-57567,1948190,120
-57568,1948310,141
-57569,1948451,151
-57570,1948602,134
-57571,1948736,138
-57572,1948874,186
-57573,1949060,170
-57574,1949230,136
-57575,1949366,153
-57576,1949519,160
-57577,1949679,161
-57578,1949840,164
-57579,1950004,162
-57580,1950166,139
-57581,1950305,138
-57582,1950443,108
-57583,1950551,117
-57584,1950668,174
-57585,1950842,140
-57586,1950982,161
-57587,1951143,167
-57588,1951310,141
-57589,1951451,107
-57590,1951558,153
-57591,1951711,150
-57592,1951861,128
-57593,1951989,150
-57594,1952139,163
-57595,1952302,132
-57596,1952434,200
-57597,1952634,208
-57598,1952842,150
-57599,1952992,174
-59091,1953166,160
-132865,1953326,165
-138364,1953491,175
-155782,1953666,184
-155788,1953850,147
-159745,1953997,165
-159920,1954162,156
-159923,1954318,155
-171406,1954473,163
-174652,1954636,175
-178945,1954811,141
-180364,1954952,161
-184092,1955113,163
-190163,1955276,202
-264928,1955478,168
-319684,1955646,142
-524289,1955788,161
-524290,1955949,164
-524291,1956113,160
-524292,1956273,154
-524293,1956427,134
-524294,1956561,175
-524295,1956736,151
-524296,1956887,162
-524297,1957049,170
-524298,1957219,166
-524299,1957385,143
-524300,1957528,148
-524301,1957676,191
-524302,1957867,134
-524303,1958001,162
-524305,1958163,181
-524306,1958344,165
-524307,1958509,58
-524308,1958567,124
-524309,1958691,185
-524310,1958876,172
-524311,1959048,159
-524312,1959207,171
-524313,1959378,164
-524314,1959542,160
-524315,1959702,135
-524316,1959837,205
-524317,1960042,160
-524318,1960202,148
-524319,1960350,178
-524320,1960528,152
-524321,1960680,158
-524322,1960838,139
-524323,1960977,170
-524324,1961147,180
-524325,1961327,139
-524326,1961466,130
-524327,1961596,146
-524328,1961742,151
-524329,1961893,145
-524330,1962038,157
-524331,1962195,183
-524332,1962378,142
-524333,1962520,134
-524334,1962654,161
-524335,1962815,146
-524336,1962961,161
-524336,1963122,106
-524336,1963228,154
-524337,1963382,147
-524338,1963529,152
-524339,1963681,160
-524340,1963841,148
-524341,1963989,168
-524342,1964157,161
-524343,1964318,179
-524344,1964497,140
-524345,1964637,173
-524346,1964810,144
-524347,1964954,174
-524348,1965128,190
-524349,1965318,148
-524350,1965466,160
-524351,1965626,98
-524352,1965724,202
-524353,1965926,174
-524354,1966100,96
-524355,1966196,144
-524356,1966340,141
-524357,1966481,155
-524358,1966636,146
-524359,1966782,196
-524360,1966978,169
-524361,1967147,132
-524362,1967279,143
-524363,1967422,177
-524364,1967599,154
-524365,1967753,143
-524366,1967896,174
-524367,1968070,136
-524368,1968206,142
-524369,1968348,127
-524370,1968475,126
-524371,1968601,171
-524373,1968772,148
-524374,1968920,166
-524375,1969086,165
-524376,1969251,141
-524377,1969392,119
-524378,1969511,161
-524379,1969672,150
-524380,1969822,145
-524381,1969967,160
-524382,1970127,160
-524383,1970287,154
-524384,1970441,162
-524385,1970603,157
-524386,1970760,157
-524387,1970917,145
-524388,1971062,156
-524389,1971218,142
-524390,1971360,144
-524391,1971504,132
-524392,1971636,147
-524393,1971783,190
-524394,1971973,158
-524395,1972131,152
-524396,1972283,154
-524397,1972437,156
-524398,1972593,123
-524399,1972716,162
-524400,1972878,174
-524401,1973052,143
-524402,1973195,202
-524403,1973397,124
-524404,1973521,171
-524405,1973692,153
-524406,1973845,157
-524407,1974002,190
-524408,1974192,141
-524409,1974333,136
-524410,1974469,118
-524411,1974587,160
-524412,1974747,160
-524414,1974907,189
-524415,1975096,182
-524416,1975278,151
-524417,1975429,141
-524418,1975570,149
-524419,1975719,158
-524420,1975877,164
-524421,1976041,114
-524422,1976155,169
-524423,1976324,118
-524424,1976442,179
-524425,1976621,137
-524426,1976758,172
-524427,1976930,161
-524428,1977091,161
-524429,1977252,134
-524430,1977386,141
-524431,1977527,176
-524432,1977703,157
-529475,1977860,137
-572364,1977997,158
-1048576,1978155,56
-1048666,1978211,161
-1048808,1978372,159
-1114282,1978531,56
-8388624,1978587,158
-10512896,1978745,145
-11141120,1978890,183
-11141121,1979073,183
-11141122,1979256,183
-11141123,1979439,183
-11141124,1979622,183
-11329096,1979805,56
+330,51994,160
+331,52154,155
+332,52309,152
+333,52461,208
+334,52669,158
+335,52827,133
+336,52960,170
+337,53130,166
+338,53296,163
+339,53459,201
+340,53660,154
+341,53814,206
+342,54020,166
+343,54186,176
+344,54362,163
+345,54525,177
+346,54702,211
+347,54913,138
+348,55051,138
+349,55189,152
+350,55341,191
+351,55532,131
+352,55663,144
+353,55807,171
+354,55978,161
+355,56139,155
+356,56294,155
+357,56449,148
+358,56597,118
+359,56715,154
+360,56869,161
+361,57030,180
+362,57210,129
+363,57339,131
+364,57470,119
+365,57589,138
+366,57727,154
+367,57881,140
+368,58021,178
+369,58199,168
+370,58367,164
+371,58531,116
+372,58647,162
+373,58809,168
+374,58977,167
+375,59144,123
+376,59267,156
+377,59423,197
+378,59620,201
+379,59821,176
+380,59997,123
+381,60120,132
+382,60252,174
+383,60426,168
+384,60594,186
+385,60780,145
+386,60925,144
+387,61069,158
+388,61227,145
+389,61372,138
+390,61510,126
+391,61636,126
+392,61762,144
+393,61906,170
+394,62076,144
+395,62220,169
+396,62389,128
+397,62517,154
+398,62671,146
+399,62817,127
+400,62944,120
+401,63064,141
+402,63205,159
+403,63364,191
+404,63555,179
+405,63734,189
+406,63923,155
+407,64078,155
+408,64233,168
+409,64401,177
+410,64578,136
+411,64714,169
+412,64883,150
+413,65033,160
+414,65193,146
+415,65339,139
+416,65478,163
+417,65641,136
+418,65777,161
+419,65938,168
+420,66106,161
+421,66267,149
+422,66416,178
+423,66594,195
+424,66789,211
+425,67000,126
+426,67126,201
+427,67327,165
+428,67492,145
+429,67637,227
+430,67864,148
+431,68012,164
+432,68176,220
+433,68396,144
+434,68540,182
+435,68722,176
+436,68898,148
+437,69046,153
+438,69199,190
+439,69389,181
+440,69570,153
+441,69723,153
+442,69876,167
+443,70043,132
+444,70175,155
+445,70330,192
+446,70522,181
+447,70703,160
+448,70863,126
+449,70989,156
+450,71145,147
+451,71292,130
+452,71422,181
+453,71603,168
+454,71771,156
+455,71927,145
+456,72072,142
+456,72214,72
+457,72286,147
+458,72433,170
+459,72603,107
+460,72710,230
+461,72940,113
+462,73053,194
+463,73247,197
+464,73444,135
+465,73579,154
+466,73733,214
+467,73947,174
+468,74121,149
+469,74270,232
+470,74502,121
+471,74623,146
+472,74769,157
+473,74926,140
+474,75066,208
+475,75274,147
+476,75421,129
+477,75550,142
+478,75692,143
+479,75835,198
+480,76033,151
+481,76184,206
+482,76390,167
+483,76557,126
+484,76683,132
+485,76815,176
+486,76991,166
+487,77157,166
+488,77323,151
+489,77474,181
+490,77655,132
+491,77787,182
+492,77969,156
+493,78125,149
+494,78274,181
+495,78455,216
+496,78671,149
+497,78820,171
+498,78991,162
+499,79153,126
+500,79279,142
+501,79421,131
+502,79552,224
+503,79776,175
+504,79951,187
+505,80138,189
+506,80327,116
+507,80443,184
+508,80627,170
+509,80797,160
+510,80957,196
+511,81153,161
+512,81314,196
+513,81510,144
+514,81654,179
+515,81833,174
+516,82007,184
+517,82191,153
+518,82344,131
+519,82475,176
+520,82651,161
+521,82812,231
+522,83043,137
+523,83180,147
+524,83327,120
+525,83447,127
+526,83574,154
+527,83728,121
+528,83849,181
+529,84030,235
+530,84265,122
+531,84387,143
+532,84530,167
+533,84697,173
+534,84870,147
+535,85017,147
+536,85164,217
+537,85381,152
+538,85533,135
+539,85668,142
+540,85810,154
+541,85964,204
+542,86168,134
+543,86302,159
+544,86461,155
+545,86616,195
+546,86811,137
+547,86948,162
+548,87110,118
+549,87228,157
+550,87385,139
+551,87524,175
+552,87699,158
+553,87857,171
+554,88028,179
+555,88207,148
+556,88355,160
+557,88515,125
+558,88640,127
+559,88767,126
+560,88893,143
+561,89036,153
+562,89189,189
+563,89378,178
+564,89556,156
+565,89712,167
+566,89879,126
+567,90005,167
+568,90172,191
+569,90363,123
+570,90486,161
+571,90647,141
+572,90788,189
+573,90977,146
+574,91123,162
+575,91285,194
+576,91479,171
+577,91650,122
+578,91772,165
+579,91937,166
+580,92103,208
+581,92311,182
+582,92493,203
+583,92696,228
+584,92924,147
+585,93071,198
+586,93269,145
+587,93414,145
+588,93559,138
+589,93697,179
+590,93876,149
+591,94025,149
+592,94174,149
+593,94323,161
+594,94484,150
+595,94634,133
+596,94767,124
+597,94891,186
+598,95077,150
+599,95227,145
+600,95372,182
+601,95554,227
+602,95781,143
+603,95924,190
+604,96114,190
+605,96304,141
+606,96445,190
+607,96635,158
+608,96793,161
+609,96954,113
+610,97067,217
+611,97284,162
+612,97446,136
+613,97582,189
+614,97771,156
+615,97927,140
+616,98067,196
+617,98263,174
+618,98437,205
+619,98642,209
+620,98851,155
+621,99006,150
+622,99156,164
+623,99320,211
+624,99531,178
+625,99709,151
+626,99860,196
+627,100056,143
+628,100199,186
+629,100385,170
+630,100555,181
+631,100736,162
+632,100898,211
+633,101109,161
+634,101270,213
+635,101483,142
+636,101625,141
+637,101766,145
+638,101911,145
+639,102056,179
+640,102235,141
+641,102376,147
+642,102523,137
+643,102660,145
+644,102805,125
+645,102930,155
+646,103085,138
+647,103223,123
+648,103346,166
+649,103512,139
+650,103651,213
+651,103864,134
+652,103998,167
+653,104165,205
+654,104370,154
+655,104524,156
+656,104680,169
+657,104849,174
+658,105023,155
+659,105178,153
+660,105331,168
+661,105499,192
+662,105691,204
+663,105895,146
+664,106041,166
+665,106207,128
+666,106335,132
+667,106467,158
+668,106625,114
+669,106739,165
+670,106904,204
+671,107108,173
+672,107281,134
+673,107415,135
+674,107550,134
+675,107684,136
+676,107820,203
+677,108023,153
+678,108176,192
+679,108368,138
+680,108506,183
+681,108689,152
+682,108841,175
+683,109016,183
+684,109199,126
+685,109325,140
+686,109465,179
+687,109644,151
+688,109795,191
+689,109986,165
+690,110151,139
+691,110290,160
+692,110450,120
+693,110570,128
+694,110698,205
+695,110903,189
+696,111092,142
+697,111234,145
+698,111379,145
+699,111524,162
+700,111686,153
+701,111839,182
+702,112021,170
+703,112191,143
+704,112334,226
+705,112560,181
+706,112741,196
+707,112937,124
+708,113061,144
+709,113205,163
+710,113368,189
+711,113557,172
+712,113729,232
+713,113961,149
+714,114110,132
+715,114242,172
+716,114414,122
+717,114536,164
+718,114700,146
+719,114846,180
+720,115026,152
+721,115178,159
+722,115337,134
+723,115471,149
+724,115620,161
+725,115781,115
+726,115896,124
+727,116020,142
+728,116162,183
+729,116345,139
+730,116484,165
+731,116649,142
+732,116791,179
+733,116970,210
+734,117180,157
+735,117337,163
+736,117500,115
+737,117615,168
+738,117783,157
+739,117940,165
+740,118105,184
+741,118289,157
+742,118446,169
+743,118615,136
+744,118751,117
+745,118868,160
+746,119028,138
+747,119166,167
+748,119333,170
+749,119503,166
+750,119669,132
+751,119801,215
+752,120016,208
+753,120224,169
+754,120393,149
+755,120542,181
+756,120723,132
+757,120855,173
+758,121028,141
+759,121169,131
+760,121300,157
+761,121457,175
+762,121632,136
+763,121768,166
+764,121934,145
+765,122079,145
+766,122224,147
+767,122371,180
+768,122551,143
+769,122694,182
+770,122876,160
+771,123036,197
+772,123233,172
+773,123405,156
+774,123561,185
+775,123746,155
+776,123901,154
+777,124055,159
+778,124214,149
+779,124363,189
+780,124552,183
+781,124735,193
+782,124928,230
+783,125158,214
+784,125372,187
+785,125559,182
+786,125741,137
+787,125878,138
+788,126016,204
+789,126220,146
+790,126366,170
+791,126536,162
+792,126698,146
+793,126844,116
+794,126960,202
+795,127162,180
+796,127342,155
+797,127497,198
+798,127695,153
+799,127848,131
+800,127979,142
+801,128121,182
+802,128303,159
+803,128462,171
+804,128633,172
+805,128805,167
+806,128972,177
+807,129149,118
+808,129267,141
+809,129408,172
+810,129580,209
+811,129789,158
+812,129947,146
+813,130093,166
+814,130259,207
+815,130466,195
+816,130661,151
+817,130812,145
+818,130957,145
+819,131102,155
+820,131257,144
+821,131401,160
+822,131561,134
+823,131695,167
+824,131862,137
+825,131999,160
+826,132159,159
+827,132318,175
+828,132493,145
+829,132638,150
+830,132788,198
+831,132986,138
+832,133124,174
+833,133298,135
+834,133433,152
+835,133585,145
+836,133730,132
+837,133862,205
+838,134067,160
+839,134227,161
+840,134388,161
+841,134549,159
+842,134708,138
+843,134846,150
+844,134996,217
+845,135213,152
+846,135365,181
+847,135546,159
+848,135705,116
+849,135821,135
+850,135956,143
+851,136099,145
+852,136244,212
+853,136456,163
+854,136619,169
+855,136788,151
+856,136939,184
+857,137123,146
+858,137269,136
+859,137405,157
+860,137562,185
+861,137747,184
+862,137931,198
+863,138129,196
+864,138325,212
+865,138537,147
+866,138684,198
+867,138882,173
+868,139055,163
+869,139218,211
+870,139429,161
+871,139590,148
+872,139738,189
+873,139927,169
+874,140096,118
+875,140214,145
+876,140359,145
+877,140504,172
+878,140676,168
+879,140844,136
+880,140980,136
+881,141116,190
+882,141306,181
+883,141487,149
+884,141636,142
+885,141778,137
+886,141915,154
+887,142069,140
+888,142209,167
+889,142376,218
+890,142594,155
+891,142749,171
+892,142920,143
+893,143063,147
+894,143210,191
+895,143401,173
+896,143574,176
+897,143750,161
+898,143911,159
+899,144070,165
+900,144235,139
+901,144374,163
+902,144537,180
+903,144717,149
+904,144866,209
+905,145075,127
+906,145202,146
+907,145348,177
+908,145525,140
+909,145665,177
+910,145842,144
+911,145986,150
+912,146136,189
+913,146325,217
+914,146542,220
+915,146762,151
+916,146913,128
+917,147041,148
+918,147189,188
+919,147377,142
+920,147519,123
+921,147642,237
+922,147879,131
+923,148010,156
+924,148166,175
+925,148341,155
+926,148496,198
+927,148694,145
+928,148839,145
+929,148984,215
+930,149199,157
+931,149356,114
+932,149470,153
+933,149623,168
+934,149791,163
+935,149954,187
+936,150141,210
+937,150351,140
+938,150491,114
+939,150605,159
+940,150764,169
+941,150933,128
+942,151061,201
+943,151262,153
+944,151415,178
+945,151593,131
+946,151724,114
+947,151838,218
+948,152056,199
+949,152255,210
+950,152465,150
+951,152615,147
+952,152762,164
+953,152926,168
+954,153094,152
+955,153246,185
+956,153431,121
+957,153552,184
+958,153736,142
+959,153878,209
+960,154087,164
+961,154251,161
+962,154412,145
+963,154557,147
+964,154704,145
+965,154849,132
+966,154981,149
+967,155130,143
+968,155273,166
+969,155439,171
+970,155610,137
+971,155747,194
+972,155941,170
+973,156111,143
+974,156254,222
+975,156476,193
+976,156669,167
+977,156836,169
+978,157005,153
+979,157158,160
+980,157318,156
+981,157474,186
+982,157660,141
+983,157801,168
+984,157969,158
+985,158127,133
+986,158260,195
+987,158455,175
+988,158630,142
+989,158772,123
+990,158895,128
+991,159023,136
+992,159159,170
+993,159329,187
+994,159516,158
+995,159674,145
+996,159819,145
+997,159964,138
+998,160102,136
+999,160238,192
+1000,160430,209
+1001,160639,151
+1002,160790,213
+1003,161003,148
+1004,161151,155
+1005,161306,174
+1006,161480,140
+1007,161620,126
+1008,161746,197
+1009,161943,174
+1010,162117,149
+1011,162266,154
+1012,162420,130
+1013,162550,121
+1014,162671,155
+1015,162826,150
+1016,162976,181
+1017,163157,169
+1018,163326,138
+1019,163464,138
+1020,163602,138
+1021,163740,145
+1022,163885,145
+1023,164030,144
+1024,164174,173
+1025,164347,178
+1026,164525,167
+1027,164692,142
+1028,164834,180
+1029,165014,180
+1030,165194,138
+1031,165332,179
+1032,165511,150
+1033,165661,151
+1034,165812,148
+1035,165960,170
+1036,166130,165
+1037,166295,160
+1038,166455,106
+1039,166561,214
+1040,166775,153
+1041,166928,152
+1042,167080,151
+1043,167231,147
+1044,167378,190
+1045,167568,171
+1046,167739,186
+1047,167925,123
+1048,168048,152
+1049,168200,177
+1050,168377,176
+1051,168553,150
+1052,168703,151
+1053,168854,138
+1054,168992,184
+1055,169176,173
+1056,169349,156
+1057,169505,155
+1058,169660,140
+1059,169800,159
+1060,169959,124
+1061,170083,193
+1062,170276,158
+1063,170434,145
+1064,170579,145
+1065,170724,205
+1066,170929,154
+1067,171083,174
+1068,171257,166
+1069,171423,200
+1070,171623,185
+1071,171808,218
+1072,172026,125
+1073,172151,170
+1074,172321,152
+1075,172473,137
+1076,172610,162
+1077,172772,153
+1078,172925,185
+1079,173110,215
+1080,173325,159
+1081,173484,178
+1082,173662,207
+1083,173869,161
+1084,174030,207
+1085,174237,127
+1086,174364,126
+1087,174490,183
+1088,174673,152
+1089,174825,160
+1090,174985,107
+1091,175092,191
+1092,175283,181
+1093,175464,169
+1094,175633,189
+1095,175822,195
+1096,176017,143
+1097,176160,145
+1098,176305,150
+1099,176455,118
+1100,176573,156
+1101,176729,145
+1102,176874,145
+1103,177019,176
+1104,177195,144
+1105,177339,129
+1106,177468,160
+1107,177628,133
+1108,177761,157
+1109,177918,135
+1110,178053,176
+1111,178229,227
+1112,178456,191
+1113,178647,143
+1114,178790,152
+1115,178942,197
+1116,179139,140
+1117,179279,126
+1118,179405,182
+1119,179587,206
+1120,179793,199
+1121,179992,217
+1122,180209,243
+1123,180452,157
+1124,180609,150
+1125,180759,167
+1126,180926,182
+1127,181108,211
+1128,181319,129
+1129,181448,165
+1130,181613,149
+1131,181762,149
+1132,181911,207
+1133,182118,145
+1134,182263,145
+1135,182408,199
+1136,182607,139
+1137,182746,122
+1138,182868,165
+1139,183033,143
+1140,183176,122
+1141,183298,158
+1142,183456,158
+1143,183614,151
+1144,183765,227
+1145,183992,162
+1146,184154,146
+1147,184300,166
+1148,184466,138
+1149,184604,110
+1150,184714,129
+1151,184843,158
+1152,185001,168
+1153,185169,172
+1154,185341,167
+1155,185508,204
+1156,185712,128
+1157,185840,130
+1158,185970,160
+1159,186130,178
+1160,186308,141
+1161,186449,143
+1162,186592,156
+1163,186748,171
+1164,186919,141
+1165,187060,165
+1166,187225,146
+1167,187371,167
+1168,187538,129
+1169,187667,166
+1170,187833,203
+1171,188036,190
+1172,188226,163
+1173,188389,172
+1174,188561,138
+1175,188699,171
+1176,188870,136
+1177,189006,153
+1178,189159,145
+1179,189304,145
+1180,189449,173
+1181,189622,160
+1182,189782,180
+1183,189962,165
+1184,190127,157
+1185,190284,144
+1186,190428,154
+1187,190582,162
+1188,190744,136
+1189,190880,154
+1190,191034,138
+1191,191172,216
+1192,191388,165
+1193,191553,164
+1194,191717,160
+1195,191877,168
+1196,192045,149
+1197,192194,135
+1198,192329,154
+1199,192483,152
+1200,192635,183
+1201,192818,181
+1202,192999,138
+1203,193137,134
+1204,193271,125
+1205,193396,146
+1206,193542,155
+1207,193697,132
+1208,193829,161
+1209,193990,167
+1210,194157,166
+1211,194323,147
+1212,194470,200
+1213,194670,132
+1214,194802,147
+1215,194949,134
+1216,195083,145
+1217,195228,145
+1218,195373,159
+1219,195532,154
+1220,195686,172
+1221,195858,144
+1222,196002,186
+1223,196188,114
+1224,196302,150
+1225,196452,184
+1226,196636,175
+1227,196811,164
+1228,196975,152
+1229,197127,171
+1230,197298,129
+1231,197427,139
+1232,197566,150
+1233,197716,170
+1234,197886,137
+1235,198023,155
+1236,198178,198
+1237,198376,236
+1238,198612,210
+1239,198822,198
+1240,199020,171
+1241,199191,202
+1242,199393,176
+1243,199569,205
+1244,199774,160
+1245,199934,145
+1246,200079,145
+1247,200224,175
+1248,200399,139
+1249,200538,189
+1250,200727,130
+1251,200857,183
+1252,201040,166
+1253,201206,195
+1254,201401,187
+1255,201588,175
+1256,201763,142
+1257,201905,156
+1258,202061,166
+1259,202227,161
+1260,202388,133
+1261,202521,220
+1262,202741,164
+1263,202905,186
+1264,203091,179
+1265,203270,129
+1266,203399,138
+1267,203537,147
+1268,203684,177
+1269,203861,156
+1270,204017,119
+1271,204136,164
+1272,204300,201
+1273,204501,156
+1274,204657,161
+1275,204818,139
+1276,204957,160
+1277,205117,183
+1278,205300,147
+1279,205447,171
+1280,205618,145
+1281,205763,145
+1282,205908,141
+1283,206049,105
+1284,206154,232
+1285,206386,193
+1286,206579,134
+1287,206713,170
+1288,206883,139
+1289,207022,150
+1290,207172,110
+1291,207282,145
+1292,207427,158
+1293,207585,181
+1294,207766,146
+1295,207912,146
+1296,208058,196
+1297,208254,196
+1298,208450,154
+1299,208604,190
+1300,208794,171
+1301,208965,189
+1302,209154,156
+1303,209310,173
+1304,209483,151
+1305,209634,191
+1306,209825,155
+1307,209980,206
+1308,210186,189
+1309,210375,130
+1310,210505,181
+1311,210686,169
+1312,210855,143
+1313,210998,136
+1314,211134,161
+1315,211295,119
+1316,211414,176
+1317,211590,200
+1318,211790,112
+1319,211902,161
+1320,212063,136
+1321,212199,248
+1322,212447,158
+1323,212605,142
+1324,212747,194
+1325,212941,175
+1326,213116,139
+1327,213255,159
+1328,213414,148
+1329,213562,145
+1330,213707,145
+1331,213852,179
+1332,214031,164
+1333,214195,168
+1334,214363,185
+1335,214548,200
+1336,214748,135
+1337,214883,147
+1338,215030,170
+1339,215200,201
+1340,215401,130
+1341,215531,133
+1342,215664,133
+1343,215797,133
+1344,215930,143
+1345,216073,165
+1346,216238,130
+1347,216368,131
+1348,216499,179
+1349,216678,151
+1350,216829,162
+1351,216991,143
+1352,217134,142
+1353,217276,168
+1354,217444,163
+1355,217607,139
+1356,217746,141
+1357,217887,188
+1358,218075,130
+1359,218205,56
+1360,218261,179
+1361,218440,161
+1362,218601,147
+1363,218748,136
+1364,218884,149
+1365,219033,177
+1366,219210,135
+1367,219345,167
+1368,219512,141
+1369,219653,139
+1370,219792,164
+1371,219956,158
+1372,220114,145
+1373,220259,142
+1374,220401,145
+1375,220546,145
+1376,220691,179
+1377,220870,157
+1378,221027,167
+1379,221194,134
+1380,221328,181
+1381,221509,222
+1382,221731,198
+1383,221929,153
+1384,222082,145
+1385,222227,133
+1386,222360,163
+1387,222523,201
+1388,222724,158
+1389,222882,142
+1390,223024,206
+1391,223230,181
+1392,223411,144
+1393,223555,171
+1394,223726,171
+1395,223897,145
+1396,224042,145
+1397,224187,137
+1398,224324,162
+1399,224486,182
+1400,224668,56
+1401,224724,182
+1402,224906,160
+1403,225066,202
+1404,225268,119
+1405,225387,170
+1406,225557,164
+1407,225721,144
+1408,225865,127
+1409,225992,176
+1410,226168,166
+1411,226334,163
+1412,226497,158
+1413,226655,156
+1414,226811,148
+1415,226959,170
+1416,227129,152
+1417,227281,149
+1418,227430,162
+1419,227592,152
+1420,227744,168
+1421,227912,145
+1422,228057,184
+1423,228241,169
+1424,228410,132
+1425,228542,173
+1426,228715,143
+1427,228858,161
+1428,229019,140
+1429,229159,144
+1430,229303,170
+1431,229473,161
+1432,229634,120
+1433,229754,186
+1434,229940,147
+1435,230087,147
+1436,230234,151
+1437,230385,174
+1438,230559,173
+1439,230732,138
+1440,230870,123
+1441,230993,164
+1442,231157,148
+1443,231305,122
+1444,231427,131
+1445,231558,149
+1446,231707,136
+1447,231843,149
+1448,231992,146
+1449,232138,163
+1450,232301,181
+1451,232482,156
+1452,232638,150
+1453,232788,165
+1454,232953,144
+1455,233097,143
+1456,233240,191
+1457,233431,127
+1458,233558,159
+1459,233717,174
+1460,233891,192
+1461,234083,178
+1462,234261,149
+1463,234410,177
+1464,234587,191
+1465,234778,134
+1466,234912,153
+1467,235065,114
+1468,235179,159
+1469,235338,123
+1470,235461,129
+1471,235590,172
+1472,235762,228
+1473,235990,157
+1474,236147,154
+1475,236301,151
+1476,236452,135
+1477,236587,109
+1478,236696,184
+1479,236880,118
+1480,236998,159
+1481,237157,197
+1482,237354,207
+1483,237561,188
+1484,237749,184
+1485,237933,146
+1486,238079,189
+1487,238268,186
+1488,238454,138
+1489,238592,150
+1490,238742,151
+1491,238893,169
+1492,239062,177
+1493,239239,154
+1494,239393,139
+1495,239532,142
+1496,239674,131
+1497,239805,185
+1498,239990,143
+1499,240133,163
+1500,240296,145
+1501,240441,145
+1502,240586,176
+1503,240762,160
+1504,240922,130
+1505,241052,139
+1506,241191,182
+1507,241373,166
+1508,241539,152
+1509,241691,149
+1510,241840,128
+1511,241968,178
+1512,242146,143
+1513,242289,152
+1514,242441,164
+1515,242605,175
+1516,242780,143
+1517,242923,139
+1518,243062,125
+1519,243187,181
+1520,243368,108
+1521,243476,160
+1522,243636,126
+1523,243762,114
+1524,243876,158
+1525,244034,124
+1526,244158,143
+1527,244301,152
+1528,244453,165
+1529,244618,146
+1530,244764,151
+1531,244915,154
+1532,245069,142
+1533,245211,162
+1534,245373,122
+1535,245495,172
+1536,245667,153
+1537,245820,156
+1538,245976,197
+1539,246173,136
+1540,246309,156
+1541,246465,171
+1542,246636,149
+1543,246785,224
+1544,247009,123
+1545,247132,153
+1546,247285,115
+1547,247400,154
+1548,247554,148
+1549,247702,153
+1550,247855,144
+1551,247999,139
+1552,248138,146
+1553,248284,144
+1554,248428,168
+1555,248596,184
+1556,248780,141
+1557,248921,161
+1558,249082,162
+1559,249244,142
+1560,249386,207
+1561,249593,200
+1562,249793,148
+1563,249941,207
+1564,250148,178
+1565,250326,184
+1566,250510,136
+1567,250646,135
+1568,250781,150
+1569,250931,154
+1570,251085,210
+1571,251295,173
+1572,251468,167
+1573,251635,152
+1574,251787,112
+1575,251899,201
+1576,252100,145
+1577,252245,164
+1578,252409,145
+1579,252554,155
+1580,252709,135
+1581,252844,180
+1582,253024,168
+1583,253192,166
+1584,253358,135
+1585,253493,171
+1586,253664,141
+1587,253805,145
+1588,253950,136
+1589,254086,172
+1590,254258,184
+1591,254442,222
+1592,254664,163
+1593,254827,108
+1594,254935,135
+1595,255070,159
+1596,255229,161
+1597,255390,162
+1598,255552,126
+1599,255678,156
+1600,255834,157
+1601,255991,121
+1602,256112,173
+1603,256285,192
+1604,256477,193
+1605,256670,171
+1606,256841,223
+1607,257064,136
+1608,257200,134
+1609,257334,157
+1610,257491,185
+1611,257676,133
+1612,257809,167
+1613,257976,121
+1614,258097,195
+1615,258292,196
+1616,258488,161
+1617,258649,166
+1618,258815,145
+1619,258960,145
+1620,259105,187
+1621,259292,152
+1622,259444,115
+1623,259559,160
+1624,259719,213
+1625,259932,145
+1626,260077,157
+1627,260234,140
+1628,260374,184
+1629,260558,148
+1630,260706,142
+1631,260848,141
+1632,260989,167
+1633,261156,211
+1634,261367,157
+1635,261524,192
+1636,261716,142
+1637,261858,142
+1638,262000,140
+1639,262140,126
+1640,262266,145
+1641,262411,194
+1642,262605,172
+1643,262777,150
+1644,262927,170
+1645,263097,140
+1646,263237,187
+1647,263424,155
+1648,263579,118
+1649,263697,119
+1650,263816,137
+1651,263953,145
+1652,264098,148
+1653,264246,159
+1654,264405,158
+1655,264563,113
+1656,264676,180
+1657,264856,140
+1658,264996,163
+1659,265159,213
+1660,265372,150
+1661,265522,136
+1662,265658,168
+1663,265826,158
+1664,265984,162
+1665,266146,142
+1666,266288,126
+1667,266414,168
+1668,266582,143
+1669,266725,145
+1670,266870,151
+1671,267021,180
+1672,267201,202
+1673,267403,161
+1674,267564,184
+1675,267748,169
+1676,267917,156
+1677,268073,134
+1678,268207,139
+1679,268346,141
+1680,268487,146
+1681,268633,127
+1682,268760,173
+1683,268933,223
+1684,269156,161
+1685,269317,170
+1686,269487,151
+1687,269638,158
+1688,269796,137
+1689,269933,155
+1690,270088,129
+1691,270217,167
+1692,270384,141
+1693,270525,199
+1694,270724,124
+1695,270848,150
+1696,270998,142
+1697,271140,161
+1698,271301,146
+1699,271447,125
+1700,271572,177
+1701,271749,155
+1702,271904,186
+1703,272090,125
+1704,272215,159
+1705,272374,154
+1706,272528,143
+1707,272671,191
+1708,272862,171
+1709,273033,151
+1710,273184,213
+1711,273397,148
+1712,273545,142
+1713,273687,124
+1714,273811,156
+1715,273967,157
+1716,274124,154
+1717,274278,136
+1718,274414,129
+1719,274543,113
+1720,274656,147
+1721,274803,130
+1722,274933,154
+1723,275087,145
+1724,275232,135
+1725,275367,176
+1726,275543,134
+1727,275677,166
+1728,275843,166
+1729,276009,150
+1730,276159,164
+1731,276323,164
+1732,276487,187
+1733,276674,182
+1734,276856,103
+1735,276959,186
+1736,277145,189
+1737,277334,214
+1738,277548,214
+1739,277762,129
+1740,277891,188
+1741,278079,123
+1742,278202,135
+1743,278337,188
+1744,278525,154
+1745,278679,146
+1746,278825,154
+1747,278979,159
+1748,279138,169
+1749,279307,147
+1750,279454,145
+1751,279599,145
+1752,279744,150
+1753,279894,127
+1754,280021,176
+1755,280197,179
+1756,280376,165
+1757,280541,195
+1758,280736,135
+1759,280871,141
+1760,281012,165
+1761,281177,138
+1762,281315,186
+1763,281501,160
+1764,281661,189
+1765,281850,212
+1766,282062,174
+1767,282236,168
+1768,282404,176
+1769,282580,149
+1770,282729,159
+1771,282888,133
+1772,283021,175
+1773,283196,145
+1774,283341,274
+1775,283615,149
+1776,283764,129
+1777,283893,109
+1778,284002,151
+1779,284153,154
+1780,284307,195
+1784,284502,155
+1785,284657,180
+1786,284837,169
+1787,285006,182
+1788,285188,167
+1789,285355,191
+1790,285546,168
+1791,285714,197
+1792,285911,191
+1793,286102,165
+1794,286267,155
+1795,286422,134
+1797,286556,162
+1798,286718,156
+1799,286874,141
+1800,287015,152
+1801,287167,137
+1802,287304,172
+1803,287476,124
+1804,287600,182
+1805,287782,154
+1806,287936,154
+1807,288090,157
+1808,288247,124
+1809,288371,122
+1810,288493,200
+1811,288693,160
+1812,288853,114
+1813,288967,176
+1814,289143,160
+1815,289303,139
+1816,289442,197
+1817,289639,168
+1818,289807,178
+1819,289985,143
+1820,290128,162
+1821,290290,216
+1822,290506,179
+1823,290685,156
+1824,290841,151
+1825,290992,137
+1826,291129,148
+1827,291277,155
+1828,291432,184
+1829,291616,176
+1831,291792,170
+1832,291962,169
+1833,292131,147
+1834,292278,141
+1835,292419,191
+1836,292610,118
+1837,292728,114
+1838,292842,118
+1839,292960,141
+1840,293101,180
+1841,293281,132
+1842,293413,186
+1843,293599,138
+1844,293737,132
+1845,293869,165
+1846,294034,216
+1847,294250,170
+1848,294420,218
+1849,294638,165
+1850,294803,126
+1851,294929,136
+1852,295065,135
+1853,295200,205
+1854,295405,252
+1855,295657,187
+1856,295844,156
+1857,296000,164
+1858,296164,158
+1859,296322,179
+1860,296501,131
+1861,296632,183
+1862,296815,127
+1863,296942,107
+1864,297049,146
+1865,297195,128
+1866,297323,142
+1867,297465,138
+1868,297603,127
+1869,297730,167
+1870,297897,164
+1871,298061,145
+1872,298206,145
+1873,298351,152
+1874,298503,179
+1875,298682,225
+1876,298907,173
+1877,299080,119
+1878,299199,174
+1879,299373,136
+1880,299509,143
+1881,299652,152
+1882,299804,197
+1883,300001,136
+1884,300137,152
+1885,300289,133
+1886,300422,159
+1887,300581,166
+1888,300747,232
+1889,300979,138
+1890,301117,162
+1891,301279,196
+1892,301475,194
+1893,301669,179
+1894,301848,191
+1895,302039,222
+1896,302261,107
+1897,302368,145
+1898,302513,182
+1899,302695,116
+1900,302811,160
+1901,302971,131
+1902,303102,185
+1903,303287,151
+1904,303438,179
+1905,303617,171
+1906,303788,183
+1907,303971,162
+1908,304133,192
+1909,304325,152
+1910,304477,125
+1911,304602,125
+1912,304727,163
+1913,304890,176
+1914,305066,178
+1915,305244,148
+1916,305392,135
+1918,305527,118
+1919,305645,167
+1920,305812,141
+1921,305953,128
+1922,306081,154
+1923,306235,175
+1924,306410,143
+1925,306553,143
+1926,306696,160
+1927,306856,152
+1928,307008,178
+1929,307186,177
+1930,307363,205
+1931,307568,165
+1932,307733,165
+1933,307898,152
+1934,308050,131
+1935,308181,173
+1936,308354,192
+1937,308546,184
+1938,308730,144
+1939,308874,184
+1940,309058,155
+1941,309213,216
+1942,309429,159
+1943,309588,174
+1944,309762,116
+1945,309878,178
+1946,310056,145
+1947,310201,147
+1948,310348,213
+1949,310561,150
+1950,310711,180
+1951,310891,153
+1952,311044,144
+1953,311188,148
+1954,311336,143
+1955,311479,171
+1956,311650,185
+1957,311835,124
+1958,311959,151
+1959,312110,121
+1960,312231,159
+1961,312390,126
+1962,312516,143
+1964,312659,109
+1965,312768,168
+1966,312936,186
+1967,313122,146
+1968,313268,155
+1969,313423,147
+1970,313570,160
+1971,313730,143
+1972,313873,143
+1973,314016,178
+1974,314194,173
+1975,314367,201
+1976,314568,155
+1977,314723,184
+1978,314907,137
+1979,315044,136
+1980,315180,126
+1981,315306,114
+1982,315420,149
+1983,315569,168
+1984,315737,140
+1985,315877,167
+1986,316044,172
+1987,316216,126
+1988,316342,151
+1989,316493,123
+1990,316616,134
+1991,316750,179
+1992,316929,159
+1993,317088,154
+1994,317242,198
+1995,317440,122
+1996,317562,141
+1997,317703,164
+1998,317867,154
+1999,318021,107
+2000,318128,196
+2001,318324,169
+2002,318493,127
+2003,318620,168
+2004,318788,224
+2005,319012,180
+2006,319192,117
+2007,319309,131
+2008,319440,171
+2009,319611,163
+2010,319774,179
+2011,319953,175
+2012,320128,179
+2013,320307,146
+2014,320453,118
+2015,320571,145
+2016,320716,130
+2017,320846,185
+2018,321031,136
+2019,321167,177
+2020,321344,173
+2021,321517,156
+2022,321673,145
+2023,321818,160
+2024,321978,152
+2025,322130,157
+2026,322287,148
+2027,322435,143
+2028,322578,143
+2029,322721,156
+2030,322877,155
+2031,323032,169
+2032,323201,152
+2033,323353,152
+2034,323505,135
+2035,323640,149
+2036,323789,141
+2037,323930,126
+2038,324056,154
+2039,324210,150
+2040,324360,135
+2041,324495,130
+2042,324625,131
+2043,324756,172
+2044,324928,133
+2045,325061,147
+2046,325208,152
+2047,325360,137
+2048,325497,155
+2049,325652,167
+2050,325819,153
+2051,325972,160
+2052,326132,108
+2053,326240,165
+2054,326405,191
+2055,326596,166
+2056,326762,145
+2057,326907,127
+2058,327034,133
+2059,327167,148
+2060,327315,138
+2061,327453,123
+2062,327576,132
+2063,327708,144
+2064,327852,144
+2065,327996,187
+2066,328183,160
+2067,328343,172
+2068,328515,145
+2069,328660,142
+2070,328802,119
+2071,328921,175
+2072,329096,141
+2073,329237,112
+2074,329349,212
+2075,329561,140
+2076,329701,127
+2077,329828,162
+2078,329990,110
+2079,330100,189
+2080,330289,143
+2081,330432,143
+2082,330575,144
+2083,330719,150
+2084,330869,131
+2085,331000,139
+2086,331139,137
+2087,331276,144
+2088,331420,158
+2089,331578,153
+2090,331731,166
+2091,331897,179
+2092,332076,124
+2093,332200,188
+2094,332388,174
+2126,332562,135
+2127,332697,155
+2128,332852,151
+2129,333003,165
+2130,333168,186
+2131,333354,175
+2132,333529,165
+2133,333694,161
+2134,333855,169
+2135,334024,155
+2136,334179,175
+2137,334354,202
+2138,334556,170
+2139,334726,195
+2140,334921,218
+2141,335139,121
+2142,335260,102
+2143,335362,112
+2144,335474,172
+2145,335646,158
+2146,335804,172
+2147,335976,156
+2148,336132,121
+2149,336253,172
+2150,336425,152
+2151,336577,148
+2152,336725,138
+2153,336863,190
+2154,337053,161
+2155,337214,121
+2156,337335,139
+2157,337474,145
+2158,337619,116
+2159,337735,188
+2160,337923,163
+2161,338086,182
+2162,338268,165
+2163,338433,130
+2164,338563,140
+2165,338703,181
+2166,338884,181
+2167,339065,155
+2168,339220,165
+2169,339385,130
+2170,339515,131
+2171,339646,126
+2172,339772,145
+2173,339917,143
+2174,340060,193
+2175,340253,157
+2176,340410,186
+2177,340596,205
+2178,340801,140
+2179,340941,171
+2180,341112,121
+2181,341233,142
+2182,341375,177
+2183,341552,168
+2184,341720,218
+2185,341938,160
+2186,342098,135
+2187,342233,151
+2188,342384,175
+2189,342559,153
+2190,342712,157
+2191,342869,180
+2192,343049,167
+2193,343216,143
+2194,343359,128
+2195,343487,229
+2196,343716,191
+2197,343907,154
+2198,344061,166
+2199,344227,154
+2200,344381,161
+2201,344542,132
+2202,344674,149
+2203,344823,197
+2204,345020,164
+2205,345184,128
+2206,345312,171
+2207,345483,190
+2208,345673,154
+2209,345827,195
+2210,346022,153
+2211,346175,144
+2212,346319,144
+2213,346463,163
+2214,346626,190
+2215,346816,152
+2216,346968,133
+2217,347101,181
+2218,347282,130
+2219,347412,150
+2220,347562,151
+2221,347713,141
+2222,347854,126
+2223,347980,148
+2224,348128,161
+2225,348289,136
+2226,348425,261
+2227,348686,122
+2228,348808,142
+2229,348950,208
+2230,349158,145
+2231,349303,167
+2232,349470,144
+2233,349614,175
+2234,349789,189
+2235,349978,131
+2236,350109,114
+2237,350223,122
+2238,350345,177
+2239,350522,136
+2240,350658,175
+2241,350833,187
+2242,351020,131
+2243,351151,111
+2244,351262,147
+2245,351409,196
+2246,351605,167
+2247,351772,140
+2248,351912,164
+2249,352076,154
+2250,352230,192
+2251,352422,148
+2252,352570,136
+2253,352706,170
+2254,352876,149
+2255,353025,180
+2256,353205,168
+2257,353373,153
+2258,353526,174
+2259,353700,157
+2260,353857,169
+2261,354026,170
+2262,354196,163
+2263,354359,136
+2264,354495,138
+2265,354633,144
+2266,354777,145
+2267,354922,127
+2268,355049,148
+2269,355197,177
+2270,355374,124
+2271,355498,160
+2272,355658,179
+2273,355837,113
+2274,355950,147
+2275,356097,147
+2276,356244,137
+2277,356381,139
+2278,356520,131
+2279,356651,146
+2280,356797,182
+2281,356979,128
+2282,357107,177
+2283,357284,153
+2284,357437,131
+2285,357568,185
+2286,357753,179
+2287,357932,119
+2288,358051,161
+2289,358212,110
+2290,358322,172
+2291,358494,144
+2292,358638,227
+2293,358865,173
+2294,359038,200
+2295,359238,224
+2296,359462,163
+2297,359625,132
+2298,359757,144
+2299,359901,134
+2300,360035,133
+2301,360168,181
+2302,360349,169
+2303,360518,182
+2304,360700,111
+2305,360811,222
+2306,361033,170
+2307,361203,152
+2308,361355,145
+2309,361500,162
+2310,361662,132
+2311,361794,158
+2312,361952,179
+2313,362131,138
+2314,362269,187
+2315,362456,149
+2316,362605,149
+2317,362754,164
+2318,362918,176
+2319,363094,136
+2320,363230,144
+2321,363374,143
+2322,363517,143
+2323,363660,162
+2324,363822,130
+2325,363952,154
+2326,364106,192
+2327,364298,168
+2328,364466,164
+2329,364630,143
+2330,364773,197
+2331,364970,183
+2332,365153,140
+2333,365293,197
+2334,365490,184
+2335,365674,137
+2336,365811,197
+2337,366008,124
+2338,366132,128
+2339,366260,173
+2340,366433,140
+2341,366573,135
+2342,366708,222
+2343,366930,156
+2344,367086,140
+2345,367226,167
+2346,367393,137
+2347,367530,161
+2348,367691,160
+2349,367851,153
+2350,368004,159
+2351,368163,175
+2352,368338,141
+2353,368479,208
+2354,368687,118
+2355,368805,182
+2356,368987,148
+2357,369135,144
+2358,369279,156
+2359,369435,221
+2360,369656,137
+2361,369793,144
+2362,369937,148
+2363,370085,170
+2364,370255,154
+2365,370409,160
+2366,370569,195
+2367,370764,204
+2368,370968,149
+2369,371117,185
+2370,371302,144
+2371,371446,143
+2372,371589,143
+2373,371732,156
+2374,371888,149
+2375,372037,144
+2376,372181,165
+2377,372346,153
+2378,372499,168
+2379,372667,132
+2380,372799,197
+2381,372996,176
+2382,373172,188
+2383,373360,175
+2384,373535,176
+2385,373711,158
+2386,373869,162
+2387,374031,193
+2388,374224,134
+2389,374358,208
+2390,374566,186
+2391,374752,143
+2392,374895,129
+2393,375024,172
+2394,375196,169
+2395,375365,143
+2396,375508,237
+2397,375745,192
+2398,375937,169
+2399,376106,138
+2400,376244,136
+2401,376380,182
+2402,376562,165
+2403,376727,157
+2404,376884,147
+2405,377031,179
+2406,377210,143
+2407,377353,150
+2408,377503,148
+2409,377651,172
+2410,377823,169
+2411,377992,185
+2412,378177,167
+2413,378344,174
+2414,378518,187
+2415,378705,208
+2416,378913,178
+2417,379091,153
+2418,379244,158
+2419,379402,186
+2420,379588,212
+2421,379800,171
+2422,379971,162
+2423,380133,141
+2424,380274,183
+2425,380457,207
+2426,380664,185
+2427,380849,143
+2428,380992,142
+2429,381134,148
+2430,381282,199
+2431,381481,135
+2432,381616,149
+2433,381765,168
+2434,381933,135
+2435,382068,180
+2436,382248,148
+2437,382396,192
+2438,382588,133
+2439,382721,181
+2440,382902,170
+2441,383072,142
+2442,383214,129
+2443,383343,168
+2444,383511,153
+2445,383664,180
+2446,383844,121
+2447,383965,158
+2448,384123,190
+2449,384313,216
+2450,384529,198
+2451,384727,169
+2452,384896,154
+2453,385050,180
+2454,385230,108
+2455,385338,147
+2456,385485,164
+2457,385649,139
+2458,385788,159
+2459,385947,140
+2460,386087,179
+2461,386266,143
+2462,386409,201
+2463,386610,128
+2464,386738,171
+2465,386909,166
+2466,387075,150
+2467,387225,192
+2468,387417,167
+2469,387584,228
+2470,387812,149
+2471,387961,131
+2472,388092,154
+2473,388246,147
+2474,388393,167
+2475,388560,124
+2476,388684,155
+2477,388839,171
+2478,389010,154
+2479,389164,126
+2480,389290,134
+2481,389424,161
+2482,389585,123
+2483,389708,129
+2484,389837,177
+2485,390014,168
+2486,390182,143
+2487,390325,143
+2488,390468,134
+2489,390602,199
+2490,390801,152
+2491,390953,139
+2492,391092,148
+2493,391240,171
+2494,391411,153
+2495,391564,153
+2496,391717,129
+2497,391846,123
+2498,391969,130
+2499,392099,121
+2500,392220,177
+2501,392397,189
+2502,392586,163
+2503,392749,143
+2504,392892,196
+2505,393088,201
+2506,393289,233
+2507,393522,161
+2508,393683,121
+2509,393804,170
+2510,393974,161
+2511,394135,146
+2512,394281,151
+2513,394432,165
+2514,394597,148
+2515,394745,155
+2516,394900,151
+2517,395051,170
+2518,395221,131
+2519,395352,159
+2520,395511,134
+2521,395645,152
+2522,395797,142
+2523,395939,123
+2524,396062,174
+2525,396236,202
+2526,396438,214
+2527,396652,202
+2528,396854,145
+2529,396999,170
+2530,397169,197
+2531,397366,151
+2532,397517,187
+2533,397704,171
+2534,397875,152
+2535,398027,153
+2536,398180,143
+2537,398323,143
+2538,398466,123
+2539,398589,134
+2540,398723,149
+2541,398872,163
+2542,399035,151
+2543,399186,175
+2544,399361,186
+2545,399547,159
+2546,399706,173
+2547,399879,184
+2548,400063,156
+2549,400219,231
+2550,400450,219
+2551,400669,191
+2552,400860,176
+2553,401036,162
+2555,401198,155
+2556,401353,146
+2557,401499,163
+2558,401662,189
+2559,401851,131
+2560,401982,162
+2561,402144,138
+2562,402282,191
+2563,402473,142
+2564,402615,176
+2565,402791,127
+2566,402918,133
+2567,403051,163
+2568,403214,164
+2569,403378,170
+2570,403548,157
+2571,403705,151
+2572,403856,193
+2573,404049,126
+2574,404175,154
+2575,404329,178
+2576,404507,161
+2577,404668,223
+2578,404891,184
+2579,405075,142
+2580,405217,119
+2581,405336,153
+2582,405489,134
+2583,405623,169
+2584,405792,152
+2585,405944,145
+2586,406089,162
+2587,406251,137
+2588,406388,201
+2589,406589,177
+2590,406766,198
+2591,406964,216
+2592,407180,142
+2593,407322,182
+2594,407504,130
+2595,407634,142
+2596,407776,150
+2597,407926,137
+2598,408063,134
+2599,408197,153
+2600,408350,124
+2601,408474,151
+2602,408625,157
+2603,408782,127
+2604,408909,178
+2605,409087,189
+2606,409276,189
+2607,409465,148
+2608,409613,147
+2609,409760,129
+2610,409889,149
+2611,410038,159
+2612,410197,177
+2613,410374,116
+2614,410490,171
+2615,410661,151
+2616,410812,146
+2617,410958,189
+2618,411147,227
+2619,411374,152
+2620,411526,123
+2621,411649,167
+2622,411816,130
+2623,411946,153
+2624,412099,179
+2625,412278,132
+2626,412410,132
+2627,412542,194
+2628,412736,149
+2629,412885,137
+2630,413022,143
+2631,413165,155
+2632,413320,175
+2633,413495,133
+2634,413628,169
+2635,413797,159
+2636,413956,165
+2637,414121,156
+2638,414277,153
+2639,414430,201
+2640,414631,183
+2641,414814,195
+2642,415009,166
+2643,415175,166
+2644,415341,153
+2645,415494,140
+2646,415634,158
+2647,415792,196
+2648,415988,174
+2649,416162,130
+2650,416292,209
+2651,416501,114
+2652,416615,130
+2653,416745,190
+2654,416935,160
+2655,417095,145
+2656,417240,170
+2657,417410,197
+2658,417607,163
+2659,417770,120
+2660,417890,150
+2661,418040,177
+2662,418217,193
+2663,418410,123
+2664,418533,175
+2665,418708,198
+2666,418906,140
+2667,419046,185
+2668,419231,141
+2669,419372,161
+2670,419533,216
+2671,419749,177
+2672,419926,144
+2673,420070,161
+2674,420231,128
+2675,420359,165
+2676,420524,158
+2677,420682,165
+2678,420847,201
+2679,421048,148
+2680,421196,124
+2681,421320,156
+2682,421476,164
+2683,421640,127
+2684,421767,150
+2685,421917,124
+2686,422041,160
+2687,422201,151
+2688,422352,141
+2689,422493,135
+2690,422628,183
+2691,422811,141
+2692,422952,212
+2693,423164,125
+2694,423289,113
+2695,423402,167
+2696,423569,125
+2697,423694,170
+2698,423864,132
+2699,423996,132
+2700,424128,138
+2701,424266,163
+2702,424429,174
+2703,424603,163
+2704,424766,167
+2705,424933,113
+2706,425046,156
+2707,425202,153
+2708,425355,169
+2709,425524,157
+2710,425681,186
+2711,425867,147
+2712,426014,140
+2713,426154,172
+2714,426326,200
+2715,426526,141
+2716,426667,151
+2717,426818,194
+2718,427012,204
+2719,427216,160
+2720,427376,157
+2721,427533,160
+2722,427693,162
+2723,427855,192
+2724,428047,183
+2725,428230,181
+2726,428411,135
+2727,428546,152
+2728,428698,146
+2729,428844,152
+2730,428996,160
+2731,429156,188
+2732,429344,144
+2733,429488,143
+2734,429631,165
+2735,429796,152
+2736,429948,150
+2737,430098,167
+2738,430265,170
+2739,430435,132
+2740,430567,159
+2741,430726,172
+2742,430898,139
+2743,431037,143
+2744,431180,143
+2745,431323,160
+2746,431483,196
+2747,431679,184
+2748,431863,149
+2749,432012,157
+2750,432169,191
+2751,432360,129
+2752,432489,192
+2753,432681,142
+2754,432823,217
+2755,433040,188
+2756,433228,173
+2757,433401,153
+2758,433554,149
+2759,433703,164
+2760,433867,204
+2761,434071,134
+2762,434205,151
+2763,434356,172
+2764,434528,161
+2765,434689,171
+2766,434860,187
+2767,435047,224
+2768,435271,227
+2769,435498,98
+2770,435596,172
+2771,435768,178
+2772,435946,182
+2773,436128,202
+2774,436330,155
+2775,436485,160
+2776,436645,174
+2777,436819,170
+2778,436989,175
+2779,437164,147
+2780,437311,134
+2781,437445,148
+2782,437593,194
+2783,437787,151
+2784,437938,148
+2785,438086,143
+2786,438229,193
+2787,438422,201
+2788,438623,172
+2789,438795,155
+2790,438950,206
+2791,439156,122
+2792,439278,216
+2793,439494,196
+2794,439690,166
+2795,439856,207
+2796,440063,161
+2797,440224,165
+2798,440389,148
+2799,440537,107
+2800,440644,245
+2801,440889,166
+2802,441055,140
+2803,441195,143
+2804,441338,143
+2805,441481,147
+2806,441628,224
+2807,441852,133
+2808,441985,162
+2809,442147,206
+2810,442353,173
+2811,442526,130
+2812,442656,180
+2813,442836,177
+2814,443013,142
+2815,443155,149
+2816,443304,201
+2817,443505,162
+2818,443667,145
+2819,443812,191
+2820,444003,170
+2821,444173,161
+2822,444334,132
+2823,444466,174
+2824,444640,145
+2825,444785,165
+2826,444950,133
+2827,445083,163
+2828,445246,139
+2829,445385,164
+2830,445549,146
+2831,445695,176
+2832,445871,186
+2833,446057,166
+2834,446223,204
+2835,446427,119
+2836,446546,156
+2837,446702,140
+2838,446842,183
+2839,447025,134
+2840,447159,56
+2841,447215,160
+2842,447375,172
+2843,447547,140
+2844,447687,119
+2845,447806,174
+2846,447980,166
+2847,448146,163
+2848,448309,143
+2849,448452,192
+2850,448644,179
+2851,448823,158
+2852,448981,180
+2853,449161,134
+2854,449295,179
+2855,449474,157
+2856,449631,130
+2857,449761,189
+2858,449950,168
+2859,450118,185
+2860,450303,145
+2861,450448,130
+2862,450578,245
+2863,450823,118
+2864,450941,204
+2865,451145,257
+2866,451402,135
+2867,451537,126
+2868,451663,180
+2869,451843,193
+2870,452036,164
+2871,452200,169
+2872,452369,130
+2873,452499,173
+2874,452672,168
+2875,452840,111
+2876,452951,185
+2877,453136,141
+2878,453277,131
+2879,453408,168
+2880,453576,136
+2881,453712,143
+2882,453855,174
+2883,454029,150
+2884,454179,145
+2885,454324,127
+2886,454451,127
+2887,454578,150
+2888,454728,129
+2889,454857,170
+2890,455027,162
+2891,455189,154
+2892,455343,143
+2893,455486,131
+2894,455617,215
+2895,455832,147
+2896,455979,138
+2897,456117,183
+2898,456300,184
+2899,456484,173
+2900,456657,158
+2901,456815,126
+2902,456941,129
+2903,457070,174
+2904,457244,140
+2905,457384,133
+2906,457517,130
+2907,457647,171
+2908,457818,142
+2909,457960,183
+2910,458143,185
+2911,458328,143
+2912,458471,143
+2913,458614,168
+2914,458782,188
+2915,458970,144
+2916,459114,152
+2917,459266,114
+2918,459380,184
+2919,459564,214
+2920,459778,184
+2921,459962,142
+2922,460104,183
+2923,460287,172
+2924,460459,142
+2925,460601,169
+2926,460770,151
+2927,460921,186
+2928,461107,152
+2929,461259,166
+2930,461425,123
+2931,461548,168
+2932,461716,187
+2933,461903,133
+2934,462036,166
+2935,462202,152
+2936,462354,154
+2937,462508,140
+2938,462648,145
+2939,462793,128
+2940,462921,149
+2941,463070,199
+2942,463269,153
+2943,463422,141
+2944,463563,148
+2945,463711,142
+2946,463853,173
+2947,464026,152
+2948,464178,120
+2949,464298,149
+2950,464447,137
+2951,464584,148
+2952,464732,125
+2953,464857,201
+2954,465058,130
+2955,465188,146
+2956,465334,134
+2957,465468,128
+2958,465596,162
+2959,465758,193
+2960,465951,183
+2961,466134,216
+2962,466350,136
+2963,466486,155
+2964,466641,192
+2965,466833,162
+2966,466995,139
+2967,467134,193
+2968,467327,160
+2969,467487,159
+2970,467646,207
+2971,467853,143
+2972,467996,178
+2973,468174,185
+2974,468359,179
+2975,468538,118
+2976,468656,169
+2977,468825,130
+2978,468955,167
+2979,469122,145
+2980,469267,183
+2981,469450,153
+2982,469603,166
+2983,469769,138
+2984,469907,175
+2985,470082,169
+2986,470251,146
+2987,470397,189
+2988,470586,177
+2989,470763,135
+2990,470898,181
+2991,471079,186
+2992,471265,134
+2993,471399,215
+2994,471614,171
+2995,471785,144
+2996,471929,181
+2997,472110,170
+2998,472280,161
+2999,472441,153
+3000,472594,177
+3001,472771,124
+3002,472895,171
+3003,473066,186
+3004,473252,158
+3005,473410,145
+3006,473555,143
+3007,473698,143
+3008,473841,209
+3009,474050,169
+3010,474219,165
+3011,474384,138
+3012,474522,131
+3013,474653,130
+3014,474783,117
+3015,474900,137
+3016,475037,152
+3017,475189,149
+3018,475338,213
+3019,475551,164
+3020,475715,107
+3021,475822,159
+3022,475981,126
+3023,476107,138
+3024,476245,168
+3025,476413,152
+3026,476565,174
+3027,476739,111
+3028,476850,251
+3029,477101,160
+3030,477261,165
+3031,477426,142
+3032,477568,158
+3033,477726,147
+3034,477873,150
+3035,478023,141
+3036,478164,172
+3037,478336,149
+3038,478485,122
+3039,478607,198
+3040,478805,139
+3041,478944,176
+3042,479120,149
+3043,479269,165
+3044,479434,152
+3045,479586,202
+3046,479788,147
+3047,479935,202
+3048,480137,136
+3049,480273,156
+3050,480429,146
+3051,480575,125
+3052,480700,173
+3053,480873,129
+3054,481002,147
+3055,481149,150
+3056,481299,177
+3057,481476,156
+3058,481632,211
+3059,481843,127
+3060,481970,56
+3061,482026,194
+3062,482220,158
+3063,482378,141
+3064,482519,124
+3065,482643,180
+3066,482823,124
+3067,482947,202
+3068,483149,143
+3069,483292,143
+3070,483435,171
+3071,483606,163
+3072,483769,158
+3073,483927,121
+3074,484048,103
+3075,484151,162
+3076,484313,124
+3077,484437,182
+3078,484619,161
+3079,484780,124
+3080,484904,182
+3081,485086,196
+3082,485282,289
+3083,485571,160
+3084,485731,174
+3085,485905,214
+3086,486119,144
+3087,486263,146
+3088,486409,140
+3089,486549,161
+3090,486710,170
+3091,486880,122
+3092,487002,166
+3093,487168,196
+3094,487364,170
+3095,487534,164
+3096,487698,145
+3097,487843,142
+3098,487985,172
+3099,488157,174
+3100,488331,181
+3101,488512,136
+3102,488648,155
+3103,488803,160
+3104,488963,183
+3105,489146,214
+3106,489360,179
+3107,489539,203
+3108,489742,129
+3109,489871,168
+3110,490039,176
+3111,490215,161
+3112,490376,161
+3113,490537,133
+3114,490670,190
+3115,490860,174
+3116,491034,175
+3117,491209,184
+3118,491393,271
+3119,491664,180
+3120,491844,127
+3121,491971,127
+3122,492098,159
+3123,492257,196
+3124,492453,144
+3125,492597,167
+3126,492764,201
+3127,492965,154
+3128,493119,136
+3129,493255,154
+3130,493409,123
+3131,493532,152
+3132,493684,175
+3133,493859,173
+3134,494032,130
+3135,494162,219
+3136,494381,146
+3137,494527,126
+3138,494653,118
+3139,494771,209
+3140,494980,169
+3141,495149,201
+3142,495350,161
+3143,495511,200
+3144,495711,165
+3145,495876,176
+3146,496052,190
+3147,496242,140
+3148,496382,135
+3149,496517,146
+3150,496663,175
+3151,496838,187
+3152,497025,139
+3153,497164,164
+3154,497328,139
+3155,497467,56
+3156,497523,152
+3157,497675,189
+3158,497864,166
+3159,498030,187
+3160,498217,129
+3161,498346,150
+3162,498496,192
+3163,498688,190
+3164,498878,137
+3165,499015,186
+3166,499201,147
+3167,499348,125
+3168,499473,137
+3169,499610,189
+3170,499799,185
+3171,499984,178
+3172,500162,170
+3173,500332,160
+3174,500492,156
+3175,500648,155
+3176,500803,129
+3177,500932,169
+3178,501101,121
+3179,501222,179
+3180,501401,147
+3181,501548,140
+3182,501688,158
+3183,501846,191
+3184,502037,116
+3185,502153,136
+3186,502289,178
+3187,502467,193
+3188,502660,141
+3189,502801,202
+3190,503003,199
+3191,503202,168
+3192,503370,198
+3193,503568,163
+3194,503731,160
+3195,503891,149
+3196,504040,215
+3197,504255,170
+3198,504425,153
+3199,504578,149
+3200,504727,140
+3201,504867,151
+3202,505018,151
+3203,505169,143
+3204,505312,179
+3205,505491,143
+3206,505634,143
+3207,505777,132
+3208,505909,166
+3209,506075,144
+3210,506219,189
+3211,506408,131
+3212,506539,182
+3213,506721,152
+3214,506873,164
+3215,507037,119
+3216,507156,140
+3217,507296,166
+3218,507462,120
+3219,507582,178
+3220,507760,180
+3221,507940,146
+3222,508086,131
+3223,508217,166
+3224,508383,208
+3225,508591,194
+3226,508785,187
+3227,508972,170
+3228,509142,202
+3229,509344,180
+3230,509524,161
+3231,509685,135
+3232,509820,162
+3233,509982,195
+3234,510177,169
+3235,510346,158
+3236,510504,169
+3237,510673,132
+3238,510805,141
+3239,510946,213
+3240,511159,160
+3241,511319,125
+3242,511444,178
+3243,511622,144
+3244,511766,158
+3245,511924,142
+3246,512066,148
+3247,512214,160
+3248,512374,215
+3249,512589,187
+3250,512776,182
+3251,512958,134
+3252,513092,190
+3253,513282,166
+3254,513448,227
+3255,513675,220
+3256,513895,137
+3257,514032,122
+3258,514154,111
+3259,514265,119
+3260,514384,152
+3261,514536,166
+3262,514702,167
+3263,514869,218
+3264,515087,126
+3265,515213,153
+3266,515366,199
+3267,515565,150
+3268,515715,116
+3269,515831,186
+3270,516017,139
+3271,516156,173
+3272,516329,180
+3273,516509,211
+3274,516720,173
+3275,516893,140
+3276,517033,134
+3277,517167,137
+3278,517304,143
+3279,517447,143
+3280,517590,129
+3281,517719,195
+3282,517914,132
+3283,518046,170
+3284,518216,168
+3285,518384,128
+3286,518512,157
+3287,518669,166
+3288,518835,149
+3289,518984,169
+3290,519153,159
+3291,519312,155
+3292,519467,169
+3293,519636,151
+3294,519787,162
+3295,519949,145
+3296,520094,163
+3297,520257,148
+3298,520405,133
+3299,520538,156
+3300,520694,165
+3301,520859,132
+3302,520991,146
+3303,521137,185
+3304,521322,167
+3305,521489,139
+3306,521628,182
+3307,521810,164
+3308,521974,158
+3309,522132,159
+3310,522291,116
+3311,522407,201
+3312,522608,124
+3313,522732,158
+3314,522890,133
+3315,523023,127
+3316,523150,165
+3317,523315,143
+3318,523458,137
+3319,523595,146
+3320,523741,159
+3321,523900,140
+3322,524040,172
+3323,524212,192
+3324,524404,156
+3325,524560,187
+3326,524747,168
+3327,524915,155
+3328,525070,141
+3329,525211,168
+3330,525379,146
+3331,525525,147
+3332,525672,179
+3333,525851,164
+3334,526015,188
+3335,526203,154
+3336,526357,151
+3337,526508,192
+3338,526700,140
+3339,526840,160
+3340,527000,153
+3341,527153,154
+3342,527307,182
+3343,527489,118
+3344,527607,123
+3345,527730,152
+3346,527882,171
+3347,528053,155
+3348,528208,215
+3349,528423,124
+3350,528547,165
+3351,528712,165
+3352,528877,196
+3353,529073,149
+3354,529222,172
+3355,529394,233
+3356,529627,188
+3357,529815,241
+3358,530056,151
+3359,530207,127
+3360,530334,203
+3361,530537,153
+3362,530690,164
+3363,530854,152
+3364,531006,159
+3365,531165,140
+3366,531305,208
+3367,531513,148
+3368,531661,127
+3369,531788,127
+3370,531915,107
+3371,532022,137
+3372,532159,172
+3373,532331,143
+3374,532474,189
+3375,532663,169
+3376,532832,159
+3377,532991,174
+3378,533165,171
+3379,533336,136
+3380,533472,216
+3381,533688,170
+3382,533858,205
+3383,534063,152
+3384,534215,124
+3385,534339,137
+3386,534476,135
+3387,534611,215
+3388,534826,145
+3389,534971,164
+3390,535135,177
+3391,535312,171
+3392,535483,174
+3393,535657,163
+3394,535820,183
+3395,536003,157
+3396,536160,166
+3397,536326,179
+3398,536505,151
+3399,536656,148
+3400,536804,190
+3401,536994,173
+3402,537167,131
+3403,537298,127
+3404,537425,169
+3405,537594,159
+3406,537753,173
+3407,537926,150
+3408,538076,130
+3409,538206,142
+3410,538348,192
+3411,538540,173
+3412,538713,176
+3413,538889,170
+3414,539059,149
+3415,539208,185
+3416,539393,56
+3417,539449,142
+3418,539591,138
+3419,539729,189
+3420,539918,151
+3421,540069,149
+3422,540218,162
+3423,540380,141
+3424,540521,189
+3425,540710,193
+3426,540903,156
+3427,541059,146
+3428,541205,148
+3429,541353,143
+3430,541496,143
+3431,541639,140
+3432,541779,158
+3433,541937,141
+3434,542078,177
+3435,542255,135
+3436,542390,119
+3437,542509,157
+3438,542666,132
+3439,542798,149
+3440,542947,151
+3441,543098,135
+3442,543233,131
+3443,543364,157
+3444,543521,157
+3445,543678,200
+3446,543878,165
+3447,544043,139
+3448,544182,146
+3449,544328,165
+3450,544493,166
+3451,544659,145
+3452,544804,132
+3453,544936,129
+3454,545065,155
+3455,545220,272
+3456,545492,149
+3457,545641,136
+3458,545777,112
+3459,545889,164
+3460,546053,155
+3461,546208,153
+3462,546361,138
+3463,546499,206
+3464,546705,173
+3465,546878,151
+3466,547029,192
+3467,547221,133
+3468,547354,164
+3469,547518,197
+3470,547715,169
+3471,547884,155
+3472,548039,150
+3473,548189,193
+3474,548382,198
+3475,548580,132
+3476,548712,170
+3477,548882,152
+3478,549034,168
+3479,549202,164
+3480,549366,198
+3481,549564,194
+3482,549758,165
+3483,549923,175
+3484,550098,134
+3485,550232,159
+3486,550391,175
+3487,550566,136
+3488,550702,133
+3489,550835,171
+3490,551006,167
+3491,551173,192
+3492,551365,150
+3493,551515,167
+3494,551682,166
+3495,551848,56
+3496,551904,185
+3497,552089,141
+3498,552230,179
+3499,552409,229
+3500,552638,144
+3501,552782,132
+3502,552914,203
+3503,553117,152
+3504,553269,163
+3505,553432,182
+3506,553614,129
+3507,553743,198
+3508,553941,119
+3509,554060,203
+3510,554263,132
+3511,554395,158
+3512,554553,115
+3513,554668,129
+3514,554797,162
+3515,554959,148
+3516,555107,143
+3517,555250,143
+3518,555393,180
+3519,555573,177
+3520,555750,121
+3521,555871,135
+3522,556006,56
+3523,556062,208
+3524,556270,155
+3525,556425,180
+3526,556605,192
+3527,556797,152
+3528,556949,137
+3529,557086,158
+3530,557244,160
+3531,557404,185
+3532,557589,162
+3533,557751,171
+3534,557922,141
+3535,558063,132
+3536,558195,152
+3537,558347,140
+3538,558487,153
+3539,558640,189
+3540,558829,138
+3541,558967,187
+3542,559154,172
+3543,559326,120
+3544,559446,140
+3545,559586,126
+3546,559712,137
+3547,559849,207
+3548,560056,134
+3549,560190,221
+3550,560411,165
+3551,560576,152
+3552,560728,163
+3553,560891,154
+3554,561045,165
+3555,561210,149
+3556,561359,146
+3557,561505,154
+3558,561659,198
+3559,561857,148
+3560,562005,184
+3561,562189,120
+3562,562309,192
+3563,562501,155
+3564,562656,143
+3565,562799,143
+3566,562942,167
+3567,563109,145
+3568,563254,173
+3569,563427,192
+3570,563619,56
+3571,563675,118
+3572,563793,173
+3573,563966,183
+3574,564149,173
+3575,564322,152
+3576,564474,162
+3577,564636,164
+3578,564800,150
+3579,564950,119
+3580,565069,150
+3581,565219,180
+3582,565399,169
+3583,565568,184
+3584,565752,184
+3585,565936,173
+3586,566109,134
+3587,566243,119
+3588,566362,136
+3589,566498,153
+3590,566651,160
+3591,566811,175
+3592,566986,141
+3593,567127,212
+3594,567339,134
+3595,567473,239
+3596,567712,160
+3597,567872,145
+3598,568017,151
+3599,568168,109
+3600,568277,153
+3601,568430,188
+3602,568618,162
+3603,568780,152
+3604,568932,174
+3605,569106,127
+3606,569233,135
+3607,569368,56
+3608,569424,133
+3609,569557,135
+3610,569692,143
+3611,569835,106
+3612,569941,132
+3613,570073,195
+3614,570268,148
+3615,570416,179
+3616,570595,170
+3617,570765,166
+3618,570931,56
+3619,570987,145
+3620,571132,187
+3621,571319,197
+3622,571516,189
+3623,571705,179
+3624,571884,184
+3625,572068,167
+3626,572235,56
+3627,572291,137
+3628,572428,162
+3629,572590,213
+3630,572803,203
+3631,573006,165
+3632,573171,151
+3633,573322,167
+3634,573489,130
+3635,573619,212
+3636,573831,151
+3637,573982,137
+3638,574119,174
+3639,574293,149
+3640,574442,143
+3641,574585,143
+3642,574728,126
+3643,574854,161
+3644,575015,156
+3645,575171,118
+3646,575289,149
+3647,575438,147
+3648,575585,147
+3649,575732,176
+3650,575908,185
+3651,576093,207
+3652,576300,157
+3653,576457,203
+3654,576660,173
+3655,576833,199
+3656,577032,152
+3657,577184,139
+3658,577323,193
+3659,577516,152
+3660,577668,142
+3661,577810,133
+3662,577943,177
+3663,578120,122
+3664,578242,154
+3665,578396,157
+3666,578553,152
+3667,578705,177
+3668,578882,140
+3669,579022,111
+3670,579133,143
+3671,579276,179
+3672,579455,138
+3673,579593,139
+3674,579732,166
+3675,579898,177
+3676,580075,132
+3677,580207,154
+3678,580361,208
+3679,580569,142
+3680,580711,197
+3681,580908,171
+3682,581079,144
+3683,581223,151
+3684,581374,125
+3685,581499,129
+3686,581628,177
+3687,581805,195
+3688,582000,173
+3689,582173,201
+3690,582374,176
+3691,582550,150
+3692,582700,157
+3693,582857,179
+3694,583036,149
+3695,583185,204
+3696,583389,134
+3697,583523,224
+3698,583747,129
+3699,583876,128
+3700,584004,193
+3701,584197,154
+3702,584351,163
+3703,584514,144
+3704,584658,120
+3705,584778,153
+3706,584931,205
+3707,585136,110
+3708,585246,143
+3709,585389,158
+3710,585547,117
+3711,585664,159
+3712,585823,139
+3713,585962,170
+3714,586132,159
+3715,586291,143
+3716,586434,143
+3717,586577,158
+3718,586735,149
+3719,586884,133
+3720,587017,129
+3721,587146,121
+3722,587267,170
+3723,587437,180
+3724,587617,132
+3725,587749,168
+3726,587917,201
+3727,588118,160
+3728,588278,158
+3729,588436,141
+3730,588577,189
+3731,588766,198
+3732,588964,166
+3733,589130,194
+3734,589324,195
+3735,589519,196
+3736,589715,181
+3737,589896,161
+3738,590057,186
+3739,590243,204
+3740,590447,124
+3741,590571,134
+3742,590705,180
+3743,590885,125
+3744,591010,184
+3745,591194,186
+3746,591380,169
+3747,591549,191
+3748,591740,140
+3749,591880,125
+3750,592005,161
+3751,592166,136
+3752,592302,218
+3753,592520,234
+3754,592754,152
+3755,592906,121
+3756,593027,190
+3757,593217,175
+3758,593392,192
+3759,593584,130
+3760,593714,140
+3761,593854,185
+3762,594039,151
+3763,594190,133
+3764,594323,205
+3765,594528,195
+3766,594723,174
+3767,594897,158
+3768,595055,138
+3769,595193,181
+3770,595374,177
+3771,595551,135
+3772,595686,146
+3773,595832,158
+3774,595990,190
+3775,596180,163
+3776,596343,144
+3777,596487,149
+3778,596636,158
+3779,596794,150
+3780,596944,136
+3781,597080,165
+3782,597245,197
+3783,597442,161
+3784,597603,137
+3785,597740,196
+3786,597936,138
+3787,598074,158
+3788,598232,146
+3789,598378,120
+3790,598498,134
+3791,598632,184
+3792,598816,162
+3793,598978,147
+3794,599125,155
+3795,599280,144
+3796,599424,141
+3797,599565,158
+3798,599723,143
+3799,599866,143
+3800,600009,147
+3801,600156,130
+3802,600286,185
+3803,600471,131
+3804,600602,185
+3805,600787,139
+3806,600926,142
+3807,601068,132
+3808,601200,162
+3809,601362,164
+3810,601526,152
+3811,601678,173
+3812,601851,175
+3813,602026,166
+3814,602192,137
+3815,602329,211
+3816,602540,232
+3817,602772,172
+3818,602944,192
+3819,603136,200
+3820,603336,118
+3821,603454,132
+3822,603586,137
+3823,603723,56
+3824,603779,130
+3825,603909,137
+3826,604046,168
+3827,604214,123
+3828,604337,196
+3829,604533,177
+3830,604710,201
+3831,604911,151
+3832,605062,173
+3833,605235,141
+3834,605376,222
+3835,605598,132
+3836,605730,145
+3837,605875,152
+3838,606027,159
+3839,606186,131
+3840,606317,152
+3841,606469,128
+3842,606597,180
+3843,606777,162
+3844,606939,132
+3845,607071,145
+3846,607216,144
+3847,607360,153
+3848,607513,120
+3849,607633,56
+3850,607689,147
+3851,607836,162
+3852,607998,144
+3853,608142,199
+3854,608341,173
+3855,608514,193
+3856,608707,128
+3857,608835,123
+3858,608958,138
+3859,609096,149
+3860,609245,199
+3861,609444,137
+3862,609581,211
+3863,609792,139
+3864,609931,168
+3865,610099,141
+3866,610240,140
+3867,610380,189
+3868,610569,176
+3869,610745,150
+3870,610895,271
+3871,611166,129
+3872,611295,159
+3873,611454,179
+3874,611633,142
+3875,611775,143
+3876,611918,143
+3877,612061,135
+3878,612196,146
+3879,612342,167
+3880,612509,149
+3881,612658,173
+3882,612831,164
+3883,612995,179
+3884,613174,146
+3885,613320,234
+3886,613554,208
+3887,613762,190
+3888,613952,175
+3889,614127,125
+3890,614252,171
+3891,614423,186
+3892,614609,143
+3893,614752,143
+3894,614895,164
+3895,615059,160
+3896,615219,146
+3897,615365,125
+3898,615490,150
+3899,615640,175
+3900,615815,141
+3901,615956,196
+3902,616152,149
+3903,616301,147
+3904,616448,175
+3905,616623,187
+3906,616810,120
+3907,616930,158
+3908,617088,132
+3909,617220,133
+3910,617353,118
+3911,617471,125
+3912,617596,171
+3913,617767,182
+3914,617949,172
+3915,618121,181
+3916,618302,144
+3917,618446,136
+3918,618582,126
+3919,618708,153
+3920,618861,171
+3921,619032,157
+3922,619189,169
+3923,619358,176
+3924,619534,173
+3925,619707,186
+3926,619893,150
+3927,620043,184
+3928,620227,185
+3929,620412,143
+3930,620555,138
+3931,620693,177
+3932,620870,181
+3933,621051,143
+3934,621194,111
+3935,621305,174
+3936,621479,158
+3937,621637,140
+3938,621777,151
+3939,621928,147
+3940,622075,144
+3941,622219,165
+3942,622384,126
+3943,622510,165
+3944,622675,197
+3945,622872,155
+3946,623027,144
+3947,623171,172
+3948,623343,128
+3949,623471,177
+3950,623648,101
+3951,623749,165
+3952,623914,153
+3953,624067,153
+3954,624220,133
+3955,624353,191
+3956,624544,145
+3957,624689,151
+3958,624840,165
+3959,625005,172
+3960,625177,146
+3961,625323,209
+3962,625532,218
+3963,625750,147
+3964,625897,198
+3965,626095,132
+3966,626227,193
+3967,626420,195
+3968,626615,199
+3969,626814,154
+3970,626968,153
+3971,627121,166
+3972,627287,158
+3973,627445,178
+3974,627623,158
+3975,627781,155
+3976,627936,131
+3977,628067,214
+3978,628281,162
+3979,628443,160
+3980,628603,164
+3981,628767,141
+3982,628908,182
+3983,629090,143
+3984,629233,143
+3985,629376,158
+3986,629534,143
+3987,629677,124
+3988,629801,117
+3989,629918,207
+3990,630125,150
+3991,630275,148
+3992,630423,163
+3993,630586,199
+3994,630785,140
+3995,630925,152
+3996,631077,140
+3997,631217,183
+3998,631400,153
+3999,631553,132
+4000,631685,187
+4001,631872,190
+4002,632062,157
+4003,632219,184
+4004,632403,153
+4005,632556,151
+4006,632707,148
+4007,632855,161
+4008,633016,149
+4009,633165,123
+4010,633288,140
+4011,633428,199
+4012,633627,136
+4013,633763,151
+4014,633914,163
+4015,634077,136
+4016,634213,164
+4017,634377,151
+4018,634528,225
+4019,634753,159
+4020,634912,161
+4021,635073,139
+4022,635212,160
+4023,635372,149
+4024,635521,160
+4025,635681,141
+4026,635822,115
+4027,635937,195
+4028,636132,180
+4029,636312,155
+4030,636467,151
+4031,636618,127
+4032,636745,110
+4033,636855,131
+4034,636986,145
+4035,637131,170
+4036,637301,132
+4037,637433,148
+4038,637581,136
+4039,637717,147
+4040,637864,157
+4041,638021,119
+4042,638140,165
+4043,638305,176
+4044,638481,152
+4045,638633,144
+4046,638777,174
+4047,638951,158
+4048,639109,123
+4049,639232,205
+4050,639437,153
+4051,639590,138
+4052,639728,159
+4053,639887,131
+4054,640018,173
+4055,640191,141
+4056,640332,131
+4057,640463,162
+4058,640625,145
+4059,640770,144
+4060,640914,168
+4061,641082,122
+4062,641204,170
+4063,641374,176
+4064,641550,209
+4065,641759,239
+4066,641998,249
+4067,642247,148
+4068,642395,176
+4069,642571,164
+4070,642735,160
+4071,642895,166
+4072,643061,144
+4073,643205,161
+4074,643366,196
+4075,643562,147
+4076,643709,112
+4077,643821,185
+4078,644006,162
+4079,644168,166
+4080,644334,124
+4081,644458,140
+4082,644598,156
+4083,644754,211
+4084,644965,150
+4085,645115,169
+4086,645284,184
+4087,645468,143
+4088,645611,145
+4089,645756,187
+4090,645943,147
+4091,646090,167
+4092,646257,153
+4093,646410,170
+4094,646580,185
+4095,646765,125
+4096,646890,181
+4097,647071,149
+4098,647220,126
+4099,647346,145
+4100,647491,164
+4101,647655,141
+4102,647796,163
+4103,647959,158
+4104,648117,176
+4105,648293,139
+4106,648432,183
+4107,648615,157
+4108,648772,130
+4109,648902,154
+4110,649056,154
+4111,649210,151
+4112,649361,148
+4113,649509,150
+4114,649659,156
+4115,649815,144
+4116,649959,150
+4117,650109,117
+4118,650226,139
+4119,650365,135
+4120,650500,169
+4121,650669,167
+4122,650836,144
+4123,650980,160
+4124,651140,167
+4125,651307,200
+4126,651507,197
+4127,651704,148
+4128,651852,163
+4129,652015,171
+4130,652186,157
+4131,652343,177
+4132,652520,168
+4133,652688,131
+4134,652819,171
+4135,652990,160
+4136,653150,166
+4137,653316,150
+4138,653466,153
+4139,653619,191
+4140,653810,126
+4141,653936,155
+4142,654091,209
+4143,654300,148
+4144,654448,127
+4145,654575,178
+4146,654753,145
+4147,654898,166
+4148,655064,136
+4149,655200,211
+4150,655411,165
+4151,655576,186
+4152,655762,174
+4153,655936,136
+4154,656072,140
+4155,656212,152
+4156,656364,153
+4157,656517,123
+4158,656640,156
+4159,656796,162
+4160,656958,168
+4161,657126,153
+4162,657279,154
+4163,657433,133
+4164,657566,201
+4165,657767,166
+4166,657933,148
+4167,658081,158
+4168,658239,156
+4169,658395,132
+4170,658527,159
+4171,658686,161
+4172,658847,143
+4173,658990,195
+4174,659185,133
+4175,659318,154
+4176,659472,137
+4177,659609,144
+4178,659753,156
+4179,659909,161
+4180,660070,150
+4181,660220,176
+4182,660396,148
+4183,660544,149
+4184,660693,156
+4185,660849,152
+4186,661001,162
+4187,661163,129
+4188,661292,188
+4189,661480,133
+4190,661613,165
+4191,661778,125
+4192,661903,177
+4193,662080,166
+4194,662246,140
+4195,662386,166
+4196,662552,134
+4197,662686,142
+4198,662828,171
+4199,662999,168
+4200,663167,155
+4201,663322,171
+4202,663493,166
+4203,663659,143
+4204,663802,127
+4205,663929,165
+4206,664094,128
+4207,664222,158
+4208,664380,158
+4209,664538,110
+4210,664648,165
+4211,664813,152
+4212,664965,182
+4213,665147,144
+4214,665291,119
+4215,665410,152
+4216,665562,167
+4217,665729,148
+4218,665877,139
+4219,666016,153
+4220,666169,134
+4221,666303,177
+4222,666480,148
+4223,666628,153
+4224,666781,155
+4225,666936,125
+4226,667061,158
+4227,667219,171
+4228,667390,138
+4229,667528,165
+4230,667693,149
+4231,667842,183
+4232,668025,159
+4233,668184,123
+4234,668307,144
+4235,668451,155
+4236,668606,222
+4237,668828,175
+4238,669003,205
+4239,669208,130
+4240,669338,131
+4241,669469,136
+4242,669605,152
+4243,669757,147
+4244,669904,198
+4245,670102,142
+4246,670244,157
+4247,670401,205
+4248,670606,157
+4249,670763,162
+4250,670925,110
+4251,671035,143
+4252,671178,155
+4253,671333,153
+4254,671486,121
+4255,671607,120
+4256,671727,182
+4257,671909,170
+4258,672079,121
+4259,672200,138
+4260,672338,130
+4261,672468,181
+4262,672649,150
+4263,672799,170
+4264,672969,172
+4265,673141,141
+4266,673282,138
+4267,673420,146
+4268,673566,159
+4269,673725,151
+4270,673876,159
+4271,674035,152
+4272,674187,169
+4273,674356,139
+4274,674495,153
+4275,674648,182
+4276,674830,146
+4277,674976,210
+4278,675186,161
+4279,675347,167
+4280,675514,154
+4281,675668,134
+4282,675802,164
+4283,675966,200
+4284,676166,138
+4285,676304,190
+4286,676494,133
+4287,676627,141
+4288,676768,127
+4289,676895,147
+4290,677042,150
+4291,677192,151
+4292,677343,186
+4293,677529,159
+4294,677688,148
+4295,677836,163
+4296,677999,219
+4297,678218,216
+4298,678434,146
+4299,678580,158
+4300,678738,169
+4301,678907,132
+4302,679039,167
+4303,679206,158
+4304,679364,113
+4305,679477,157
+4306,679634,152
+4307,679786,140
+4308,679926,161
+4309,680087,176
+4310,680263,140
+4311,680403,167
+4312,680570,135
+4313,680705,154
+4314,680859,158
+4315,681017,156
+4316,681173,197
+4317,681370,176
+4318,681546,182
+4319,681728,180
+4320,681908,154
+4321,682062,128
+4322,682190,134
+4323,682324,153
+4324,682477,133
+4325,682610,145
+4326,682755,174
+4327,682929,143
+4328,683072,154
+4329,683226,162
+4330,683388,140
+4331,683528,151
+4332,683679,129
+4333,683808,179
+4334,683987,144
+4335,684131,157
+4337,684288,144
+4338,684432,135
+4339,684567,207
+4340,684774,166
+4341,684940,143
+4342,685083,150
+4343,685233,147
+4344,685380,139
+4345,685519,145
+4346,685664,136
+4347,685800,195
+4348,685995,157
+4349,686152,111
+4350,686263,199
+4351,686462,150
+4352,686612,144
+4353,686756,182
+4354,686938,170
+4355,687108,143
+4356,687251,158
+4357,687409,198
+4358,687607,138
+4359,687745,154
+4360,687899,164
+4361,688063,173
+4362,688236,153
+4363,688389,155
+4364,688544,176
+4365,688720,156
+4366,688876,167
+4367,689043,165
+4368,689208,165
+4369,689373,142
+4370,689515,133
+4371,689648,135
+4372,689783,197
+4373,689980,177
+4374,690157,143
+4375,690300,107
+4376,690407,180
+4377,690587,144
+4378,690731,132
+4379,690863,198
+4380,691061,159
+4381,691220,174
+4382,691394,233
+4383,691627,140
+4384,691767,143
+4385,691910,143
+4386,692053,177
+4387,692230,152
+4388,692382,133
+4389,692515,176
+4390,692691,134
+4391,692825,122
+4392,692947,119
+4393,693066,151
+4394,693217,121
+4395,693338,119
+4396,693457,122
+4397,693579,201
+4398,693780,132
+4399,693912,161
+4400,694073,216
+4401,694289,176
+4402,694465,166
+4403,694631,139
+4404,694770,148
+4405,694918,158
+4406,695076,167
+4407,695243,159
+4408,695402,131
+4409,695533,178
+4410,695711,166
+4411,695877,189
+4412,696066,131
+4413,696197,189
+4414,696386,149
+4415,696535,114
+4416,696649,134
+4417,696783,195
+4418,696978,165
+4419,697143,139
+4420,697282,165
+4421,697447,155
+4422,697602,141
+4423,697743,162
+4424,697905,152
+4425,698057,130
+4426,698187,198
+4427,698385,169
+4428,698554,161
+4429,698715,166
+4430,698881,146
+4431,699027,166
+4432,699193,150
+4433,699343,122
+4434,699465,145
+4435,699610,146
+4436,699756,197
+4437,699953,144
+4438,700097,161
+4439,700258,155
+4440,700413,144
+4441,700557,151
+4442,700708,138
+4443,700846,212
+4444,701058,127
+4445,701185,127
+4446,701312,164
+4447,701476,198
+4448,701674,180
+4449,701854,149
+4450,702003,151
+4451,702154,173
+4452,702327,182
+4453,702509,132
+4454,702641,187
+4455,702828,226
+4456,703054,130
+4457,703184,151
+4458,703335,152
+4459,703487,224
+4460,703711,177
+4461,703888,153
+4462,704041,159
+4463,704200,178
+4464,704378,120
+4465,704498,204
+4466,704702,185
+4467,704887,162
+4468,705049,157
+4469,705206,139
+4470,705345,174
+4471,705519,156
+4472,705675,168
+4473,705843,215
+4474,706058,192
+4475,706250,144
+4476,706394,109
+4477,706503,158
+4478,706661,139
+4479,706800,206
+4480,707006,132
+4481,707138,195
+4482,707333,162
+4483,707495,147
+4484,707642,150
+4485,707792,159
+4486,707951,144
+4487,708095,149
+4488,708244,124
+4489,708368,128
+4490,708496,211
+4491,708707,193
+4492,708900,186
+4493,709086,184
+4494,709270,169
+4495,709439,167
+4496,709606,167
+4497,709773,177
+4498,709950,143
+4499,710093,143
+4500,710236,195
+4501,710431,175
+4502,710606,168
+4503,710774,206
+4504,710980,195
+4505,711175,123
+4506,711298,123
+4507,711421,170
+4508,711591,140
+4509,711731,187
+4510,711918,162
+4511,712080,132
+4512,712212,163
+4513,712375,187
+4514,712562,168
+4515,712730,189
+4516,712919,195
+4517,713114,176
+4518,713290,134
+4519,713424,178
+4520,713602,160
+4521,713762,188
+4522,713950,196
+4523,714146,196
+4524,714342,149
+4525,714491,153
+4526,714644,132
+4527,714776,164
+4528,714940,144
+4529,715084,193
+4530,715277,182
+4531,715459,154
+4532,715613,133
+4533,715746,235
+4534,715981,177
+4535,716158,143
+4536,716301,176
+4537,716477,149
+4538,716626,144
+4539,716770,143
+4540,716913,143
+4541,717056,164
+4542,717220,168
+4543,717388,128
+4544,717516,185
+4545,717701,151
+4546,717852,204
+4547,718056,205
+4548,718261,207
+4549,718468,152
+4550,718620,147
+4551,718767,163
+4552,718930,164
+4553,719094,134
+4554,719228,155
+4555,719383,115
+4556,719498,194
+4557,719692,140
+4558,719832,170
+4559,720002,146
+4560,720148,124
+4561,720272,147
+4562,720419,162
+4563,720581,156
+4564,720737,146
+4565,720883,329
+4566,721212,130
+4567,721342,130
+4568,721472,161
+4569,721633,112
+4570,721745,192
+4571,721937,158
+4572,722095,119
+4573,722214,185
+4574,722399,152
+4575,722551,148
+4576,722699,173
+4577,722872,149
+4578,723021,191
+4579,723212,139
+4580,723351,146
+4581,723497,200
+4582,723697,173
+4583,723870,189
+4584,724059,111
+4585,724170,175
+4586,724345,146
+4587,724491,152
+4588,724643,136
+4589,724779,155
+4590,724934,128
+4591,725062,149
+4592,725211,166
+4593,725377,156
+4594,725533,197
+4595,725730,169
+4596,725899,163
+4597,726062,172
+4598,726234,206
+4599,726440,199
+4600,726639,128
+4601,726767,144
+4602,726911,147
+4603,727058,171
+4604,727229,182
+4605,727411,127
+4606,727538,195
+4607,727733,211
+4608,727944,127
+4609,728071,127
+4610,728198,204
+4611,728402,151
+4612,728553,139
+4613,728692,186
+4614,728878,146
+4615,729024,202
+4616,729226,153
+4617,729379,113
+4618,729492,161
+4619,729653,179
+4620,729832,151
+4621,729983,228
+4622,730211,144
+4623,730355,127
+4624,730482,147
+4625,730629,173
+4626,730802,159
+4627,730961,122
+4628,731083,145
+4629,731228,164
+4630,731392,175
+4631,731567,136
+4632,731703,165
+4633,731868,184
+4634,732052,163
+4635,732215,141
+4636,732356,119
+4637,732475,161
+4638,732636,156
+4639,732792,129
+4640,732921,131
+4641,733052,152
+4642,733204,171
+4643,733375,123
+4644,733498,140
+4645,733638,132
+4646,733770,177
+4647,733947,167
+4648,734114,128
+4649,734242,216
+4650,734458,190
+4651,734648,149
+4652,734797,143
+4653,734940,149
+4654,735089,171
+4655,735260,172
+4656,735432,233
+4657,735665,176
+4658,735841,158
+4659,735999,159
+4660,736158,123
+4661,736281,143
+4662,736424,143
+4663,736567,154
+4664,736721,188
+4665,736909,171
+4666,737080,198
+4667,737278,122
+4668,737400,154
+4669,737554,200
+4670,737754,190
+4671,737944,122
+4672,738066,164
+4673,738230,182
+4674,738412,130
+4675,738542,127
+4676,738669,127
+4677,738796,165
+4678,738961,180
+4679,739141,179
+4680,739320,153
+4681,739473,137
+4682,739610,164
+4683,739774,158
+4684,739932,161
+4685,740093,120
+4686,740213,179
+4687,740392,155
+4688,740547,175
+4689,740722,106
+4690,740828,135
+4691,740963,114
+4692,741077,209
+4693,741286,173
+4694,741459,162
+4695,741621,223
+4696,741844,131
+4697,741975,162
+4698,742137,159
+4699,742296,184
+4700,742480,164
+4701,742644,190
+4702,742834,107
+4703,742941,165
+4704,743106,152
+4705,743258,145
+4706,743403,132
+4707,743535,162
+4708,743697,142
+4709,743839,160
+4710,743999,165
+4711,744164,184
+4712,744348,129
+4713,744477,176
+4714,744653,169
+4715,744822,192
+4716,745014,118
+4717,745132,176
+4718,745308,177
+4719,745485,198
+4720,745683,145
+4721,745828,158
+4722,745986,134
+4723,746120,130
+4724,746250,123
+4725,746373,151
+4726,746524,171
+4727,746695,193
+4728,746888,149
+4729,747037,159
+4730,747196,167
+4731,747363,195
+4732,747558,121
+4733,747679,138
+4734,747817,178
+4735,747995,127
+4736,748122,127
+4737,748249,129
+4738,748378,134
+4739,748512,144
+4740,748656,113
+4741,748769,190
+4742,748959,146
+4743,749105,202
+4744,749307,131
+4745,749438,173
+4746,749611,152
+4747,749763,150
+4748,749913,143
+4749,750056,141
+4750,750197,119
+4751,750316,108
+4752,750424,169
+4753,750593,148
+4754,750741,144
+4755,750885,134
+4756,751019,160
+4757,751179,136
+4758,751315,114
+4759,751429,141
+4760,751570,220
+4761,751790,173
+4762,751963,146
+4763,752109,177
+4764,752286,151
+4765,752437,222
+4766,752659,223
+4767,752882,154
+4768,753036,185
+4769,753221,205
+4770,753426,114
+4771,753540,169
+4772,753709,146
+4773,753855,138
+4774,753993,148
+4775,754141,153
+4776,754294,121
+4777,754415,176
+4778,754591,125
+4779,754716,136
+4780,754852,184
+4781,755036,126
+4782,755162,157
+4783,755319,147
+4784,755466,150
+4785,755616,162
+4786,755778,129
+4787,755907,204
+4788,756111,141
+4789,756252,130
+4790,756382,185
+4791,756567,124
+4792,756691,131
+4793,756822,214
+4794,757036,143
+4795,757179,227
+4796,757406,139
+4797,757545,206
+4798,757751,168
+4799,757919,216
+4800,758135,147
+4801,758282,161
+4802,758443,205
+4803,758648,135
+4804,758783,148
+4805,758931,212
+4806,759143,151
+4807,759294,199
+4808,759493,151
+4809,759644,132
+4810,759776,131
+4811,759907,141
+4812,760048,169
+4813,760217,111
+4814,760328,178
+4815,760506,206
+4816,760712,151
+4817,760863,162
+4818,761025,153
+4819,761178,162
+4820,761340,174
+4821,761514,162
+4822,761676,169
+4823,761845,153
+4824,761998,209
+4825,762207,143
+4826,762350,143
+4827,762493,180
+4828,762673,173
+4829,762846,228
+4830,763074,151
+4831,763225,146
+4832,763371,126
+4833,763497,149
+4834,763646,177
+4835,763823,135
+4836,763958,180
+4837,764138,142
+4838,764280,181
+4839,764461,226
+4840,764687,127
+4841,764814,159
+4842,764973,121
+4843,765094,139
+4844,765233,141
+4845,765374,161
+4846,765535,170
+4847,765705,133
+4848,765838,160
+4849,765998,116
+4850,766114,154
+4851,766268,127
+4852,766395,186
+4853,766581,125
+4854,766706,133
+4855,766839,251
+4856,767090,154
+4857,767244,151
+4858,767395,145
+4859,767540,175
+4860,767715,192
+4861,767907,135
+4862,768042,257
+4863,768299,152
+4864,768451,151
+4865,768602,130
+4866,768732,160
+4867,768892,158
+4868,769050,185
+4869,769235,123
+4870,769358,151
+4871,769509,172
+4872,769681,143
+4873,769824,170
+4874,769994,126
+4875,770120,131
+4876,770251,176
+4877,770427,129
+4878,770556,210
+4879,770766,199
+4880,770965,132
+4881,771097,159
+4882,771256,150
+4883,771406,183
+4884,771589,165
+4885,771754,180
+4886,771934,137
+4887,772071,143
+4888,772214,240
+4889,772454,143
+4890,772597,143
+4891,772740,189
+4892,772929,146
+4893,773075,160
+4894,773235,168
+4895,773403,138
+4896,773541,160
+4897,773701,153
+4898,773854,159
+4899,774013,153
+4900,774166,164
+4901,774330,158
+4902,774488,157
+4903,774645,149
+4904,774794,156
+4905,774950,186
+4906,775136,169
+4907,775305,147
+4908,775452,142
+4909,775594,179
+4910,775773,168
+4911,775941,170
+4912,776111,152
+4913,776263,126
+4914,776389,250
+4915,776639,180
+4916,776819,135
+4917,776954,146
+4918,777100,208
+4919,777308,184
+4920,777492,121
+4921,777613,125
+4922,777738,142
+4923,777880,205
+4924,778085,162
+4925,778247,140
+4926,778387,145
+4927,778532,164
+4928,778696,127
+4929,778823,209
+4930,779032,139
+4931,779171,203
+4932,779374,159
+4933,779533,152
+4934,779685,168
+4935,779853,155
+4936,780008,216
+4937,780224,198
+4938,780422,120
+4939,780542,170
+4940,780712,197
+4941,780909,134
+4942,781043,179
+4943,781222,187
+4944,781409,165
+4945,781574,152
+4946,781726,130
+4947,781856,156
+4948,782012,164
+4949,782176,180
+4950,782356,156
+4951,782512,246
+4952,782758,158
+4953,782916,164
+4954,783080,184
+4955,783264,148
+4956,783412,169
+4957,783581,160
+4958,783741,115
+4959,783856,143
+4960,783999,143
+4961,784142,181
+4962,784323,198
+4963,784521,148
+4964,784669,184
+4965,784853,126
+4966,784979,158
+4967,785137,176
+4968,785313,137
+4969,785450,149
+4970,785599,158
+4971,785757,148
+4972,785905,119
+4973,786024,134
+4974,786158,170
+4975,786328,159
+4976,786487,132
+4977,786619,132
+4978,786751,123
+4979,786874,216
+4980,787090,173
+4981,787263,165
+4982,787428,138
+4983,787566,219
+4984,787785,184
+4985,787969,217
+4986,788186,182
+4987,788368,177
+4988,788545,174
+4989,788719,136
+4990,788855,165
+4991,789020,143
+4992,789163,143
+4993,789306,165
+4994,789471,175
+4995,789646,252
+4996,789898,162
+4997,790060,187
+4998,790247,149
+4999,790396,136
+5000,790532,152
+5001,790684,170
+5002,790854,211
+5003,791065,162
+5004,791227,173
+5005,791400,142
+5006,791542,137
+5007,791679,186
+5008,791865,186
+5009,792051,167
+5010,792218,154
+5011,792372,174
+5012,792546,194
+5013,792740,121
+5014,792861,165
+5015,793026,144
+5016,793170,171
+5017,793341,138
+5018,793479,163
+5019,793642,128
+5020,793770,180
+5021,793950,178
+5022,794128,163
+5023,794291,181
+5024,794472,145
+5025,794617,147
+5026,794764,142
+5027,794906,150
+5028,795056,143
+5029,795199,156
+5030,795355,110
+5031,795465,156
+5032,795621,163
+5033,795784,160
+5034,795944,153
+5035,796097,138
+5036,796235,205
+5037,796440,155
+5038,796595,161
+5039,796756,158
+5040,796914,129
+5041,797043,197
+5042,797240,164
+5043,797404,238
+5044,797642,137
+5045,797779,139
+5046,797918,156
+5047,798074,140
+5048,798214,203
+5049,798417,105
+5050,798522,157
+5051,798679,165
+5052,798844,157
+5053,799001,149
+5054,799150,150
+5055,799300,180
+5056,799480,166
+5057,799646,161
+5058,799807,150
+5059,799957,143
+5060,800100,143
+5061,800243,187
+5062,800430,148
+5063,800578,133
+5064,800711,159
+5065,800870,210
+5066,801080,174
+5067,801254,138
+5068,801392,152
+5069,801544,154
+5070,801698,154
+5071,801852,162
+5072,802014,134
+5073,802148,125
+5074,802273,146
+5075,802419,197
+5076,802616,186
+5077,802802,121
+5078,802923,165
+5079,803088,160
+5080,803248,151
+5081,803399,175
+5082,803574,153
+5083,803727,151
+5084,803878,141
+5085,804019,151
+5086,804170,142
+5087,804312,139
+5088,804451,163
+5089,804614,112
+5090,804726,168
+5091,804894,183
+5092,805077,177
+5093,805254,161
+5094,805415,128
+5095,805543,143
+5096,805686,154
+5097,805840,131
+5098,805971,117
+5099,806088,164
+5100,806252,137
+5101,806389,148
+5102,806537,135
+5103,806672,194
+5104,806866,163
+5105,807029,214
+5106,807243,120
+5107,807363,192
+5108,807555,182
+5109,807737,155
+5110,807892,118
+5111,808010,130
+5112,808140,186
+5113,808326,141
+5114,808467,176
+5115,808643,146
+5116,808789,145
+5117,808934,132
+5118,809066,197
+5119,809263,151
+5120,809414,196
+5121,809610,202
+5122,809812,123
+5123,809935,137
+5124,810072,132
+5125,810204,198
+5126,810402,119
+5127,810521,179
+5128,810700,154
+5129,810854,168
+5130,811022,188
+5131,811210,215
+5132,811425,190
+5133,811615,126
+5134,811741,126
+5135,811867,234
+5136,812101,160
+5137,812261,176
+5138,812437,136
+5139,812573,227
+5140,812800,168
+5141,812968,155
+5142,813123,145
+5143,813268,172
+5144,813440,156
+5145,813596,119
+5146,813715,138
+5147,813853,143
+5148,813996,143
+5149,814139,152
+5150,814291,146
+5151,814437,225
+5152,814662,204
+5153,814866,209
+5154,815075,123
+5155,815198,147
+5156,815345,187
+5157,815532,161
+5158,815693,150
+5159,815843,126
+5160,815969,131
+5161,816100,191
+5162,816291,213
+5163,816504,194
+5164,816698,168
+5165,816866,118
+5166,816984,134
+5167,817118,148
+5168,817266,164
+5169,817430,145
+5170,817575,172
+5171,817747,192
+5172,817939,151
+5173,818090,178
+5174,818268,140
+5175,818408,155
+5176,818563,159
+5177,818722,183
+5178,818905,149
+5179,819054,148
+5180,819202,171
+5181,819373,153
+5182,819526,163
+5183,819689,202
+5184,819891,156
+5185,820047,223
+5186,820270,138
+5187,820408,161
+5188,820569,141
+5189,820710,160
+5190,820870,156
+5191,821026,211
+5192,821237,203
+5193,821440,175
+5194,821615,207
+5195,821822,141
+5196,821963,159
+5197,822122,148
+5198,822270,122
+5199,822392,154
+5200,822546,169
+5201,822715,155
+5202,822870,146
+5203,823016,210
+5204,823226,145
+5205,823371,175
+5206,823546,135
+5207,823681,110
+5208,823791,127
+5209,823918,192
+5210,824110,125
+5211,824235,139
+5212,824374,137
+5213,824511,156
+5214,824667,129
+5215,824796,162
+5216,824958,157
+5217,825115,144
+5218,825259,184
+5219,825443,117
+5220,825560,132
+5221,825692,121
+5222,825813,142
+5223,825955,151
+5224,826106,179
+5225,826285,143
+5226,826428,143
+5227,826571,136
+5228,826707,141
+5229,826848,139
+5230,826987,145
+5231,827132,133
+5232,827265,150
+5233,827415,196
+5234,827611,217
+5235,827828,121
+5236,827949,138
+5237,828087,147
+5238,828234,191
+5239,828425,122
+5240,828547,220
+5241,828767,168
+5242,828935,139
+5243,829074,134
+5244,829208,176
+5245,829384,175
+5246,829559,141
+5247,829700,154
+5248,829854,204
+5249,830058,126
+5250,830184,135
+5251,830319,145
+5252,830464,187
+5253,830651,141
+5254,830792,167
+5255,830959,166
+5256,831125,118
+5257,831243,151
+5258,831394,141
+5259,831535,168
+5260,831703,153
+5261,831856,172
+5262,832028,143
+5263,832171,182
+5264,832353,142
+5265,832495,141
+5266,832636,200
+5267,832836,149
+5268,832985,112
+5269,833097,133
+5270,833230,142
+5271,833372,219
+5272,833591,199
+5273,833790,148
+5274,833938,184
+5275,834122,179
+5276,834301,121
+5277,834422,146
+5278,834568,183
+5279,834751,181
+5280,834932,156
+5281,835088,200
+5282,835288,167
+5283,835455,139
+5284,835594,213
+5285,835807,201
+5286,836008,159
+5287,836167,130
+5288,836297,143
+5289,836440,143
+5290,836583,134
+5291,836717,203
+5292,836920,139
+5293,837059,162
+5294,837221,181
+5295,837402,128
+5296,837530,157
+5297,837687,111
+5298,837798,180
+5299,837978,157
+5300,838135,195
+5301,838330,144
+5302,838474,167
+5303,838641,178
+5304,838819,126
+5305,838945,150
+5306,839095,170
+5307,839265,168
+5308,839433,205
+5309,839638,139
+5310,839777,212
+5311,839989,134
+5312,840123,174
+5313,840297,165
+5314,840462,151
+5315,840613,147
+5316,840760,195
+5317,840955,161
+5318,841116,153
+5319,841269,126
+5320,841395,168
+5321,841563,179
+5322,841742,179
+5323,841921,173
+5324,842094,133
+5325,842227,193
+5326,842420,157
+5327,842577,122
+5328,842699,135
+5329,842834,167
+5330,843001,139
+5331,843140,138
+5332,843278,165
+5333,843443,298
+5334,843741,209
+5335,843950,191
+5336,844141,118
+5337,844259,152
+5338,844411,204
+5339,844615,159
+5340,844774,197
+5341,844971,149
+5342,845120,146
+5343,845266,157
+5344,845423,159
+5345,845582,134
+5346,845716,148
+5347,845864,135
+5348,845999,166
+5349,846165,162
+5350,846327,141
+5351,846468,163
+5352,846631,132
+5353,846763,185
+5354,846948,204
+5355,847152,160
+5356,847312,160
+5357,847472,151
+5358,847623,180
+5359,847803,156
+5360,847959,157
+5361,848116,143
+5362,848259,143
+5363,848402,155
+5364,848557,157
+5365,848714,154
+5366,848868,156
+5367,849024,143
+5368,849167,166
+5369,849333,135
+5370,849468,135
+5371,849603,150
+5372,849753,148
+5373,849901,192
+5374,850093,180
+5375,850273,159
+5376,850432,160
+5377,850592,114
+5378,850706,111
+5379,850817,140
+5380,850957,171
+5381,851128,159
+5382,851287,136
+5383,851423,184
+5384,851607,204
+5385,851811,201
+5386,852012,146
+5387,852158,201
+5388,852359,107
+5389,852466,160
+5390,852626,216
+5391,852842,161
+5392,853003,175
+5393,853178,143
+5394,853321,182
+5395,853503,99
+5396,853602,190
+5397,853792,132
+5398,853924,185
+5399,854109,159
+5400,854268,222
+5401,854490,158
+5402,854648,165
+5403,854813,144
+5404,854957,183
+5405,855140,218
+5406,855358,246
+5407,855604,235
+5408,855839,117
+5409,855956,120
+5410,856076,114
+5411,856190,173
+5412,856363,133
+5413,856496,163
+5414,856659,156
+5415,856815,135
+5416,856950,196
+5417,857146,195
+5418,857341,115
+5419,857456,143
+5420,857599,143
+5421,857742,149
+5422,857891,157
+5423,858048,132
+5424,858180,140
+5425,858320,152
+5426,858472,170
+5427,858642,159
+5428,858801,207
+5429,859008,108
+5430,859116,203
+5431,859319,155
+5432,859474,141
+5433,859615,152
+5434,859767,214
+5435,859981,184
+5436,860165,219
+5437,860384,188
+5438,860572,124
+5439,860696,162
+5440,860858,126
+5441,860984,187
+5442,861171,144
+5443,861315,180
+5444,861495,120
+5445,861615,175
+5446,861790,195
+5447,861985,173
+5448,862158,156
+5449,862314,182
+5450,862496,214
+5451,862710,209
+5452,862919,145
+5453,863064,174
+5454,863238,124
+5455,863362,183
+5456,863545,195
+5457,863740,175
+5458,863915,147
+5459,864062,140
+5460,864202,135
+5461,864337,126
+5462,864463,157
+5463,864620,110
+5464,864730,184
+5465,864914,166
+5466,865080,188
+5467,865268,179
+5468,865447,131
+5469,865578,151
+5470,865729,130
+5471,865859,133
+5472,865992,159
+5473,866151,160
+5474,866311,143
+5475,866454,143
+5476,866597,182
+5477,866779,219
+5478,866998,198
+5479,867196,127
+5480,867323,144
+5481,867467,131
+5482,867598,226
+5483,867824,162
+5484,867986,186
+5485,868172,151
+5486,868323,193
+5487,868516,162
+5488,868678,216
+5489,868894,136
+5490,869030,152
+5491,869182,187
+5492,869369,161
+5493,869530,162
+5494,869692,167
+5495,869859,159
+5496,870018,161
+5497,870179,163
+5498,870342,121
+5499,870463,168
+5500,870631,156
+5501,870787,174
+5502,870961,151
+5503,871112,241
+5504,871353,181
+5505,871534,155
+5506,871689,142
+5507,871831,144
+5508,871975,147
+5509,872122,202
+5510,872324,220
+5511,872544,160
+5512,872704,208
+5513,872912,187
+5514,873099,192
+5515,873291,163
+5516,873454,112
+5517,873566,133
+5518,873699,159
+5519,873858,202
+5520,874060,142
+5521,874202,123
+5522,874325,191
+5523,874516,164
+5524,874680,197
+5525,874877,163
+5526,875040,159
+5527,875199,168
+5528,875367,116
+5529,875483,185
+5530,875668,132
+5531,875800,126
+5532,875926,177
+5533,876103,166
+5534,876269,213
+5535,876482,132
+5536,876614,132
+5537,876746,127
+5538,876873,159
+5539,877032,159
+5540,877191,159
+5541,877350,168
+5542,877518,207
+5543,877725,117
+5544,877842,166
+5545,878008,179
+5546,878187,192
+5547,878379,145
+5548,878524,132
+5549,878656,157
+5550,878813,149
+5551,878962,183
+5552,879145,178
+5553,879323,137
+5554,879460,184
+5555,879644,114
+5556,879758,158
+5557,879916,157
+5558,880073,157
+5559,880230,109
+5560,880339,107
+5561,880446,182
+5562,880628,120
+5563,880748,146
+5564,880894,112
+5565,881006,190
+5566,881196,122
+5567,881318,130
+5568,881448,213
+5569,881661,180
+5570,881841,118
+5571,881959,133
+5572,882092,175
+5573,882267,121
+5574,882388,143
+5575,882531,143
+5576,882674,117
+5577,882791,152
+5578,882943,147
+5579,883090,183
+5580,883273,174
+5581,883447,193
+5582,883640,159
+5583,883799,159
+5584,883958,159
+5585,884117,141
+5586,884258,166
+5587,884424,193
+5588,884617,115
+5589,884732,124
+5590,884856,123
+5591,884979,168
+5592,885147,145
+5593,885292,129
+5594,885421,127
+5595,885548,142
+5596,885690,162
+5597,885852,208
+5598,886060,134
+5599,886194,125
+5600,886319,145
+5601,886464,174
+5602,886638,146
+5603,886784,180
+5604,886964,143
+5605,887107,177
+5606,887284,187
+5607,887471,130
+5608,887601,126
+5609,887727,168
+5610,887895,165
+5611,888060,195
+5612,888255,151
+5613,888406,158
+5614,888564,160
+5615,888724,150
+5616,888874,127
+5617,889001,210
+5618,889211,182
+5619,889393,119
+5620,889512,119
+5621,889631,158
+5622,889789,186
+5623,889975,176
+5624,890151,198
+5625,890349,143
+5626,890492,143
+5627,890635,181
+5628,890816,145
+5629,890961,177
+5630,891138,144
+5631,891282,173
+5632,891455,174
+5633,891629,139
+5634,891768,214
+5635,891982,160
+5636,892142,132
+5637,892274,162
+5638,892436,136
+5639,892572,153
+5640,892725,186
+5641,892911,206
+5642,893117,136
+5643,893253,138
+5644,893391,177
+5645,893568,158
+5646,893726,171
+5647,893897,141
+5648,894038,144
+5649,894182,126
+5650,894308,164
+5651,894472,180
+5652,894652,145
+5653,894797,157
+5654,894954,205
+5655,895159,135
+5656,895294,164
+5657,895458,192
+5658,895650,122
+5659,895772,158
+5660,895930,116
+5661,896046,193
+5662,896239,134
+5663,896373,174
+5664,896547,170
+5665,896717,128
+5666,896845,142
+5667,896987,132
+5668,897119,142
+5669,897261,143
+5670,897404,132
+5671,897536,168
+5672,897704,223
+5673,897927,127
+5674,898054,172
+5675,898226,158
+5676,898384,121
+5677,898505,192
+5678,898697,222
+5679,898919,124
+5680,899043,158
+5681,899201,185
+5682,899386,192
+5683,899578,176
+5684,899754,167
+5685,899921,159
+5686,900080,178
+5687,900258,118
+5688,900376,169
+5689,900545,169
+5690,900714,176
+5691,900890,167
+5692,901057,137
+5693,901194,209
+5694,901403,146
+5695,901549,184
+5696,901733,208
+5697,901941,143
+5698,902084,138
+5699,902222,155
+5700,902377,178
+5701,902555,152
+5702,902707,143
+5703,902850,143
+5704,902993,147
+5705,903140,144
+5706,903284,201
+5707,903485,152
+5708,903637,183
+5709,903820,181
+5710,904001,132
+5711,904133,191
+5712,904324,136
+5713,904460,137
+5714,904597,186
+5715,904783,172
+5716,904955,190
+5717,905145,184
+5718,905329,155
+5719,905484,139
+5720,905623,197
+5721,905820,130
+5722,905950,147
+5723,906097,138
+5724,906235,148
+5725,906383,155
+5726,906538,148
+5727,906686,156
+5728,906842,126
+5729,906968,196
+5730,907164,168
+5731,907332,173
+5732,907505,117
+5733,907622,140
+5734,907762,214
+5735,907976,185
+5736,908161,156
+5737,908317,153
+5738,908470,131
+5739,908601,173
+5740,908774,227
+5741,909001,256
+5742,909257,139
+5743,909396,140
+5744,909536,177
+5745,909713,182
+5746,909895,184
+5747,910079,141
+5748,910220,171
+5749,910391,137
+5750,910528,162
+5751,910690,152
+5752,910842,224
+5753,911066,156
+5754,911222,192
+5755,911414,124
+5756,911538,176
+5757,911714,185
+5758,911899,145
+5759,912044,144
+5760,912188,145
+5761,912333,163
+5762,912496,145
+5763,912641,191
+5764,912832,153
+5765,912985,112
+5766,913097,137
+5767,913234,145
+5768,913379,146
+5769,913525,185
+5770,913710,143
+5771,913853,143
+5772,913996,115
+5773,914111,177
+5774,914288,174
+5775,914462,145
+5776,914607,176
+5777,914783,127
+5778,914910,176
+5779,915086,213
+5780,915299,162
+5781,915461,171
+5782,915632,202
+5783,915834,136
+5784,915970,188
+5785,916158,183
+5786,916341,130
+5787,916471,144
+5788,916615,143
+5789,916758,143
+5790,916901,170
+5791,917071,213
+5792,917284,130
+5793,917414,136
+5794,917550,150
+5795,917700,199
+5796,917899,138
+5797,918037,128
+5798,918165,161
+5799,918326,122
+5800,918448,151
+5801,918599,135
+5802,918734,159
+5803,918893,130
+5804,919023,163
+5805,919186,171
+5806,919357,109
+5807,919466,236
+5808,919702,165
+5809,919867,132
+5810,919999,151
+5811,920150,166
+5812,920316,56
+5813,920372,132
+5814,920504,122
+5815,920626,153
+5816,920779,166
+5817,920945,158
+5818,921103,124
+5819,921227,217
+5820,921444,132
+5821,921576,171
+5822,921747,171
+5823,921918,142
+5824,922060,147
+5825,922207,143
+5826,922350,156
+5827,922506,132
+5828,922638,144
+5829,922782,247
+5830,923029,153
+5831,923182,132
+5832,923314,143
+5833,923457,138
+5834,923595,126
+5835,923721,141
+5836,923862,175
+5837,924037,149
+5838,924186,191
+5839,924377,191
+5840,924568,149
+5841,924717,118
+5842,924835,119
+5843,924954,179
+5844,925133,184
+5845,925317,189
+5846,925506,150
+5847,925656,131
+5848,925787,113
+5849,925900,150
+5850,926050,206
+5851,926256,179
+5852,926435,108
+5853,926543,159
+5854,926702,121
+5855,926823,121
+5856,926944,176
+5857,927120,141
+5858,927261,164
+5859,927425,171
+5860,927596,197
+5861,927793,192
+5862,927985,165
+5863,928150,162
+5864,928312,145
+5865,928457,136
+5866,928593,159
+5867,928752,154
+5868,928906,217
+5869,929123,150
+5870,929273,182
+5871,929455,142
+5872,929597,111
+5873,929708,133
+5874,929841,196
+5875,930037,187
+5876,930224,197
+5877,930421,201
+5878,930622,153
+5879,930775,191
+5880,930966,179
+5881,931145,138
+5882,931283,128
+5883,931411,164
+5884,931575,129
+5885,931704,173
+5886,931877,160
+5887,932037,178
+5888,932215,132
+5889,932347,147
+5890,932494,170
+5891,932664,183
+5892,932847,168
+5893,933015,139
+5894,933154,246
+5895,933400,136
+5896,933536,140
+5897,933676,147
+5898,933823,196
+5899,934019,190
+5900,934209,117
+5901,934326,143
+5902,934469,143
+5903,934612,143
+5904,934755,170
+5905,934925,151
+5906,935076,153
+5907,935229,175
+5908,935404,154
+5909,935558,143
+5910,935701,163
+5911,935864,156
+5912,936020,138
+5913,936158,147
+5914,936305,142
+5915,936447,173
+5916,936620,148
+5917,936768,119
+5918,936887,156
+5919,937043,144
+5920,937187,179
+5921,937366,121
+5922,937487,162
+5923,937649,174
+5924,937823,171
+5925,937994,151
+5926,938145,194
+5927,938339,159
+5928,938498,135
+5929,938633,163
+5930,938796,205
+5931,939001,177
+5932,939178,173
+5933,939351,188
+5934,939539,137
+5935,939676,150
+5936,939826,146
+5937,939972,182
+5938,940154,177
+5939,940331,156
+5940,940487,153
+5941,940640,56
+5942,940696,127
+5943,940823,158
+5944,940981,157
+5945,941138,207
+5946,941345,151
+5947,941496,167
+5948,941663,176
+5949,941839,125
+5950,941964,194
+5951,942158,148
+5952,942306,164
+5953,942470,110
+5954,942580,190
+5955,942770,108
+5956,942878,122
+5957,943000,170
+5958,943170,150
+5959,943320,119
+5960,943439,156
+5961,943595,182
+5962,943777,114
+5963,943891,132
+5964,944023,148
+5965,944171,167
+5966,944338,146
+5967,944484,175
+5968,944659,148
+5969,944807,169
+5970,944976,169
+5971,945145,163
+5972,945308,216
+5973,945524,132
+5974,945656,136
+5975,945792,181
+5976,945973,163
+5977,946136,143
+5978,946279,143
+5979,946422,166
+5980,946588,144
+5981,946732,158
+5982,946890,112
+5983,947002,211
+5984,947213,172
+5985,947385,147
+5986,947532,151
+5987,947683,140
+5988,947823,137
+5989,947960,129
+5990,948089,150
+5991,948239,106
+5992,948345,163
+5993,948508,145
+5994,948653,143
+5995,948796,144
+5996,948940,146
+5997,949086,143
+5998,949229,133
+5999,949362,262
+6000,949624,188
+6001,949812,177
+6002,949989,183
+6003,950172,226
+6004,950398,128
+6005,950526,164
+6006,950690,162
+6007,950852,195
+6008,951047,187
+6009,951234,116
+6010,951350,148
+6011,951498,159
+6012,951657,148
+6013,951805,188
+6014,951993,148
+6015,952141,143
+6016,952284,209
+6017,952493,165
+6018,952658,140
+6019,952798,147
+6020,952945,151
+6021,953096,183
+6022,953279,151
+6023,953430,157
+6024,953587,152
+6025,953739,183
+6026,953922,181
+6027,954103,182
+6028,954285,174
+6029,954459,151
+6030,954610,147
+6031,954757,213
+6032,954970,200
+6033,955170,126
+6034,955296,173
+6035,955469,156
+6036,955625,143
+6037,955768,143
+6038,955911,146
+6039,956057,142
+6040,956199,181
+6041,956380,157
+6042,956537,169
+6043,956706,190
+6044,956896,154
+6045,957050,175
+6046,957225,138
+6047,957363,125
+6048,957488,122
+6049,957610,154
+6050,957764,167
+6051,957931,112
+6052,958043,153
+6053,958196,207
+6054,958403,184
+6055,958587,183
+6056,958770,133
+6057,958903,125
+6058,959028,167
+6059,959195,155
+6060,959350,155
+6061,959505,163
+6062,959668,164
+6063,959832,108
+6064,959940,132
+6065,960072,183
+6066,960255,173
+6067,960428,166
+6068,960594,173
+6069,960767,178
+6070,960945,118
+6071,961063,188
+6072,961251,190
+6073,961441,121
+6074,961562,187
+6075,961749,168
+6076,961917,176
+6077,962093,156
+6078,962249,148
+6079,962397,188
+6080,962585,161
+6081,962746,198
+6082,962944,141
+6083,963085,207
+6084,963292,186
+6085,963478,124
+6086,963602,186
+6087,963788,151
+6088,963939,163
+6089,964102,190
+6090,964292,157
+6091,964449,160
+6092,964609,137
+6093,964746,186
+6094,964932,176
+6095,965108,130
+6096,965238,186
+6097,965424,129
+6098,965553,145
+6099,965698,157
+6100,965855,170
+6101,966025,179
+6102,966204,178
+6103,966382,182
+6104,966564,158
+6105,966722,139
+6106,966861,146
+6107,967007,194
+6108,967201,190
+6109,967391,154
+6110,967545,148
+6111,967693,143
+6112,967836,143
+6113,967979,204
+6114,968183,151
+6115,968334,147
+6116,968481,147
+6117,968628,147
+6118,968775,147
+6119,968922,147
+6120,969069,147
+6121,969216,147
+6122,969363,147
+6123,969510,147
+6124,969657,147
+6125,969804,182
+6126,969986,132
+6127,970118,194
+6128,970312,252
+6129,970564,167
+6130,970731,141
+6131,970872,165
+6132,971037,169
+6133,971206,157
+6134,971363,141
+6135,971504,169
+6136,971673,199
+6137,971872,124
+6138,971996,174
+6139,972170,124
+6140,972294,181
+6141,972475,169
+6142,972644,152
+6143,972796,143
+6144,972939,166
+6145,973105,159
+6146,973264,189
+6147,973453,184
+6148,973637,205
+6149,973842,229
+6150,974071,153
+6151,974224,146
+6152,974370,139
+6153,974509,128
+6154,974637,137
+6155,974774,178
+6156,974952,154
+6157,975106,185
+6158,975291,134
+6159,975425,137
+6160,975562,169
+6161,975731,188
+6162,975919,259
+6163,976178,166
+6164,976344,158
+6165,976502,185
+6166,976687,178
+6167,976865,163
+6168,977028,143
+6169,977171,143
+6170,977314,190
+6171,977504,166
+6172,977670,181
+6173,977851,174
+6174,978025,167
+6175,978192,200
+6176,978392,139
+6177,978531,148
+6178,978679,165
+6179,978844,167
+6180,979011,183
+6181,979194,139
+6182,979333,116
+6183,979449,190
+6184,979639,167
+6185,979806,134
+6186,979940,167
+6187,980107,133
+6188,980240,184
+6189,980424,123
+6190,980547,149
+6191,980696,147
+6192,980843,147
+6193,980990,147
+6194,981137,147
+6195,981284,147
+6196,981431,147
+6197,981578,133
+6198,981711,165
+6199,981876,173
+6200,982049,209
+6201,982258,130
+6202,982388,144
+6203,982532,174
+6204,982706,177
+6205,982883,194
+6206,983077,140
+6207,983217,131
+6208,983348,158
+6209,983506,156
+6210,983662,134
+6211,983796,142
+6212,983938,183
+6213,984121,132
+6214,984253,118
+6215,984371,146
+6216,984517,142
+6217,984659,145
+6218,984804,143
+6219,984947,169
+6220,985116,139
+6221,985255,141
+6222,985396,192
+6223,985588,175
+6224,985763,119
+6225,985882,136
+6226,986018,192
+6227,986210,152
+6228,986362,140
+6229,986502,157
+6230,986659,132
+6231,986791,148
+6232,986939,127
+6233,987066,159
+6234,987225,151
+6235,987376,152
+6236,987528,136
+6237,987664,254
+6238,987918,130
+6239,988048,140
+6240,988188,222
+6241,988410,130
+6242,988540,139
+6243,988679,192
+6244,988871,154
+6245,989025,235
+6246,989260,134
+6247,989394,158
+6248,989552,185
+6249,989737,136
+6250,989873,214
+6251,990087,208
+6252,990295,132
+6253,990427,204
+6254,990631,177
+6255,990808,198
+6256,991006,164
+6257,991170,153
+6258,991323,165
+6259,991488,143
+6260,991631,143
+6261,991774,170
+6262,991944,155
+6263,992099,113
+6264,992212,136
+6265,992348,104
+6266,992452,124
+6267,992576,159
+6268,992735,140
+6269,992875,151
+6270,993026,134
+6271,993160,125
+6272,993285,174
+6273,993459,197
+6274,993656,200
+6275,993856,175
+6276,994031,123
+6277,994154,157
+6278,994311,181
+6279,994492,127
+6280,994619,115
+6281,994734,160
+6282,994894,155
+6283,995049,113
+6284,995162,201
+6285,995363,129
+6286,995492,127
+6287,995619,168
+6288,995787,127
+6289,995914,229
+6290,996143,156
+6291,996299,230
+6292,996529,155
+6293,996684,185
+6294,996869,181
+6295,997050,194
+6296,997244,225
+6297,997469,260
+6298,997729,192
+6299,997921,142
+6300,998063,142
+6301,998205,142
+6302,998347,132
+6303,998479,168
+6304,998647,149
+6305,998796,152
+6306,998948,135
+6307,999083,177
+6308,999260,151
+6309,999411,197
+6310,999608,156
+6311,999764,149
+6312,999913,168
+6313,1000081,186
+6314,1000267,177
+6315,1000444,189
+6316,1000633,212
+6317,1000845,157
+6318,1001002,179
+6319,1001181,179
+6320,1001360,129
+6321,1001489,179
+6322,1001668,115
+6323,1001783,192
+6324,1001975,173
+6325,1002148,135
+6326,1002283,131
+6327,1002414,142
+6328,1002556,154
+6329,1002710,143
+6330,1002853,143
+6331,1002996,153
+6332,1003149,150
+6333,1003299,245
+6334,1003544,177
+6335,1003721,207
+6336,1003928,132
+6337,1004060,184
+6338,1004244,139
+6339,1004383,177
+6340,1004560,164
+6341,1004724,129
+6342,1004853,167
+6343,1005020,153
+6344,1005173,141
+6345,1005314,184
+6346,1005498,130
+6347,1005628,193
+6348,1005821,115
+6349,1005936,188
+6350,1006124,175
+6351,1006299,151
+6352,1006450,168
+6353,1006618,173
+6354,1006791,155
+6355,1006946,126
+6356,1007072,178
+6357,1007250,165
+6358,1007415,117
+6359,1007532,178
+6360,1007710,190
+6361,1007900,165
+6362,1008065,135
+6363,1008200,150
+6364,1008350,168
+6365,1008518,160
+6366,1008678,164
+6367,1008842,146
+6368,1008988,157
+6369,1009145,163
+6370,1009308,181
+6371,1009489,156
+6372,1009645,153
+6373,1009798,139
+6374,1009937,147
+6375,1010084,176
+6376,1010260,177
+6377,1010437,161
+6378,1010598,143
+6379,1010741,161
+6380,1010902,177
+6381,1011079,211
+6382,1011290,189
+6383,1011479,181
+6384,1011660,174
+6385,1011834,168
+6386,1012002,238
+6387,1012240,155
+6388,1012395,180
+6389,1012575,280
+6390,1012855,154
+6391,1013009,136
+6392,1013145,136
+6393,1013281,147
+6394,1013428,186
+6395,1013614,170
+6396,1013784,150
+6397,1013934,200
+6398,1014134,153
+6399,1014287,126
+6400,1014413,186
+6401,1014599,181
+6402,1014780,173
+6403,1014953,147
+6404,1015100,171
+6405,1015271,141
+6406,1015412,143
+6407,1015555,143
+6408,1015698,159
+6409,1015857,106
+6410,1015963,125
+6411,1016088,173
+6412,1016261,159
+6413,1016420,176
+6414,1016596,180
+6415,1016776,157
+6416,1016933,181
+6417,1017114,278
+6418,1017392,176
+6419,1017568,195
+6420,1017763,162
+6421,1017925,169
+6422,1018094,127
+6423,1018221,152
+6424,1018373,146
+6425,1018519,144
+6426,1018663,150
+6427,1018813,143
+6428,1018956,151
+6429,1019107,153
+6430,1019260,192
+6431,1019452,204
+6432,1019656,142
+6433,1019798,197
+6434,1019995,172
+6435,1020167,160
+6436,1020327,151
+6437,1020478,168
+6438,1020646,178
+6439,1020824,117
+6440,1020941,176
+6441,1021117,209
+6442,1021326,148
+6443,1021474,145
+6444,1021619,151
+6445,1021770,129
+6446,1021899,154
+6447,1022053,143
+6448,1022196,143
+6449,1022339,122
+6450,1022461,171
+6451,1022632,144
+6452,1022776,208
+6453,1022984,186
+6454,1023170,194
+6455,1023364,127
+6456,1023491,199
+6457,1023690,161
+6458,1023851,158
+6459,1024009,181
+6460,1024190,177
+6461,1024367,162
+6462,1024529,145
+6463,1024674,254
+6464,1024928,138
+6465,1025066,153
+6466,1025219,192
+6467,1025411,134
+6468,1025545,155
+6469,1025700,137
+6470,1025837,207
+6471,1026044,201
+6472,1026245,151
+6473,1026396,188
+6474,1026584,128
+6475,1026712,128
+6476,1026840,232
+6477,1027072,174
+6478,1027246,213
+6479,1027459,132
+6480,1027591,141
+6481,1027732,140
+6482,1027872,174
+6483,1028046,187
+6484,1028233,166
+6485,1028399,143
+6486,1028542,143
+6487,1028685,148
+6488,1028833,159
+6489,1028992,160
+6490,1029152,157
+6491,1029309,172
+6492,1029481,164
+6493,1029645,229
+6494,1029874,132
+6495,1030006,171
+6496,1030177,185
+6497,1030362,140
+6498,1030502,147
+6499,1030649,173
+6500,1030822,131
+6501,1030953,199
+6502,1031152,196
+6503,1031348,161
+6504,1031509,206
+6505,1031715,129
+6506,1031844,110
+6507,1031954,152
+6508,1032106,215
+6509,1032321,188
+6510,1032509,180
+6511,1032689,141
+6512,1032830,181
+6513,1033011,231
+6514,1033242,178
+6515,1033420,147
+6516,1033567,179
+6517,1033746,199
+6518,1033945,152
+6519,1034097,158
+6520,1034255,144
+6521,1034399,132
+6522,1034531,118
+6523,1034649,158
+6524,1034807,157
+6525,1034964,188
+6526,1035152,188
+6527,1035340,150
+6528,1035490,150
+6529,1035640,137
+6530,1035777,140
+6531,1035917,168
+6532,1036085,147
+6533,1036232,146
+6534,1036378,166
+6535,1036544,213
+6536,1036757,140
+6537,1036897,167
+6538,1037064,174
+6539,1037238,172
+6540,1037410,113
+6541,1037523,138
+6542,1037661,110
+6543,1037771,131
+6544,1037902,179
+6545,1038081,158
+6546,1038239,132
+6547,1038371,223
+6548,1038594,192
+6549,1038786,187
+6550,1038973,187
+6551,1039160,162
+6552,1039322,152
+6553,1039474,169
+6554,1039643,127
+6555,1039770,201
+6556,1039971,167
+6557,1040138,116
+6558,1040254,173
+6559,1040427,107
+6560,1040534,171
+6561,1040705,161
+6562,1040866,199
+6563,1041065,193
+6564,1041258,219
+6565,1041477,157
+6566,1041634,132
+6567,1041766,114
+6568,1041880,166
+6569,1042046,143
+6570,1042189,143
+6571,1042332,176
+6572,1042508,211
+6573,1042719,149
+6574,1042868,158
+6575,1043026,185
+6576,1043211,190
+6577,1043401,141
+6578,1043542,171
+6579,1043713,158
+6580,1043871,122
+6581,1043993,132
+6582,1044125,142
+6583,1044267,132
+6584,1044399,135
+6585,1044534,132
+6586,1044666,165
+6587,1044831,153
+6588,1044984,170
+6589,1045154,164
+6590,1045318,201
+6591,1045519,176
+6592,1045695,151
+6593,1045846,158
+6594,1046004,153
+6595,1046157,147
+6596,1046304,168
+6597,1046472,180
+6598,1046652,209
+6599,1046861,178
+6600,1047039,142
+6601,1047181,144
+6602,1047325,165
+6603,1047490,222
+6604,1047712,132
+6605,1047844,233
+6606,1048077,167
+6607,1048244,139
+6608,1048383,141
+6609,1048524,164
+6610,1048688,164
+6611,1048852,133
+6612,1048985,149
+6613,1049134,138
+6614,1049272,163
+6615,1049435,193
+6616,1049628,177
+6617,1049805,130
+6618,1049935,228
+6619,1050163,180
+6620,1050343,173
+6621,1050516,135
+6622,1050651,143
+6623,1050794,142
+6624,1050936,222
+6625,1051158,129
+6626,1051287,142
+6627,1051429,150
+6628,1051579,131
+6629,1051710,164
+6630,1051874,143
+6631,1052017,143
+6632,1052160,143
+6633,1052303,205
+6634,1052508,198
+6635,1052706,153
+6636,1052859,173
+6637,1053032,144
+6638,1053176,183
+6639,1053359,258
+6640,1053617,172
+6641,1053789,230
+6642,1054019,155
+6643,1054174,140
+6644,1054314,139
+6645,1054453,185
+6646,1054638,156
+6647,1054794,153
+6648,1054947,178
+6649,1055125,121
+6650,1055246,207
+6651,1055453,132
+6652,1055585,204
+6653,1055789,155
+6654,1055944,183
+6655,1056127,141
+6656,1056268,138
+6657,1056406,151
+6658,1056557,153
+6659,1056710,187
+6660,1056897,164
+6661,1057061,122
+6662,1057183,146
+6663,1057329,135
+6664,1057464,174
+6665,1057638,189
+6666,1057827,158
+6667,1057985,185
+6668,1058170,159
+6669,1058329,177
+6670,1058506,213
+6671,1058719,171
+6672,1058890,190
+6673,1059080,140
+6674,1059220,114
+6675,1059334,144
+6676,1059478,176
+6677,1059654,131
+6678,1059785,132
+6679,1059917,163
+6680,1060080,180
+6681,1060260,163
+6682,1060423,195
+6683,1060618,151
+6684,1060769,172
+6685,1060941,161
+6686,1061102,133
+6687,1061235,167
+6688,1061402,173
+6689,1061575,133
+6690,1061708,129
+6691,1061837,130
+6692,1061967,176
+6693,1062143,119
+6694,1062262,135
+6695,1062397,159
+6696,1062556,193
+6697,1062749,200
+6698,1062949,220
+6699,1063169,198
+6700,1063367,160
+6701,1063527,135
+6702,1063662,143
+6703,1063805,143
+6704,1063948,143
+6705,1064091,146
+6706,1064237,136
+6707,1064373,152
+6708,1064525,159
+6709,1064684,123
+6710,1064807,161
+6711,1064968,136
+6712,1065104,140
+6713,1065244,129
+6714,1065373,166
+6715,1065539,172
+6716,1065711,156
+6717,1065867,176
+6718,1066043,156
+6719,1066199,137
+6720,1066336,174
+6721,1066510,162
+6722,1066672,222
+6723,1066894,169
+6724,1067063,169
+6725,1067232,145
+6726,1067377,213
+6727,1067590,155
+6728,1067745,164
+6729,1067909,162
+6730,1068071,155
+6731,1068226,153
+6732,1068379,156
+6733,1068535,160
+6734,1068695,136
+6735,1068831,107
+6736,1068938,192
+6737,1069130,154
+6738,1069284,154
+6739,1069438,139
+6740,1069577,195
+6741,1069772,195
+6742,1069967,198
+6743,1070165,153
+6744,1070318,193
+6745,1070511,126
+6746,1070637,232
+6747,1070869,153
+6748,1071022,152
+6749,1071174,150
+6750,1071324,193
+6751,1071517,127
+6752,1071644,206
+6753,1071850,146
+6754,1071996,163
+6755,1072159,154
+6756,1072313,164
+6757,1072477,124
+6758,1072601,132
+6759,1072733,206
+6760,1072939,190
+6761,1073129,181
+6762,1073310,166
+6763,1073476,149
+6764,1073625,143
+6765,1073768,143
+6766,1073911,147
+6767,1074058,135
+6768,1074193,146
+6769,1074339,185
+6770,1074524,198
+6771,1074722,199
+6772,1074921,183
+6773,1075104,166
+6774,1075270,208
+6775,1075478,151
+6776,1075629,148
+6777,1075777,161
+6778,1075938,206
+6779,1076144,144
+6780,1076288,186
+6781,1076474,178
+6782,1076652,175
+6783,1076827,177
+6784,1077004,159
+6785,1077163,130
+6786,1077293,206
+6787,1077499,161
+6788,1077660,153
+6789,1077813,156
+6790,1077969,154
+6791,1078123,217
+6792,1078340,206
+6793,1078546,132
+6794,1078678,179
+6795,1078857,211
+6796,1079068,130
+6797,1079198,142
+6798,1079340,181
+6799,1079521,129
+6800,1079650,284
+6801,1079934,167
+6802,1080101,155
+6803,1080256,145
+6804,1080401,136
+6805,1080537,200
+6806,1080737,113
+6807,1080850,194
+6808,1081044,209
+6809,1081253,229
+6810,1081482,243
+6811,1081725,140
+6812,1081865,169
+6813,1082034,182
+6814,1082216,194
+6815,1082410,123
+6816,1082533,133
+6817,1082666,143
+6818,1082809,143
+6819,1082952,120
+6820,1083072,163
+6821,1083235,144
+6822,1083379,218
+6823,1083597,141
+6824,1083738,162
+6825,1083900,231
+6826,1084131,133
+6827,1084264,137
+6828,1084401,118
+6829,1084519,132
+6830,1084651,149
+6831,1084800,193
+6832,1084993,210
+6833,1085203,235
+6834,1085438,164
+6835,1085602,179
+6836,1085781,163
+6837,1085944,203
+6838,1086147,144
+6839,1086291,155
+6840,1086446,157
+6841,1086603,117
+6842,1086720,182
+6843,1086902,211
+6844,1087113,156
+6845,1087269,133
+6846,1087402,144
+6847,1087546,156
+6848,1087702,190
+6849,1087892,176
+6850,1088068,122
+6851,1088190,174
+6852,1088364,131
+6853,1088495,171
+6854,1088666,147
+6855,1088813,152
+6856,1088965,240
+6857,1089205,169
+6858,1089374,161
+6859,1089535,184
+6860,1089719,216
+6861,1089935,161
+6862,1090096,167
+6863,1090263,154
+6864,1090417,149
+6865,1090566,171
+6866,1090737,193
+6867,1090930,105
+6868,1091035,186
+6869,1091221,189
+6870,1091410,202
+6871,1091612,176
+6872,1091788,126
+6873,1091914,227
+6874,1092141,154
+6875,1092295,151
+6876,1092446,132
+6877,1092578,158
+6878,1092736,132
+6879,1092868,178
+6880,1093046,199
+6881,1093245,154
+6882,1093399,143
+6883,1093542,143
+6884,1093685,143
+6885,1093828,166
+6886,1093994,218
+6887,1094212,145
+6888,1094357,210
+6889,1094567,155
+6890,1094722,186
+6891,1094908,168
+6892,1095076,190
+6893,1095266,128
+6894,1095394,147
+6895,1095541,191
+6896,1095732,141
+6897,1095873,132
+6898,1096005,151
+6899,1096156,181
+6900,1096337,159
+6901,1096496,192
+6902,1096688,163
+6903,1096851,136
+6904,1096987,151
+6905,1097138,167
+6906,1097305,167
+6907,1097472,139
+6908,1097611,152
+6909,1097763,140
+6910,1097903,130
+6911,1098033,156
+6912,1098189,143
+6913,1098332,168
+6914,1098500,149
+6915,1098649,215
+6916,1098864,160
+6917,1099024,158
+6918,1099182,167
+6919,1099349,140
+6920,1099489,124
+6921,1099613,155
+6922,1099768,213
+6923,1099981,134
+6924,1100115,143
+6925,1100258,143
+6926,1100401,174
+6927,1100575,121
+6928,1100696,215
+6929,1100911,172
+6930,1101083,179
+6931,1101262,169
+6932,1101431,206
+6933,1101637,148
+6934,1101785,151
+6935,1101936,148
+6936,1102084,167
+6937,1102251,172
+6938,1102423,167
+6939,1102590,173
+6940,1102763,127
+6941,1102890,198
+6942,1103088,176
+6943,1103264,187
+6944,1103451,145
+6945,1103596,160
+6946,1103756,212
+6947,1103968,157
+6948,1104125,183
+6949,1104308,129
+6950,1104437,161
+6951,1104598,140
+6952,1104738,153
+6953,1104891,169
+6954,1105060,143
+6955,1105203,143
+6956,1105346,151
+6957,1105497,148
+6958,1105645,142
+6959,1105787,141
+6960,1105928,134
+6961,1106062,175
+6962,1106237,160
+6963,1106397,132
+6964,1106529,176
+6965,1106705,260
+6966,1106965,196
+6967,1107161,128
+6968,1107289,231
+6969,1107520,140
+6970,1107660,155
+6971,1107815,163
+6972,1107978,191
+6973,1108169,133
+6974,1108302,148
+6975,1108450,167
+6976,1108617,138
+6977,1108755,185
+6978,1108940,183
+6979,1109123,209
+6980,1109332,148
+6981,1109480,181
+6982,1109661,190
+6983,1109851,112
+6984,1109963,222
+6985,1110185,177
+6986,1110362,174
+6987,1110536,181
+6988,1110717,175
+6989,1110892,181
+6990,1111073,151
+6991,1111224,150
+6992,1111374,233
+6993,1111607,172
+6994,1111779,151
+6995,1111930,143
+6996,1112073,143
+6997,1112216,179
+6998,1112395,134
+6999,1112529,225
+7000,1112754,200
+7001,1112954,170
+7002,1113124,170
+7003,1113294,133
+7004,1113427,189
+7005,1113616,154
+7006,1113770,143
+7007,1113913,146
+7008,1114059,125
+7009,1114184,153
+7010,1114337,192
+7011,1114529,150
+7012,1114679,210
+7013,1114889,180
+7014,1115069,173
+7015,1115242,174
+7016,1115416,185
+7017,1115601,179
+7018,1115780,170
+7019,1115950,146
+7020,1116096,151
+7021,1116247,138
+7022,1116385,156
+7023,1116541,136
+7024,1116677,174
+7025,1116851,150
+7026,1117001,118
+7027,1117119,165
+7028,1117284,157
+7029,1117441,155
+7030,1117596,150
+7031,1117746,160
+7032,1117906,153
+7033,1118059,168
+7034,1118227,155
+7035,1118382,161
+7036,1118543,156
+7037,1118699,137
+7038,1118836,122
+7039,1118958,176
+7040,1119134,140
+7041,1119274,153
+7042,1119427,195
+7043,1119622,129
+7044,1119751,155
+7045,1119906,123
+7046,1120029,167
+7047,1120196,197
+7048,1120393,201
+7049,1120594,168
+7050,1120762,124
+7051,1120886,148
+7052,1121034,203
+7053,1121237,169
+7054,1121406,130
+7055,1121536,143
+7056,1121679,143
+7057,1121822,123
+7058,1121945,141
+7059,1122086,132
+7060,1122218,149
+7061,1122367,148
+7062,1122515,131
+7063,1122646,141
+7064,1122787,174
+7065,1122961,127
+7066,1123088,163
+7067,1123251,177
+7068,1123428,131
+7069,1123559,160
+7070,1123719,169
+7071,1123888,152
+7072,1124040,131
+7073,1124171,142
+7074,1124313,170
+7075,1124483,138
+7076,1124621,121
+7077,1124742,196
+7078,1124938,193
+7079,1125131,142
+7080,1125273,161
+7081,1125434,223
+7082,1125657,127
+7083,1125784,165
+7084,1125949,209
+7085,1126158,170
+7086,1126328,170
+7087,1126498,132
+7088,1126630,139
+7089,1126769,180
+7090,1126949,170
+7091,1127119,123
+7092,1127242,154
+7093,1127396,152
+7094,1127548,146
+7095,1127694,177
+7096,1127871,194
+7097,1128065,201
+7098,1128266,129
+7099,1128395,176
+7100,1128571,159
+7101,1128730,152
+7102,1128882,128
+7103,1129010,134
+7104,1129144,143
+7105,1129287,196
+7106,1129483,202
+7107,1129685,161
+7108,1129846,132
+7109,1129978,157
+7110,1130135,142
+7111,1130277,202
+7112,1130479,129
+7113,1130608,233
+7114,1130841,180
+7115,1131021,155
+7116,1131176,191
+7117,1131367,160
+7118,1131527,186
+7119,1131713,147
+7120,1131860,126
+7121,1131986,139
+7122,1132125,154
+7123,1132279,177
+7124,1132456,144
+7125,1132600,144
+7126,1132744,153
+7127,1132897,201
+7128,1133098,104
+7129,1133202,159
+7130,1133361,133
+7131,1133494,149
+7132,1133643,171
+7133,1133814,132
+7134,1133946,144
+7135,1134090,124
+7136,1134214,158
+7137,1134372,118
+7138,1134490,145
+7139,1134635,174
+7140,1134809,118
+7141,1134927,158
+7142,1135085,111
+7143,1135196,191
+7144,1135387,137
+7145,1135524,145
+7146,1135669,155
+7147,1135824,186
+7148,1136010,194
+7149,1136204,154
+7150,1136358,132
+7151,1136490,207
+7152,1136697,200
+7153,1136897,266
+7154,1137163,178
+7155,1137341,162
+7156,1137503,171
+7157,1137674,184
+7158,1137858,215
+7159,1138073,128
+7160,1138201,143
+7161,1138344,200
+7162,1138544,124
+7163,1138668,157
+7164,1138825,155
+7165,1138980,176
+7166,1139156,165
+7167,1139321,149
+7168,1139470,170
+7169,1139640,120
+7170,1139760,152
+7171,1139912,143
+7172,1140055,150
+7173,1140205,146
+7174,1140351,210
+7175,1140561,182
+7176,1140743,141
+7177,1140884,210
+7178,1141094,238
+7179,1141332,172
+7180,1141504,146
+7181,1141650,148
+7182,1141798,144
+7183,1141942,144
+7184,1142086,146
+7185,1142232,132
+7186,1142364,156
+7187,1142520,219
+7188,1142739,131
+7189,1142870,140
+7190,1143010,154
+7191,1143164,129
+7192,1143293,127
+7193,1143420,156
+7194,1143576,168
+7195,1143744,142
+7196,1143886,167
+7197,1144053,196
+7198,1144249,143
+7199,1144392,164
+7200,1144556,131
+7201,1144687,142
+7202,1144829,155
+7203,1144984,133
+7204,1145117,182
+7205,1145299,187
+7206,1145486,187
+7207,1145673,179
+7208,1145852,168
+7209,1146020,231
+7210,1146251,166
+7211,1146417,161
+7212,1146578,121
+7213,1146699,137
+7214,1146836,158
+7215,1146994,132
+7216,1147126,178
+7217,1147304,216
+7218,1147520,174
+7219,1147694,118
+7220,1147812,213
+7221,1148025,133
+7222,1148158,126
+7223,1148284,141
+7224,1148425,167
+7225,1148592,174
+7226,1148766,163
+7227,1148929,180
+7228,1149109,138
+7229,1149247,133
+7230,1149380,135
+7231,1149515,185
+7232,1149700,137
+7233,1149837,172
+7234,1150009,147
+7235,1150156,169
+7236,1150325,160
+7237,1150485,187
+7238,1150672,171
+7239,1150843,202
+7240,1151045,145
+7241,1151190,165
+7242,1151355,107
+7243,1151462,137
+7244,1151599,147
+7245,1151746,125
+7246,1151871,172
+7247,1152043,112
+7248,1152155,233
+7249,1152388,137
+7250,1152525,135
+7251,1152660,153
+7252,1152813,168
+7253,1152981,181
+7254,1153162,191
+7255,1153353,144
+7256,1153497,144
+7257,1153641,142
+7258,1153783,154
+7259,1153937,189
+7260,1154126,173
+7261,1154299,156
+7262,1154455,135
+7263,1154590,153
+7264,1154743,162
+7265,1154905,193
+7266,1155098,158
+7267,1155256,151
+7268,1155407,142
+7269,1155549,128
+7270,1155677,164
+7271,1155841,180
+7272,1156021,177
+7273,1156198,155
+7274,1156353,141
+7275,1156494,145
+7276,1156639,254
+7277,1156893,195
+7278,1157088,149
+7279,1157237,116
+7280,1157353,140
+7281,1157493,181
+7282,1157674,166
+7283,1157840,168
+7284,1158008,183
+7285,1158191,136
+7286,1158327,169
+7287,1158496,126
+7288,1158622,123
+7289,1158745,192
+7290,1158937,183
+7291,1159120,178
+7292,1159298,176
+7293,1159474,186
+7294,1159660,109
+7295,1159769,181
+7296,1159950,231
+7297,1160181,164
+7298,1160345,202
+7299,1160547,193
+7300,1160740,204
+7301,1160944,144
+7302,1161088,147
+7303,1161235,165
+7304,1161400,177
+7305,1161577,150
+7306,1161727,148
+7307,1161875,154
+7308,1162029,197
+7309,1162226,125
+7310,1162351,151
+7311,1162502,192
+7312,1162694,159
+7313,1162853,130
+7314,1162983,126
+7315,1163109,126
+7316,1163235,143
+7317,1163378,148
+7318,1163526,186
+7319,1163712,168
+7320,1163880,218
+7321,1164098,135
+7322,1164233,132
+7323,1164365,140
+7324,1164505,129
+7325,1164634,135
+7326,1164769,140
+7327,1164909,145
+7328,1165054,171
+7329,1165225,157
+7330,1165382,145
+7331,1165527,111
+7332,1165638,166
+7333,1165804,142
+7334,1165946,156
+7335,1166102,205
+7336,1166307,167
+7337,1166474,128
+7338,1166602,142
+7339,1166744,167
+7340,1166911,194
+7341,1167105,194
+7342,1167299,144
+7343,1167443,158
+7344,1167601,144
+7345,1167745,144
+7346,1167889,124
+7347,1168013,132
+7348,1168145,148
+7349,1168293,195
+7350,1168488,193
+7351,1168681,183
+7352,1168864,130
+7353,1168994,208
+7354,1169202,156
+7355,1169358,126
+7356,1169484,141
+7357,1169625,189
+7358,1169814,160
+7359,1169974,160
+7360,1170134,160
+7361,1170294,156
+7362,1170450,150
+7363,1170600,182
+7364,1170782,153
+7365,1170935,193
+7366,1171128,156
+7367,1171284,216
+7368,1171500,211
+7369,1171711,209
+7370,1171920,218
+7371,1172138,213
+7372,1172351,158
+7373,1172509,160
+7374,1172669,126
+7375,1172795,175
+7376,1172970,137
+7377,1173107,163
+7378,1173270,218
+7379,1173488,154
+7380,1173642,132
+7381,1173774,142
+7382,1173916,132
+7383,1174048,194
+7384,1174242,147
+7385,1174389,205
+7386,1174594,169
+7387,1174763,172
+7388,1174935,170
+7389,1175105,156
+7390,1175261,192
+7391,1175453,154
+7392,1175607,170
+7393,1175777,156
+7394,1175933,159
+7395,1176092,147
+7396,1176239,136
+7397,1176375,161
+7398,1176536,118
+7399,1176654,142
+7400,1176796,125
+7401,1176921,188
+7402,1177109,174
+7403,1177283,129
+7404,1177412,181
+7405,1177593,136
+7406,1177729,138
+7407,1177867,165
+7408,1178032,172
+7409,1178204,193
+7410,1178397,192
+7411,1178589,170
+7412,1178759,181
+7413,1178940,211
+7414,1179151,144
+7415,1179295,151
+7416,1179446,199
+7417,1179645,144
+7418,1179789,128
+7419,1179917,132
+7420,1180049,246
+7421,1180295,155
+7422,1180450,146
+7423,1180596,157
+7424,1180753,160
+7425,1180913,145
+7426,1181058,168
+7427,1181226,147
+7428,1181373,158
+7429,1181531,147
+7430,1181678,142
+7431,1181820,278
+7432,1182098,187
+7433,1182285,132
+7434,1182417,149
+7435,1182566,157
+7436,1182723,161
+7437,1182884,180
+7438,1183064,191
+7439,1183255,206
+7440,1183461,150
+7441,1183611,182
+7442,1183793,150
+7443,1183943,171
+7444,1184114,192
+7445,1184306,230
+7446,1184536,144
+7447,1184680,151
+7448,1184831,141
+7449,1184972,220
+7450,1185192,129
+7451,1185321,189
+7452,1185510,140
+7453,1185650,157
+7454,1185807,159
+7455,1185966,158
+7456,1186124,192
+7457,1186316,128
+7458,1186444,140
+7459,1186584,158
+7460,1186742,165
+7461,1186907,169
+7462,1187076,182
+7463,1187258,138
+7464,1187396,170
+7465,1187566,108
+7466,1187674,202
+7467,1187876,250
+7468,1188126,244
+7469,1188370,150
+7470,1188520,152
+7471,1188672,155
+7472,1188827,169
+7473,1188996,191
+7474,1189187,228
+7475,1189415,190
+7476,1189605,180
+7477,1189785,155
+7478,1189940,222
+7479,1190162,195
+7480,1190357,139
+7481,1190496,204
+7482,1190700,132
+7483,1190832,132
+7484,1190964,136
+7485,1191100,138
+7486,1191238,173
+7487,1191411,146
+7488,1191557,177
+7489,1191734,143
+7490,1191877,129
+7491,1192006,254
+7492,1192260,114
+7493,1192374,144
+7494,1192518,144
+7495,1192662,130
+7496,1192792,160
+7497,1192952,169
+7498,1193121,153
+7499,1193274,140
+7500,1193414,139
+7501,1193553,169
+7502,1193722,153
+7503,1193875,150
+7504,1194025,146
+7505,1194171,137
+7506,1194308,139
+7507,1194447,206
+7508,1194653,187
+7509,1194840,138
+7510,1194978,145
+7511,1195123,139
+7512,1195262,141
+7513,1195403,159
+7514,1195562,140
+7515,1195702,174
+7516,1195876,188
+7517,1196064,158
+7518,1196222,180
+7519,1196402,148
+7520,1196550,155
+7521,1196705,170
+7522,1196875,148
+7523,1197023,129
+7524,1197152,201
+7525,1197353,180
+7526,1197533,181
+7527,1197714,131
+7528,1197845,156
+7529,1198001,129
+7530,1198130,173
+7531,1198303,184
+7532,1198487,172
+7533,1198659,170
+7534,1198829,131
+7535,1198960,204
+7536,1199164,144
+7537,1199308,144
+7538,1199452,178
+7539,1199630,155
+7540,1199785,244
+7541,1200029,144
+7542,1200173,170
+7543,1200343,132
+7544,1200475,207
+7545,1200682,146
+7546,1200828,174
+7547,1201002,160
+7548,1201162,151
+7549,1201313,182
+7550,1201495,146
+7551,1201641,187
+7552,1201828,184
+7553,1202012,229
+7554,1202241,157
+7555,1202398,193
+7556,1202591,167
+7557,1202758,212
+7558,1202970,224
+7559,1203194,193
+7560,1203387,133
+7561,1203520,149
+7562,1203669,137
+7563,1203806,145
+7564,1203951,157
+7565,1204108,122
+7566,1204230,157
+7567,1204387,144
+7568,1204531,139
+7569,1204670,143
+7570,1204813,176
+7571,1204989,153
+7572,1205142,201
+7573,1205343,131
+7574,1205474,133
+7575,1205607,175
+7576,1205782,132
+7577,1205914,157
+7578,1206071,197
+7579,1206268,160
+7580,1206428,169
+7581,1206597,190
+7582,1206787,149
+7583,1206936,159
+7584,1207095,226
+7585,1207321,144
+7586,1207465,144
+7587,1207609,128
+7588,1207737,206
+7589,1207943,129
+7590,1208072,149
+7591,1208221,155
+7592,1208376,179
+7593,1208555,194
+7594,1208749,186
+7595,1208935,141
+7596,1209076,152
+7597,1209228,248
+7598,1209476,214
+7599,1209690,129
+7600,1209819,242
+7601,1210061,136
+7602,1210197,182
+7603,1210379,158
+7604,1210537,174
+7605,1210711,141
+7606,1210852,168
+7607,1211020,171
+7608,1211191,140
+7609,1211331,146
+7610,1211477,161
+7611,1211638,216
+7612,1211854,155
+7613,1212009,134
+7614,1212143,156
+7615,1212299,161
+7616,1212460,141
+7617,1212601,124
+7618,1212725,120
+7619,1212845,136
+7620,1212981,170
+7621,1213151,227
+7622,1213378,155
+7623,1213533,203
+7624,1213736,147
+7625,1213883,129
+7626,1214012,196
+7627,1214208,138
+7628,1214346,154
+7629,1214500,141
+7630,1214641,141
+7631,1214782,141
+7632,1214923,141
+7633,1215064,141
+7634,1215205,141
+7635,1215346,141
+7636,1215487,141
+7637,1215628,141
+7638,1215769,141
+7639,1215910,114
+7640,1216024,159
+7641,1216183,184
+7642,1216367,162
+7643,1216529,157
+7644,1216686,225
+7645,1216911,183
+7646,1217094,234
+7647,1217328,196
+7648,1217524,160
+7649,1217684,160
+7650,1217844,152
+7651,1217996,135
+7652,1218131,173
+7653,1218304,144
+7654,1218448,144
+7655,1218592,211
+7656,1218803,174
+7657,1218977,132
+7658,1219109,170
+7659,1219279,156
+7660,1219435,154
+7661,1219589,153
+7662,1219742,232
+7663,1219974,127
+7664,1220101,150
+7665,1220251,148
+7666,1220399,136
+7667,1220535,187
+7668,1220722,165
+7669,1220887,150
+7670,1221037,169
+7671,1221206,164
+7672,1221370,200
+7673,1221570,189
+7674,1221759,233
+7675,1221992,205
+7676,1222197,174
+7677,1222371,132
+7678,1222503,125
+7679,1222628,174
+7680,1222802,192
+7681,1222994,174
+7682,1223168,185
+7683,1223353,162
+7684,1223515,160
+7685,1223675,174
+7686,1223849,153
+7687,1224002,216
+7688,1224218,183
+7689,1224401,148
+7690,1224549,171
+7691,1224720,153
+7692,1224873,187
+7693,1225060,140
+7694,1225200,186
+7695,1225386,146
+7696,1225532,242
+7697,1225774,195
+7698,1225969,149
+7699,1226118,144
+7700,1226262,144
+7701,1226406,183
+7702,1226589,117
+7703,1226706,114
+7704,1226820,131
+7705,1226951,103
+7706,1227054,198
+7707,1227252,214
+7708,1227466,153
+7709,1227619,162
+7710,1227781,150
+7711,1227931,129
+7712,1228060,186
+7713,1228246,141
+7714,1228387,147
+7715,1228534,171
+7716,1228705,184
+7717,1228889,213
+7718,1229102,181
+7719,1229283,201
+7720,1229484,150
+7721,1229634,149
+7722,1229783,141
+7723,1229924,164
+7724,1230088,174
+7725,1230262,138
+7726,1230400,121
+7727,1230521,134
+7728,1230655,129
+7729,1230784,168
+7730,1230952,110
+7731,1231062,193
+7732,1231255,135
+7733,1231390,160
+7734,1231550,102
+7735,1231652,147
+7736,1231799,211
+7737,1232010,144
+7738,1232154,131
+7739,1232285,132
+7740,1232417,131
+7741,1232548,155
+7742,1232703,150
+7743,1232853,56
+7744,1232909,211
+7745,1233120,233
+7746,1233353,114
+7747,1233467,144
+7748,1233611,130
+7749,1233741,170
+7750,1233911,132
+7751,1234043,187
+7752,1234230,110
+7753,1234340,144
+7754,1234484,144
+7755,1234628,141
+7756,1234769,186
+7757,1234955,162
+7758,1235117,186
+7759,1235303,134
+7760,1235437,138
+7761,1235575,137
+7762,1235712,148
+7763,1235860,180
+7764,1236040,163
+7765,1236203,181
+7766,1236384,155
+7767,1236539,149
+7768,1236688,172
+7769,1236860,168
+7770,1237028,132
+7771,1237160,145
+7772,1237305,151
+7773,1237456,123
+7774,1237579,147
+7775,1237726,130
+7776,1237856,168
+7777,1238024,116
+7778,1238140,124
+7779,1238264,131
+7780,1238395,160
+7781,1238555,160
+7782,1238715,169
+7783,1238884,160
+7784,1239044,177
+7785,1239221,138
+7786,1239359,199
+7787,1239558,185
+7788,1239743,140
+7789,1239883,149
+7790,1240032,215
+7791,1240247,161
+7792,1240408,181
+7793,1240589,151
+7794,1240740,132
+7795,1240872,190
+7796,1241062,134
+7797,1241196,145
+7798,1241341,162
+7799,1241503,116
+7800,1241619,204
+7801,1241823,144
+7802,1241967,144
+7803,1242111,130
+7804,1242241,190
+7805,1242431,169
+7806,1242600,129
+7807,1242729,158
+7808,1242887,154
+7809,1243041,179
+7810,1243220,164
+7811,1243384,211
+7812,1243595,160
+7813,1243755,147
+7814,1243902,151
+7815,1244053,169
+7816,1244222,169
+7817,1244391,171
+7818,1244562,117
+7819,1244679,198
+7820,1244877,155
+7821,1245032,156
+7822,1245188,126
+7823,1245314,127
+7824,1245441,184
+7825,1245625,174
+7826,1245799,128
+7827,1245927,152
+7828,1246079,194
+7829,1246273,184
+7830,1246457,155
+7831,1246612,243
+7832,1246855,192
+7833,1247047,192
+7834,1247239,143
+7835,1247382,137
+7836,1247519,163
+7837,1247682,169
+7838,1247851,186
+7839,1248037,181
+7840,1248218,107
+7841,1248325,115
+7842,1248440,145
+7843,1248585,132
+7844,1248717,132
+7845,1248849,204
+7846,1249053,225
+7847,1249278,159
+7848,1249437,229
+7849,1249666,160
+7850,1249826,148
+7851,1249974,123
+7852,1250097,171
+7853,1250268,168
+7854,1250436,174
+7855,1250610,127
+7856,1250737,133
+7857,1250870,147
+7858,1251017,163
+7859,1251180,137
+7860,1251317,185
+7861,1251502,201
+7862,1251703,147
+7863,1251850,180
+7864,1252030,186
+7865,1252216,242
+7866,1252458,148
+7867,1252606,166
+7868,1252772,208
+7869,1252980,144
+7870,1253124,144
+7871,1253268,141
+7872,1253409,165
+7873,1253574,168
+7874,1253742,124
+7875,1253866,131
+7876,1253997,132
+7877,1254129,163
+7878,1254292,162
+7879,1254454,119
+7880,1254573,216
+7881,1254789,132
+7882,1254921,129
+7883,1255050,172
+7884,1255222,126
+7885,1255348,151
+7886,1255499,201
+7887,1255700,190
+7888,1255890,110
+7889,1256000,139
+7890,1256139,200
+7891,1256339,185
+7892,1256524,150
+7893,1256674,140
+7894,1256814,126
+7895,1256940,172
+7896,1257112,158
+7897,1257270,178
+7898,1257448,170
+7899,1257618,157
+7900,1257775,170
+7901,1257945,119
+7902,1258064,177
+7903,1258241,185
+7904,1258426,127
+7905,1258553,169
+7906,1258722,169
+7907,1258891,207
+7908,1259098,153
+7909,1259251,146
+7910,1259397,217
+7911,1259614,137
+7912,1259751,120
+7913,1259871,156
+7914,1260027,146
+7915,1260173,138
+7916,1260311,231
+7917,1260542,155
+7918,1260697,165
+7919,1260862,255
+7920,1261117,151
+7921,1261268,138
+7922,1261406,141
+7923,1261547,139
+7924,1261686,191
+7925,1261877,172
+7926,1262049,144
+7927,1262193,144
+7928,1262337,140
+7929,1262477,177
+7930,1262654,158
+7931,1262812,170
+7932,1262982,168
+7933,1263150,116
+7934,1263266,123
+7935,1263389,169
+7936,1263558,133
+7937,1263691,133
+7938,1263824,176
+7939,1264000,114
+7940,1264114,157
+7941,1264271,164
+7942,1264435,161
+7943,1264596,142
+7944,1264738,120
+7945,1264858,188
+7946,1265046,138
+7947,1265184,217
+7948,1265401,194
+7949,1265595,172
+7950,1265767,152
+7951,1265919,156
+7952,1266075,243
+7953,1266318,163
+7954,1266481,143
+7955,1266624,147
+7956,1266771,145
+7957,1266916,131
+7958,1267047,177
+7959,1267224,158
+7960,1267382,191
+7961,1267573,174
+7962,1267747,167
+7963,1267914,187
+7964,1268101,162
+7965,1268263,184
+7966,1268447,180
+7967,1268627,199
+7968,1268826,147
+7969,1268973,256
+7970,1269229,159
+7971,1269388,122
+7972,1269510,202
+7973,1269712,128
+7974,1269840,144
+7975,1269984,144
+7976,1270128,158
+7977,1270286,153
+7978,1270439,139
+7979,1270578,174
+7980,1270752,159
+7981,1270911,179
+7982,1271090,173
+7983,1271263,140
+7984,1271403,128
+7985,1271531,120
+7986,1271651,160
+7987,1271811,138
+7988,1271949,204
+7989,1272153,127
+7990,1272280,179
+7991,1272459,181
+7992,1272640,181
+7993,1272821,204
+7994,1273025,187
+7995,1273212,160
+7996,1273372,160
+7997,1273532,114
+7998,1273646,143
+7999,1273789,107
+8000,1273896,141
+8001,1274037,138
+8002,1274175,168
+8003,1274343,177
+8004,1274520,153
+8005,1274673,122
+8006,1274795,123
+8007,1274918,176
+8008,1275094,149
+8009,1275243,166
+8010,1275409,127
+8011,1275536,130
+8012,1275666,148
+8013,1275814,146
+8014,1275960,134
+8015,1276094,174
+8016,1276268,123
+8017,1276391,148
+8018,1276539,201
+8019,1276740,225
+8020,1276965,142
+8021,1277107,256
+8022,1277363,206
+8023,1277569,177
+8024,1277746,162
+8025,1277908,153
+8026,1278061,149
+8027,1278210,140
+8028,1278350,132
+8029,1278482,132
+8030,1278614,190
+8031,1278804,130
+8032,1278934,180
+8033,1279114,217
+8034,1279331,136
+8035,1279467,148
+8036,1279615,204
+8037,1279819,184
+8038,1280003,131
+8039,1280134,131
+8040,1280265,146
+8041,1280411,220
+8042,1280631,158
+8043,1280789,145
+8044,1280934,144
+8045,1281078,144
+8046,1281222,175
+8047,1281397,331
+8048,1281728,171
+8049,1281899,163
+8050,1282062,173
+8051,1282235,223
+8052,1282458,132
+8053,1282590,153
+8054,1282743,150
+8055,1282893,120
+8056,1283013,173
+8057,1283186,138
+8058,1283324,149
+8059,1283473,166
+8060,1283639,114
+8061,1283753,139
+8062,1283892,156
+8063,1284048,167
+8064,1284215,126
+8065,1284341,158
+8066,1284499,228
+8067,1284727,213
+8068,1284940,166
+8069,1285106,153
+8070,1285259,120
+8071,1285379,151
+8072,1285530,162
+8073,1285692,125
+8074,1285817,204
+8075,1286021,159
+8076,1286180,148
+8077,1286328,180
+8078,1286508,135
+8079,1286643,201
+8080,1286844,159
+8081,1287003,163
+8082,1287166,146
+8083,1287312,153
+8084,1287465,174
+8085,1287639,134
+8086,1287773,184
+8087,1287957,129
+8088,1288086,131
+8089,1288217,176
+8090,1288393,143
+8091,1288536,172
+8092,1288708,118
+8093,1288826,144
+8094,1288970,144
+8095,1289114,154
+8096,1289268,129
+8097,1289397,127
+8098,1289524,180
+8099,1289704,183
+8100,1289887,206
+8101,1290093,157
+8102,1290250,107
+8103,1290357,172
+8104,1290529,155
+8105,1290684,143
+8106,1290827,133
+8107,1290960,174
+8108,1291134,141
+8109,1291275,166
+8110,1291441,174
+8111,1291615,152
+8112,1291767,131
+8113,1291898,140
+8114,1292038,179
+8115,1292217,121
+8116,1292338,139
+8117,1292477,149
+8118,1292626,177
+8119,1292803,198
+8120,1293001,183
+8121,1293184,130
+8122,1293314,206
+8123,1293520,169
+8124,1293689,143
+8125,1293832,157
+8126,1293989,218
+8127,1294207,236
+8128,1294443,152
+8129,1294595,191
+8130,1294786,195
+8131,1294981,149
+8132,1295130,132
+8133,1295262,160
+8134,1295422,166
+8135,1295588,203
+8136,1295791,212
+8137,1296003,144
+8138,1296147,144
+8139,1296291,138
+8140,1296429,169
+8141,1296598,153
+8142,1296751,151
+8143,1296902,159
+8144,1297061,181
+8145,1297242,126
+8146,1297368,214
+8147,1297582,142
+8148,1297724,132
+8149,1297856,148
+8150,1298004,136
+8151,1298140,130
+8152,1298270,200
+8153,1298470,194
+8154,1298664,138
+8155,1298802,145
+8156,1298947,132
+8157,1299079,145
+8158,1299224,132
+8159,1299356,132
+8160,1299488,137
+8161,1299625,190
+8162,1299815,190
+8163,1300005,146
+8164,1300151,166
+8165,1300317,133
+8166,1300450,186
+8167,1300636,118
+8168,1300754,184
+8169,1300938,134
+8170,1301072,188
+8171,1301260,148
+8172,1301408,144
+8173,1301552,140
+8174,1301692,147
+8175,1301839,157
+8176,1301996,151
+8177,1302147,151
+8178,1302298,172
+8179,1302470,124
+8180,1302594,159
+8181,1302753,159
+8182,1302912,150
+8183,1303062,191
+8184,1303253,253
+8185,1303506,179
+8186,1303685,178
+8187,1303863,227
+8188,1304090,128
+8189,1304218,224
+8190,1304442,158
+8191,1304600,149
+8192,1304749,175
+8193,1304924,147
+8194,1305071,215
+8195,1305286,168
+8196,1305454,156
+8197,1305610,140
+8198,1305750,166
+8199,1305916,126
+8200,1306042,165
+8201,1306207,157
+8202,1306364,159
+8203,1306523,152
+8204,1306675,157
+8205,1306832,125
+8206,1306957,168
+8207,1307125,148
+8208,1307273,165
+8209,1307438,159
+8210,1307597,152
+8211,1307749,164
+8212,1307913,199
+8213,1308112,157
+8214,1308269,183
+8215,1308452,131
+8216,1308583,184
+8217,1308767,119
+8218,1308886,156
+8219,1309042,180
+8220,1309222,137
+8221,1309359,150
+8222,1309509,158
+8223,1309667,153
+8224,1309820,183
+8225,1310003,185
+8226,1310188,148
+8227,1310336,152
+8228,1310488,167
+8229,1310655,158
+8230,1310813,149
+8231,1310962,222
+8232,1311184,159
+8233,1311343,191
+8234,1311534,139
+8235,1311673,215
+8236,1311888,193
+8237,1312081,132
+8238,1312213,144
+8239,1312357,189
+8240,1312546,155
+8241,1312701,123
+8242,1312824,187
+8243,1313011,166
+8244,1313177,154
+8245,1313331,161
+8246,1313492,138
+8247,1313630,167
+8248,1313797,199
+8249,1313996,124
+8250,1314120,163
+8251,1314283,161
+8252,1314444,117
+8253,1314561,151
+8254,1314712,162
+8255,1314874,142
+8256,1315016,188
+8257,1315204,145
+8258,1315349,142
+8259,1315491,180
+8260,1315671,141
+8261,1315812,152
+8262,1315964,142
+8263,1316106,141
+8264,1316247,154
+8265,1316401,161
+8266,1316562,144
+8267,1316706,202
+8268,1316908,159
+8269,1317067,135
+8270,1317202,177
+8271,1317379,192
+8272,1317571,156
+8273,1317727,145
+8274,1317872,143
+8275,1318015,162
+8276,1318177,135
+8277,1318312,158
+8278,1318470,149
+8279,1318619,149
+8280,1318768,133
+8281,1318901,154
+8282,1319055,134
+8283,1319189,137
+8284,1319326,167
+8285,1319493,133
+8286,1319626,162
+8287,1319788,153
+8288,1319941,141
+8289,1320082,142
+8290,1320224,163
+8291,1320387,156
+8292,1320543,157
+8293,1320700,151
+8294,1320851,149
+8295,1321000,56
+8296,1321056,115
+8297,1321171,172
+8298,1321343,146
+8299,1321489,169
+8300,1321658,159
+8301,1321817,145
+8302,1321962,117
+8303,1322079,157
+8304,1322236,140
+8305,1322376,111
+8306,1322487,150
+8307,1322637,160
+8308,1322797,171
+8309,1322968,173
+8310,1323141,149
+8311,1323290,150
+8312,1323440,190
+8313,1323630,118
+8314,1323748,156
+8315,1323904,154
+8316,1324058,118
+8317,1324176,162
+8318,1324338,145
+8319,1324483,176
+8320,1324659,166
+8321,1324825,145
+8322,1324970,146
+8323,1325116,170
+8324,1325286,144
+8325,1325430,136
+8326,1325566,195
+8327,1325761,164
+8328,1325925,168
+8329,1326093,162
+8330,1326255,176
+8331,1326431,174
+8332,1326605,151
+8333,1326756,126
+8334,1326882,193
+8335,1327075,131
+8336,1327206,177
+8337,1327383,170
+8338,1327553,144
+8339,1327697,178
+8340,1327875,142
+8341,1328017,197
+8342,1328214,126
+8343,1328340,155
+8344,1328495,113
+8345,1328608,161
+8346,1328769,141
+8347,1328910,148
+8348,1329058,152
+8349,1329210,162
+8350,1329372,208
+8351,1329580,168
+8352,1329748,145
+8353,1329893,144
+8354,1330037,143
+8355,1330180,132
+8356,1330312,144
+8357,1330456,137
+8358,1330593,142
+8359,1330735,166
+8360,1330901,172
+8361,1331073,191
+8362,1331264,176
+8363,1331440,160
+8364,1331600,172
+8365,1331772,124
+8366,1331896,161
+8367,1332057,142
+8368,1332199,148
+8369,1332347,146
+8370,1332493,209
+8371,1332702,174
+8372,1332876,132
+8373,1333008,171
+8374,1333179,143
+8375,1333322,141
+8376,1333463,149
+8377,1333612,138
+8378,1333750,197
+8379,1333947,145
+8380,1334092,167
+8381,1334259,154
+8382,1334413,150
+8383,1334563,147
+8384,1334710,156
+8385,1334866,127
+8386,1334993,167
+8387,1335160,154
+8388,1335314,132
+8389,1335446,136
+8390,1335582,126
+8391,1335708,174
+8392,1335882,155
+8393,1336037,135
+8394,1336172,138
+8395,1336310,168
+8396,1336478,166
+8397,1336644,151
+8398,1336795,160
+8399,1336955,164
+8400,1337119,149
+8401,1337268,203
+8402,1337471,168
+8403,1337639,193
+8404,1337832,178
+8405,1338010,113
+8406,1338123,138
+8407,1338261,184
+8408,1338445,145
+8409,1338590,178
+8410,1338768,161
+8411,1338929,151
+8412,1339080,170
+8413,1339250,148
+8414,1339398,210
+8415,1339608,163
+8416,1339771,163
+8417,1339934,143
+8418,1340077,173
+8419,1340250,163
+8420,1340413,197
+8421,1340610,136
+8422,1340746,139
+8423,1340885,197
+8424,1341082,144
+8425,1341226,144
+8426,1341370,178
+8427,1341548,161
+8428,1341709,167
+8429,1341876,166
+8430,1342042,145
+8431,1342187,144
+8432,1342331,205
+8433,1342536,165
+8434,1342701,154
+8435,1342855,148
+8436,1343003,160
+8437,1343163,128
+8438,1343291,197
+8439,1343488,122
+8440,1343610,167
+8441,1343777,165
+8442,1343942,153
+8443,1344095,160
+8444,1344255,116
+8445,1344371,161
+8446,1344532,211
+8447,1344743,157
+8448,1344900,197
+8449,1345097,207
+8450,1345304,150
+8451,1345454,167
+8452,1345621,149
+8453,1345770,143
+8454,1345913,141
+8455,1346054,162
+8456,1346216,132
+8457,1346348,132
+8458,1346480,157
+8459,1346637,171
+8460,1346808,164
+8461,1346972,160
+8462,1347132,133
+8463,1347265,144
+8464,1347409,149
+8465,1347558,134
+8466,1347692,148
+8467,1347840,145
+8468,1347985,177
+8469,1348162,171
+8470,1348333,190
+8471,1348523,149
+8472,1348672,164
+8473,1348836,168
+8474,1349004,154
+8475,1349158,144
+8476,1349302,144
+8477,1349446,119
+8478,1349565,132
+8479,1349697,184
+8480,1349881,158
+8481,1350039,122
+8482,1350161,161
+8483,1350322,149
+8484,1350471,161
+8485,1350632,175
+8486,1350807,230
+8487,1351037,229
+8488,1351266,150
+8489,1351416,146
+8490,1351562,144
+8491,1351706,108
+8492,1351814,227
+8493,1352041,159
+8494,1352200,142
+8495,1352342,134
+8496,1352476,184
+8497,1352660,144
+8498,1352804,143
+8499,1352947,154
+8500,1353101,151
+8501,1353252,122
+8502,1353374,188
+8503,1353562,140
+8504,1353702,122
+8505,1353824,138
+8506,1353962,177
+8507,1354139,144
+8508,1354283,147
+8509,1354430,170
+8510,1354600,132
+8511,1354732,189
+8512,1354921,176
+8513,1355097,110
+8514,1355207,162
+8515,1355369,132
+8516,1355501,149
+8517,1355650,196
+8518,1355846,126
+8519,1355972,155
+8520,1356127,170
+8521,1356297,181
+8522,1356478,162
+8523,1356640,247
+8524,1356887,192
+8525,1357079,253
+8526,1357332,179
+8527,1357511,151
+8528,1357662,167
+8529,1357829,189
+8530,1358018,181
+8531,1358199,132
+8532,1358331,173
+8533,1358504,144
+8534,1358648,144
+8535,1358792,164
+8536,1358956,201
+8537,1359157,141
+8538,1359298,153
+8539,1359451,125
+8540,1359576,160
+8541,1359736,160
+8542,1359896,107
+8543,1360003,137
+8544,1360140,207
+8545,1360347,157
+8546,1360504,138
+8547,1360642,164
+8548,1360806,222
+8549,1361028,141
+8550,1361169,127
+8551,1361296,192
+8552,1361488,141
+8553,1361629,148
+8554,1361777,160
+8555,1361937,160
+8556,1362097,132
+8557,1362229,158
+8558,1362387,245
+8559,1362632,136
+8560,1362768,132
+8561,1362900,223
+8562,1363123,144
+8563,1363267,166
+8564,1363433,153
+8565,1363586,197
+8566,1363783,154
+8567,1363937,146
+8568,1364083,161
+8569,1364244,119
+8570,1364363,198
+8571,1364561,108
+8572,1364669,121
+8573,1364790,174
+8574,1364964,161
+8575,1365125,163
+8576,1365288,132
+8577,1365420,187
+8578,1365607,146
+8579,1365753,136
+8580,1365889,126
+8581,1366015,177
+8582,1366192,145
+8583,1366337,133
+8584,1366470,150
+8585,1366620,135
+8586,1366755,189
+8587,1366944,173
+8588,1367117,128
+8589,1367245,188
+8590,1367433,167
+8591,1367600,209
+8592,1367809,147
+8593,1367956,170
+8594,1368126,254
+8595,1368380,124
+8596,1368504,127
+8597,1368631,151
+8598,1368782,136
+8599,1368918,178
+8600,1369096,199
+8601,1369295,105
+8602,1369400,176
+8603,1369576,132
+8604,1369708,163
+8605,1369871,129
+8606,1370000,166
+8607,1370166,127
+8608,1370293,144
+8609,1370437,144
+8610,1370581,132
+8611,1370713,122
+8612,1370835,130
+8613,1370965,171
+8614,1371136,118
+8615,1371254,214
+8616,1371468,164
+8617,1371632,176
+8618,1371808,132
+8619,1371940,134
+8620,1372074,206
+8621,1372280,120
+8622,1372400,168
+8623,1372568,138
+8624,1372706,162
+8625,1372868,174
+8626,1373042,135
+8627,1373177,125
+8628,1373302,172
+8629,1373474,132
+8630,1373606,171
+8631,1373777,165
+8632,1373942,159
+8633,1374101,153
+8634,1374254,147
+8635,1374401,145
+8636,1374546,112
+8637,1374658,155
+8638,1374813,229
+8639,1375042,194
+8640,1375236,201
+8641,1375437,154
+8642,1375591,170
+8643,1375761,171
+8644,1375932,133
+8645,1376065,143
+8646,1376208,190
+8647,1376398,118
+8648,1376516,136
+8649,1376652,212
+8650,1376864,192
+8651,1377056,167
+8652,1377223,153
+8653,1377376,136
+8654,1377512,144
+8655,1377656,136
+8656,1377792,187
+8657,1377979,169
+8658,1378148,169
+8659,1378317,187
+8660,1378504,148
+8661,1378652,128
+8662,1378780,131
+8663,1378911,144
+8664,1379055,144
+8665,1379199,154
+8666,1379353,167
+8667,1379520,222
+8668,1379742,138
+8669,1379880,161
+8670,1380041,169
+8671,1380210,152
+8672,1380362,161
+8673,1380523,143
+8674,1380666,164
+8675,1380830,144
+8676,1380974,134
+8677,1381108,133
+8678,1381241,172
+8679,1381413,200
+8680,1381613,179
+8681,1381792,124
+8682,1381916,136
+8683,1382052,144
+8684,1382196,138
+8685,1382334,125
+8686,1382459,165
+8687,1382624,159
+8688,1382783,153
+8689,1382936,127
+8690,1383063,217
+8691,1383280,109
+8692,1383389,149
+8693,1383538,175
+8694,1383713,149
+8695,1383862,158
+8696,1384020,151
+8697,1384171,147
+8698,1384318,143
+8699,1384461,146
+8700,1384607,132
+8701,1384739,113
+8702,1384852,132
+8703,1384984,134
+8704,1385118,175
+8705,1385293,140
+8706,1385433,147
+8707,1385580,163
+8708,1385743,132
+8709,1385875,168
+8710,1386043,133
+8711,1386176,159
+8712,1386335,142
+8713,1386477,167
+8714,1386644,142
+8715,1386786,206
+8716,1386992,144
+8717,1387136,144
+8718,1387280,183
+8719,1387463,185
+8720,1387648,132
+8721,1387780,134
+8722,1387914,168
+8723,1388082,173
+8724,1388255,183
+8725,1388438,156
+8726,1388594,178
+8727,1388772,134
+8728,1388906,127
+8729,1389033,132
+8730,1389165,139
+8731,1389304,155
+8732,1389459,56
+8733,1389515,214
+8734,1389729,197
+8735,1389926,200
+8736,1390126,176
+8737,1390302,138
+8738,1390440,141
+8739,1390581,168
+8740,1390749,194
+8741,1390943,156
+8742,1391099,139
+8743,1391238,157
+8744,1391395,159
+8745,1391554,145
+8746,1391699,135
+8747,1391834,130
+8748,1391964,144
+8749,1392108,128
+8750,1392236,122
+8751,1392358,166
+8752,1392524,149
+8753,1392673,170
+8754,1392843,208
+8755,1393051,145
+8756,1393196,152
+8757,1393348,139
+8758,1393487,122
+8759,1393609,158
+8760,1393767,146
+8761,1393913,181
+8762,1394094,187
+8763,1394281,158
+8764,1394439,151
+8765,1394590,160
+8766,1394750,137
+8767,1394887,137
+8768,1395024,159
+8769,1395183,124
+8770,1395307,141
+8771,1395448,184
+8772,1395632,239
+8773,1395871,133
+8774,1396004,228
+8775,1396232,167
+8776,1396399,159
+8777,1396558,157
+8778,1396715,128
+8779,1396843,194
+8780,1397037,155
+8781,1397192,180
+8782,1397372,145
+8783,1397517,188
+8784,1397705,171
+8785,1397876,151
+8786,1398027,155
+8787,1398182,149
+8788,1398331,147
+8789,1398478,144
+8790,1398622,144
+8791,1398766,168
+8792,1398934,150
+8793,1399084,213
+8794,1399297,123
+8795,1399420,146
+8796,1399566,226
+8797,1399792,225
+8798,1400017,168
+8799,1400185,187
+8800,1400372,160
+8801,1400532,181
+8802,1400713,143
+8803,1400856,181
+8804,1401037,153
+8805,1401190,132
+8806,1401322,132
+8807,1401454,146
+8808,1401600,190
+8809,1401790,190
+8810,1401980,134
+8811,1402114,146
+8812,1402260,169
+8813,1402429,223
+8814,1402652,216
+8815,1402868,216
+8816,1403084,152
+8817,1403236,181
+8818,1403417,170
+8819,1403587,172
+8820,1403759,122
+8821,1403881,157
+8822,1404038,127
+8823,1404165,152
+8824,1404317,296
+8825,1404613,150
+8826,1404763,134
+8827,1404897,139
+8828,1405036,166
+8829,1405202,119
+8830,1405321,197
+8831,1405518,152
+8832,1405670,122
+8833,1405792,158
+8834,1405950,147
+8835,1406097,143
+8836,1406240,192
+8837,1406432,166
+8838,1406598,126
+8839,1406724,157
+8840,1406881,154
+8841,1407035,145
+8842,1407180,182
+8843,1407362,198
+8844,1407560,152
+8845,1407712,150
+8846,1407862,118
+8847,1407980,130
+8848,1408110,144
+8849,1408254,144
+8850,1408398,122
+8851,1408520,189
+8852,1408709,160
+8853,1408869,160
+8854,1409029,156
+8855,1409185,155
+8856,1409340,166
+8857,1409506,154
+8858,1409660,133
+8859,1409793,206
+8860,1409999,166
+8861,1410165,180
+8862,1410345,208
+8863,1410553,148
+8864,1410701,157
+8865,1410858,225
+8866,1411083,180
+8867,1411263,175
+8868,1411438,121
+8869,1411559,147
+8870,1411706,197
+8871,1411903,152
+8872,1412055,125
+8873,1412180,157
+8874,1412337,155
+8875,1412492,216
+8876,1412708,184
+8877,1412892,162
+8878,1413054,133
+8879,1413187,147
+8880,1413334,172
+8881,1413506,109
+8882,1413615,154
+8883,1413769,117
+8884,1413886,166
+8885,1414052,153
+8886,1414205,163
+8887,1414368,164
+8888,1414532,171
+8889,1414703,174
+8890,1414877,166
+8891,1415043,148
+8892,1415191,132
+8893,1415323,144
+8894,1415467,144
+8895,1415611,216
+8896,1415827,280
+8897,1416107,147
+8898,1416254,190
+8899,1416444,173
+8900,1416617,111
+8901,1416728,191
+8902,1416919,136
+8903,1417055,169
+8904,1417224,148
+8905,1417372,143
+8906,1417515,168
+8907,1417683,132
+8908,1417815,158
+8909,1417973,201
+8910,1418174,207
+8911,1418381,167
+8912,1418548,131
+8913,1418679,154
+8914,1418833,219
+8915,1419052,151
+8916,1419203,139
+8917,1419342,226
+8918,1419568,131
+8919,1419699,155
+8920,1419854,295
+8921,1420149,197
+8922,1420346,147
+8923,1420493,156
+8924,1420649,157
+8925,1420806,149
+8926,1420955,148
+8927,1421103,131
+8928,1421234,170
+8929,1421404,135
+8930,1421539,152
+8931,1421691,145
+8932,1421836,199
+8933,1422035,181
+8934,1422216,257
+8935,1422473,150
+8936,1422623,206
+8937,1422829,153
+8938,1422982,144
+8939,1423126,118
+8940,1423244,204
+8941,1423448,151
+8942,1423599,162
+8943,1423761,131
+8944,1423892,162
+8945,1424054,56
+8946,1424110,136
+8947,1424246,145
+8948,1424391,170
+8949,1424561,161
+8950,1424722,175
+8951,1424897,132
+8952,1425029,146
+8953,1425175,142
+8954,1425317,160
+8955,1425477,160
+8956,1425637,132
+8957,1425769,132
+8958,1425901,180
+8959,1426081,133
+8960,1426214,197
+8961,1426411,187
+8962,1426598,153
+8963,1426751,179
+8964,1426930,144
+8965,1427074,144
+8966,1427218,151
+8967,1427369,220
+8968,1427589,226
+8969,1427815,169
+8970,1427984,139
+8971,1428123,132
+8972,1428255,176
+8973,1428431,146
+8974,1428577,123
+8975,1428700,170
+8976,1428870,186
+8977,1429056,181
+8978,1429237,124
+8979,1429361,191
+8980,1429552,160
+8981,1429712,160
+8982,1429872,172
+8983,1430044,149
+8984,1430193,109
+8985,1430302,128
+8986,1430430,135
+8987,1430565,157
+8988,1430722,137
+8989,1430859,164
+8990,1431023,196
+8991,1431219,263
+8992,1431482,137
+8993,1431619,159
+8994,1431778,169
+8995,1431947,111
+8996,1432058,190
+8997,1432248,127
+8998,1432375,192
+8999,1432567,184
+9000,1432751,223
+9001,1432974,128
+9002,1433102,178
+9003,1433280,111
+9004,1433391,138
+9005,1433529,138
+9006,1433667,173
+9007,1433840,199
+9008,1434039,184
+9009,1434223,160
+9010,1434383,124
+9011,1434507,144
+9012,1434651,144
+9013,1434795,177
+9014,1434972,141
+9015,1435113,150
+9016,1435263,129
+9017,1435392,153
+9018,1435545,169
+9019,1435714,167
+9020,1435881,118
+9021,1435999,117
+9022,1436116,151
+9023,1436267,134
+9024,1436401,185
+9025,1436586,251
+9026,1436837,150
+9027,1436987,105
+9028,1437092,175
+9029,1437267,166
+9030,1437433,115
+9031,1437548,166
+9032,1437714,134
+9033,1437848,213
+9034,1438061,56
+9035,1438117,188
+9036,1438305,131
+9037,1438436,196
+9038,1438632,195
+9039,1438827,214
+9040,1439041,116
+9041,1439157,121
+9042,1439278,140
+9043,1439418,178
+9044,1439596,162
+9045,1439758,206
+9046,1439964,139
+9047,1440103,188
+9048,1440291,120
+9049,1440411,252
+9050,1440663,219
+9051,1440882,140
+9052,1441022,128
+9053,1441150,144
+9054,1441294,144
+9055,1441438,165
+9056,1441603,185
+9057,1441788,146
+9058,1441934,143
+9059,1442077,216
+9060,1442293,169
+9061,1442462,140
+9062,1442602,223
+9063,1442825,134
+9064,1442959,122
+9065,1443081,146
+9066,1443227,157
+9067,1443384,147
+9068,1443531,124
+9069,1443655,135
+9070,1443790,152
+9071,1443942,187
+9072,1444129,149
+9073,1444278,165
+9074,1444443,254
+9075,1444697,148
+9076,1444845,132
+9077,1444977,132
+9078,1445109,149
+9079,1445258,174
+9080,1445432,139
+9081,1445571,231
+9082,1445802,112
+9083,1445914,147
+9084,1446061,138
+9085,1446199,153
+9086,1446352,122
+9087,1446474,126
+9088,1446600,153
+9089,1446753,230
+9090,1446983,220
+9091,1447203,150
+9092,1447353,144
+9093,1447497,119
+9094,1447616,123
+9095,1447739,133
+9096,1447872,154
+9097,1448026,270
+9098,1448296,143
+9099,1448439,195
+9100,1448634,56
+9101,1448690,170
+9102,1448860,145
+9103,1449005,150
+9104,1449155,204
+9105,1449359,174
+9106,1449533,154
+9107,1449687,132
+9108,1449819,159
+9109,1449978,132
+9110,1450110,221
+9111,1450331,156
+9112,1450487,124
+9113,1450611,215
+9114,1450826,162
+9115,1450988,174
+9116,1451162,143
+9117,1451305,207
+9118,1451512,206
+9119,1451718,147
+9120,1451865,179
+9121,1452044,169
+9122,1452213,132
+9123,1452345,132
+9124,1452477,165
+9125,1452642,148
+9126,1452790,127
+9127,1452917,175
+9128,1453092,146
+9129,1453238,225
+9130,1453463,171
+9131,1453634,144
+9132,1453778,144
+9133,1453922,137
+9134,1454059,134
+9135,1454193,166
+9136,1454359,193
+9137,1454552,212
+9138,1454764,174
+9139,1454938,128
+9140,1455066,132
+9141,1455198,160
+9142,1455358,197
+9143,1455555,174
+9144,1455729,196
+9145,1455925,154
+9146,1456079,183
+9147,1456262,146
+9148,1456408,152
+9149,1456560,151
+9150,1456711,134
+9151,1456845,138
+9152,1456983,162
+9153,1457145,129
+9154,1457274,243
+9155,1457517,145
+9156,1457662,124
+9157,1457786,198
+9158,1457984,147
+9159,1458131,121
+9160,1458252,136
+9161,1458388,242
+9162,1458630,143
+9163,1458773,220
+9164,1458993,155
+9165,1459148,233
+9166,1459381,193
+9167,1459574,155
+9168,1459729,150
+9169,1459879,140
+9170,1460019,175
+9171,1460194,217
+9172,1460411,147
+9173,1460558,149
+9174,1460707,169
+9175,1460876,153
+9176,1461029,112
+9177,1461141,141
+9178,1461282,190
+9179,1461472,128
+9180,1461600,185
+9181,1461785,149
+9182,1461934,157
+9183,1462091,124
+9184,1462215,143
+9185,1462358,151
+9186,1462509,166
+9187,1462675,139
+9188,1462814,173
+9189,1462987,197
+9190,1463184,133
+9191,1463317,117
+9192,1463434,187
+9193,1463621,140
+9194,1463761,144
+9195,1463905,144
+9196,1464049,140
+9197,1464189,132
+9198,1464321,132
+9199,1464453,150
+9200,1464603,236
+9201,1464839,166
+9202,1465005,161
+9203,1465166,154
+9204,1465320,118
+9205,1465438,126
+9206,1465564,197
+9207,1465761,56
+9208,1465817,209
+9209,1466026,182
+9210,1466208,153
+9211,1466361,148
+9212,1466509,156
+9213,1466665,153
+9214,1466818,129
+9215,1466947,202
+9216,1467149,138
+9217,1467287,167
+9218,1467454,133
+9219,1467587,132
+9220,1467719,132
+9221,1467851,132
+9222,1467983,179
+9223,1468162,124
+9224,1468286,144
+9225,1468430,140
+9226,1468570,147
+9227,1468717,141
+9228,1468858,128
+9229,1468986,133
+9230,1469119,193
+9231,1469312,170
+9232,1469482,176
+9233,1469658,156
+9234,1469814,224
+9235,1470038,144
+9236,1470182,144
+9237,1470326,146
+9238,1470472,172
+9239,1470644,157
+9240,1470801,154
+9241,1470955,56
+9242,1471011,145
+9243,1471156,180
+9244,1471336,195
+9245,1471531,181
+9246,1471712,155
+9247,1471867,159
+9248,1472026,136
+9249,1472162,184
+9250,1472346,174
+9251,1472520,218
+9252,1472738,187
+9253,1472925,278
+9254,1473203,150
+9255,1473353,170
+9256,1473523,121
+9257,1473644,181
+9258,1473825,159
+9259,1473984,191
+9260,1474175,189
+9261,1474364,140
+9262,1474504,146
+9263,1474650,138
+9264,1474788,168
+9265,1474956,164
+9266,1475120,194
+9267,1475314,155
+9268,1475469,139
+9269,1475608,176
+9270,1475784,124
+9271,1475908,151
+9272,1476059,154
+9273,1476213,218
+9274,1476431,150
+9275,1476581,133
+9276,1476714,132
+9277,1476846,173
+9278,1477019,56
+9279,1477075,118
+9280,1477193,148
+9281,1477341,164
+9282,1477505,136
+9283,1477641,138
+9284,1477779,160
+9285,1477939,157
+9286,1478096,142
+9287,1478238,130
+9288,1478368,171
+9289,1478539,264
+9290,1478803,146
+9291,1478949,148
+9292,1479097,163
+9293,1479260,187
+9294,1479447,159
+9295,1479606,194
+9296,1479800,144
+9297,1479944,144
+9298,1480088,153
+9299,1480241,119
+9300,1480360,188
+9301,1480548,132
+9302,1480680,121
+9303,1480801,174
+9304,1480975,154
+9305,1481129,159
+9306,1481288,190
+9307,1481478,209
+9308,1481687,170
+9309,1481857,175
+9310,1482032,176
+9311,1482208,179
+9312,1482387,194
+9313,1482581,185
+9314,1482766,182
+9315,1482948,141
+9316,1483089,137
+9317,1483226,144
+9318,1483370,120
+9319,1483490,155
+9320,1483645,218
+9321,1483863,127
+9322,1483990,185
+9323,1484175,166
+9324,1484341,149
+9325,1484490,154
+9326,1484644,140
+9327,1484784,139
+9328,1484923,137
+9329,1485060,186
+9330,1485246,138
+9331,1485384,169
+9332,1485553,152
+9333,1485705,204
+9334,1485909,142
+9335,1486051,177
+9336,1486228,205
+9337,1486433,161
+9338,1486594,198
+9339,1486792,159
+9340,1486951,133
+9341,1487084,132
+9342,1487216,150
+9343,1487366,143
+9344,1487509,140
+9345,1487649,153
+9346,1487802,152
+9347,1487954,146
+9348,1488100,154
+9349,1488254,142
+9350,1488396,149
+9351,1488545,154
+9352,1488699,205
+9353,1488904,136
+9354,1489040,154
+9355,1489194,182
+9356,1489376,156
+9357,1489532,172
+9358,1489704,118
+9359,1489822,183
+9360,1490005,169
+9361,1490174,153
+9362,1490327,198
+9363,1490525,154
+9364,1490679,201
+9365,1490880,166
+9366,1491046,167
+9367,1491213,144
+9368,1491357,144
+9369,1491501,154
+9370,1491655,277
+9371,1491932,202
+9372,1492134,231
+9373,1492365,186
+9374,1492551,135
+9375,1492686,146
+9376,1492832,132
+9377,1492964,132
+9378,1493096,205
+9379,1493301,163
+9380,1493464,145
+9381,1493609,151
+9382,1493760,144
+9383,1493904,184
+9384,1494088,166
+9385,1494254,160
+9386,1494414,148
+9387,1494562,153
+9388,1494715,227
+9389,1494942,143
+9390,1495085,126
+9391,1495211,150
+9392,1495361,128
+9393,1495489,141
+9394,1495630,125
+9395,1495755,160
+9396,1495915,139
+9397,1496054,143
+9398,1496197,139
+9399,1496336,153
+9400,1496489,163
+9401,1496652,243
+9402,1496895,147
+9403,1497042,179
+9404,1497221,152
+9405,1497373,178
+9406,1497551,161
+9407,1497712,110
+9408,1497822,185
+9409,1498007,195
+9410,1498202,139
+9411,1498341,144
+9412,1498485,144
+9413,1498629,155
+9414,1498784,143
+9415,1498927,153
+9416,1499080,164
+9417,1499244,164
+9418,1499408,132
+9419,1499540,143
+9420,1499683,195
+9421,1499878,141
+9422,1500019,141
+9423,1500160,158
+9424,1500318,217
+9425,1500535,137
+9426,1500672,168
+9427,1500840,128
+9428,1500968,125
+9429,1501093,183
+9430,1501276,160
+9431,1501436,160
+9432,1501596,170
+9433,1501766,138
+9434,1501904,180
+9435,1502084,177
+9436,1502261,143
+9437,1502404,128
+9438,1502532,167
+9439,1502699,137
+9440,1502836,145
+9441,1502981,153
+9442,1503134,183
+9443,1503317,132
+9444,1503449,134
+9445,1503583,166
+9446,1503749,162
+9447,1503911,151
+9448,1504062,134
+9449,1504196,245
+9450,1504441,176
+9451,1504617,173
+9452,1504790,240
+9453,1505030,191
+9454,1505221,180
+9455,1505401,161
+9456,1505562,134
+9457,1505696,231
+9458,1505927,239
+9459,1506166,160
+9460,1506326,176
+9461,1506502,146
+9462,1506648,175
+9463,1506823,144
+9464,1506967,161
+9465,1507128,144
+9466,1507272,163
+9467,1507435,56
+9468,1507491,200
+9469,1507691,177
+9470,1507868,107
+9471,1507975,152
+9472,1508127,124
+9473,1508251,148
+9474,1508399,124
+9475,1508523,175
+9476,1508698,162
+9477,1508860,155
+9478,1509015,156
+9479,1509171,125
+9480,1509296,152
+9481,1509448,150
+9482,1509598,172
+9483,1509770,163
+9484,1509933,127
+9485,1510060,158
+9486,1510218,145
+9487,1510363,172
+9488,1510535,172
+9489,1510707,204
+9490,1510911,165
+9491,1511076,127
+9492,1511203,190
+9493,1511393,140
+9494,1511533,167
+9495,1511700,129
+9496,1511829,172
+9497,1512001,132
+9498,1512133,160
+9499,1512293,157
+9500,1512450,124
+9501,1512574,132
+9502,1512706,145
+9503,1512851,133
+9504,1512984,149
+9505,1513133,173
+9506,1513306,195
+9507,1513501,134
+9508,1513635,210
+9509,1513845,134
+9510,1513979,204
+9511,1514183,134
+9512,1514317,151
+9513,1514468,152
+9514,1514620,163
+9515,1514783,194
+9516,1514977,175
+9517,1515152,181
+9518,1515333,134
+9519,1515467,133
+9520,1515600,164
+9521,1515764,152
+9522,1515916,152
+9523,1516068,134
+9524,1516202,56
+9525,1516258,148
+9526,1516406,164
+9527,1516570,178
+9528,1516748,229
+9529,1516977,127
+9530,1517104,133
+9531,1517237,188
+9532,1517425,121
+9533,1517546,157
+9534,1517703,154
+9535,1517857,56
+9536,1517913,180
+9537,1518093,140
+9538,1518233,173
+9539,1518406,150
+9540,1518556,132
+9541,1518688,144
+9542,1518832,144
+9543,1518976,132
+9544,1519108,132
+9545,1519240,235
+9546,1519475,177
+9547,1519652,124
+9548,1519776,149
+9549,1519925,184
+9550,1520109,209
+9551,1520318,140
+9552,1520458,139
+9553,1520597,129
+9554,1520726,136
+9555,1520862,150
+9556,1521012,147
+9557,1521159,154
+9558,1521313,199
+9559,1521512,142
+9560,1521654,170
+9561,1521824,182
+9562,1522006,146
+9563,1522152,136
+9564,1522288,151
+9565,1522439,163
+9566,1522602,195
+9567,1522797,114
+9568,1522911,186
+9569,1523097,167
+9570,1523264,168
+9571,1523432,147
+9572,1523579,134
+9573,1523713,136
+9574,1523849,169
+9575,1524018,153
+9576,1524171,279
+9577,1524450,134
+9578,1524584,171
+9579,1524755,134
+9580,1524889,190
+9581,1525079,154
+9582,1525233,138
+9583,1525371,120
+9584,1525491,223
+9585,1525714,208
+9586,1525922,134
+9587,1526056,208
+9588,1526264,174
+9589,1526438,145
+9590,1526583,147
+9591,1526730,143
+9592,1526873,162
+9593,1527035,134
+9594,1527169,251
+9595,1527420,181
+9596,1527601,205
+9597,1527806,198
+9598,1528004,220
+9599,1528224,186
+9600,1528410,151
+9601,1528561,166
+9602,1528727,156
+9603,1528883,144
+9604,1529027,144
+9605,1529171,143
+9606,1529314,223
+9607,1529537,144
+9608,1529681,147
+9609,1529828,163
+9610,1529991,157
+9611,1530148,159
+9612,1530307,243
+9613,1530550,111
+9614,1530661,168
+9615,1530829,161
+9616,1530990,163
+9617,1531153,130
+9618,1531283,212
+9619,1531495,160
+9620,1531655,131
+9621,1531786,162
+9622,1531948,124
+9623,1532072,231
+9624,1532303,258
+9625,1532561,142
+9626,1532703,126
+9627,1532829,255
+9628,1533084,146
+9629,1533230,56
+9630,1533286,214
+9631,1533500,163
+9632,1533663,155
+9633,1533818,132
+9634,1533950,159
+9635,1534109,161
+9636,1534270,185
+9637,1534455,143
+9638,1534598,201
+9639,1534799,149
+9640,1534948,209
+9641,1535157,242
+9642,1535399,224
+9643,1535623,182
+9644,1535805,147
+9645,1535952,184
+9646,1536136,159
+9647,1536295,156
+9648,1536451,131
+9649,1536582,176
+9650,1536758,176
+9651,1536934,160
+9652,1537094,144
+9653,1537238,144
+9654,1537382,129
+9655,1537511,186
+9656,1537697,172
+9657,1537869,148
+9658,1538017,151
+9659,1538168,226
+9660,1538394,124
+9661,1538518,173
+9662,1538691,156
+9663,1538847,151
+9664,1538998,146
+9665,1539144,189
+9666,1539333,136
+9667,1539469,142
+9668,1539611,152
+9669,1539763,215
+9670,1539978,145
+9671,1540123,182
+9672,1540305,140
+9673,1540445,243
+9674,1540688,144
+9675,1540832,154
+9676,1540986,257
+9677,1541243,123
+9678,1541366,123
+9679,1541489,132
+9680,1541621,133
+9681,1541754,212
+9682,1541966,162
+9683,1542128,179
+9684,1542307,150
+9685,1542457,174
+9686,1542631,133
+9687,1542764,103
+9688,1542867,172
+9689,1543039,175
+9690,1543214,128
+9691,1543342,234
+9692,1543576,183
+9693,1543759,204
+9694,1543963,183
+9695,1544146,56
+9696,1544202,158
+9697,1544360,235
+9698,1544595,209
+9699,1544804,161
+9700,1544965,136
+9701,1545101,158
+9702,1545259,162
+9703,1545421,161
+9704,1545582,140
+9705,1545722,202
+9706,1545924,120
+9707,1546044,195
+9708,1546239,132
+9709,1546371,145
+9710,1546516,147
+9711,1546663,159
+9712,1546822,201
+9713,1547023,132
+9714,1547155,132
+9715,1547287,203
+9716,1547490,127
+9717,1547617,199
+9718,1547816,164
+9719,1547980,176
+9720,1548156,163
+9721,1548319,163
+9722,1548482,141
+9723,1548623,140
+9724,1548763,204
+9725,1548967,157
+9726,1549124,214
+9727,1549338,151
+9728,1549489,155
+9729,1549644,56
+9730,1549700,134
+9731,1549834,218
+9732,1550052,212
+9733,1550264,114
+9734,1550378,126
+9735,1550504,175
+9736,1550679,124
+9737,1550803,185
+9738,1550988,144
+9739,1551132,144
+9740,1551276,136
+9741,1551412,135
+9742,1551547,153
+9743,1551700,148
+9744,1551848,158
+9745,1552006,113
+9746,1552119,162
+9747,1552281,174
+9748,1552455,155
+9749,1552610,139
+9750,1552749,139
+9751,1552888,129
+9752,1553017,161
+9753,1553178,122
+9754,1553300,209
+9755,1553509,175
+9756,1553684,172
+9757,1553856,201
+9758,1554057,208
+9759,1554265,216
+9760,1554481,133
+9761,1554614,172
+9762,1554786,213
+9763,1554999,182
+9764,1555181,137
+9765,1555318,138
+9766,1555456,166
+9767,1555622,156
+9768,1555778,193
+9769,1555971,214
+9770,1556185,133
+9771,1556318,176
+9772,1556494,166
+9773,1556660,185
+9774,1556845,266
+9775,1557111,162
+9776,1557273,128
+9777,1557401,128
+9778,1557529,168
+9779,1557697,170
+9780,1557867,158
+9781,1558025,128
+9782,1558153,150
+9783,1558303,166
+9784,1558469,202
+9785,1558671,142
+9786,1558813,147
+9787,1558960,158
+9788,1559118,148
+9789,1559266,148
+9790,1559414,157
+9791,1559571,162
+9792,1559733,190
+9793,1559923,154
+9794,1560077,154
+9795,1560231,154
+9796,1560385,154
+9797,1560539,126
+9798,1560665,247
+9799,1560912,161
+9800,1561073,169
+9801,1561242,56
+9802,1561298,128
+9803,1561426,56
+9804,1561482,178
+9805,1561660,219
+9806,1561879,147
+9807,1562026,151
+9808,1562177,121
+9809,1562298,144
+9810,1562442,144
+9811,1562586,167
+9812,1562753,179
+9813,1562932,159
+9814,1563091,162
+9815,1563253,152
+9816,1563405,170
+9817,1563575,155
+9818,1563730,160
+9819,1563890,189
+9820,1564079,193
+9821,1564272,153
+9822,1564425,193
+9823,1564618,169
+9824,1564787,114
+9825,1564901,209
+9826,1565110,159
+9827,1565269,193
+9828,1565462,144
+9829,1565606,155
+9830,1565761,180
+9831,1565941,134
+9832,1566075,132
+9833,1566207,132
+9834,1566339,129
+9835,1566468,220
+9836,1566688,166
+9837,1566854,165
+9838,1567019,137
+9839,1567156,207
+9840,1567363,135
+9841,1567498,187
+9842,1567685,155
+9843,1567840,149
+9844,1567989,160
+9845,1568149,169
+9846,1568318,128
+9847,1568446,108
+9848,1568554,150
+9849,1568704,167
+9850,1568871,244
+9851,1569115,201
+9852,1569316,139
+9853,1569455,265
+9854,1569720,114
+9855,1569834,118
+9856,1569952,168
+9857,1570120,113
+9858,1570233,197
+9859,1570430,201
+9860,1570631,152
+9861,1570783,130
+9862,1570913,164
+9863,1571077,156
+9864,1571233,143
+9865,1571376,170
+12288,1571546,201
+12289,1571747,118
+12290,1571865,154
+12291,1572019,132
+12292,1572151,179
+12293,1572330,156
+12294,1572486,198
+12295,1572684,127
+12296,1572811,145
+12297,1572956,148
+12298,1573104,158
+12299,1573262,181
+12300,1573443,145
+12301,1573588,202
+12302,1573790,135
+12303,1573925,160
+12304,1574085,216
+12305,1574301,156
+12306,1574457,172
+12307,1574629,131
+12308,1574760,131
+12309,1574891,135
+12310,1575026,158
+12311,1575184,152
+12312,1575336,187
+12313,1575523,155
+12314,1575678,150
+12315,1575828,166
+12316,1575994,173
+12317,1576167,142
+12318,1576309,166
+12319,1576475,153
+12320,1576628,126
+12321,1576754,205
+12322,1576959,204
+12323,1577163,171
+12324,1577334,154
+12325,1577488,207
+12326,1577695,140
+12327,1577835,147
+12328,1577982,152
+12329,1578134,166
+12330,1578300,202
+12331,1578502,156
+12332,1578658,160
+12333,1578818,166
+12334,1578984,135
+12335,1579119,153
+12336,1579272,151
+12337,1579423,167
+12338,1579590,137
+12339,1579727,184
+12340,1579911,151
+12341,1580062,157
+12342,1580219,185
+12343,1580404,162
+12344,1580566,117
+12345,1580683,136
+12346,1580819,110
+12347,1580929,207
+12348,1581136,165
+12349,1581301,131
+12350,1581432,123
+12351,1581555,156
+12352,1581711,154
+12353,1581865,192
+12354,1582057,155
+12355,1582212,181
+12356,1582393,138
+12357,1582531,171
+12358,1582702,183
+12359,1582885,181
+12360,1583066,158
+12361,1583224,162
+12362,1583386,122
+12363,1583508,150
+12364,1583658,161
+12365,1583819,109
+12366,1583928,149
+12367,1584077,186
+12368,1584263,148
+12369,1584411,186
+12370,1584597,152
+12371,1584749,122
+12372,1584871,205
+12373,1585076,166
+12374,1585242,124
+12375,1585366,138
+12376,1585504,125
+12377,1585629,133
+12378,1585762,148
+12379,1585910,140
+12380,1586050,166
+12381,1586216,168
+12382,1586384,120
+12383,1586504,117
+12384,1586621,142
+12385,1586763,142
+12386,1586905,175
+12387,1587080,157
+12388,1587237,176
+12389,1587413,153
+12390,1587566,146
+12391,1587712,200
+12392,1587912,183
+12393,1588095,216
+12394,1588311,193
+12395,1588504,153
+12396,1588657,135
+12397,1588792,158
+12398,1588950,135
+12399,1589085,194
+12400,1589279,152
+12401,1589431,154
+12402,1589585,177
+12403,1589762,162
+12404,1589924,145
+12405,1590069,120
+12406,1590189,146
+12407,1590335,136
+12408,1590471,155
+12409,1590626,129
+12410,1590755,211
+12411,1590966,155
+12412,1591121,129
+12413,1591250,137
+12414,1591387,173
+12415,1591560,137
+12416,1591697,155
+12417,1591852,166
+12418,1592018,208
+12419,1592226,145
+12420,1592371,183
+12421,1592554,147
+12422,1592701,157
+12423,1592858,145
+12424,1593003,161
+12425,1593164,163
+12426,1593327,144
+12427,1593471,131
+12428,1593602,153
+12429,1593755,149
+12430,1593904,176
+12431,1594080,161
+12432,1594241,151
+12433,1594392,203
+12434,1594595,133
+12435,1594728,142
+12436,1594870,155
+12437,1595025,205
+12438,1595230,155
+12439,1595385,107
+12440,1595492,183
+12441,1595675,156
+12442,1595831,149
+12443,1595980,121
+12444,1596101,165
+12445,1596266,167
+12446,1596433,142
+12447,1596575,137
+12448,1596712,168
+12449,1596880,172
+12450,1597052,146
+12451,1597198,154
+12452,1597352,181
+12453,1597533,138
+12454,1597671,163
+12455,1597834,175
+12456,1598009,154
+12457,1598163,157
+12458,1598320,219
+12459,1598539,197
+12460,1598736,162
+12461,1598898,173
+12462,1599071,149
+12463,1599220,149
+12464,1599369,161
+12465,1599530,145
+12466,1599675,133
+12467,1599808,167
+12468,1599975,152
+12469,1600127,161
+12470,1600288,155
+12471,1600443,177
+12472,1600620,152
+12473,1600772,118
+12474,1600890,206
+12475,1601096,136
+12476,1601232,125
+12477,1601357,143
+12478,1601500,163
+12479,1601663,138
+12480,1601801,153
+12481,1601954,135
+12482,1602089,106
+12483,1602195,169
+12484,1602364,165
+12485,1602529,170
+12486,1602699,155
+12487,1602854,189
+12488,1603043,123
+12489,1603166,118
+12490,1603284,135
+12491,1603419,168
+12492,1603587,138
+12493,1603725,155
+12494,1603880,127
+12495,1604007,145
+12496,1604152,140
+12497,1604292,143
+12498,1604435,195
+12499,1604630,153
+12500,1604783,146
+12501,1604929,127
+12502,1605056,146
+12503,1605202,161
+12504,1605363,133
+12505,1605496,180
+12506,1605676,184
+12507,1605860,170
+12508,1606030,203
+12509,1606233,163
+12510,1606396,142
+12511,1606538,187
+12512,1606725,158
+12513,1606883,162
+12514,1607045,177
+12515,1607222,155
+12516,1607377,151
+12517,1607528,145
+12518,1607673,157
+12519,1607830,159
+12520,1607989,135
+12521,1608124,206
+12522,1608330,174
+12523,1608504,178
+12524,1608682,126
+12525,1608808,177
+12526,1608985,179
+12527,1609164,157
+12528,1609321,163
+12529,1609484,172
+12530,1609656,155
+12531,1609811,135
+12532,1609946,155
+12533,1610101,145
+12534,1610246,152
+12535,1610398,125
+12536,1610523,184
+12537,1610707,182
+12538,1610889,151
+12539,1611040,141
+12540,1611181,166
+12541,1611347,165
+12542,1611512,108
+12543,1611620,201
+16384,1611821,176
+16385,1611997,194
+16386,1612191,156
+16387,1612347,216
+16388,1612563,135
+16389,1612698,139
+16390,1612837,229
+16391,1613066,152
+16392,1613218,204
+16393,1613422,194
+16394,1613616,169
+16395,1613785,152
+16396,1613937,163
+16397,1614100,179
+16398,1614279,168
+16399,1614447,148
+16400,1614595,153
+16401,1614748,164
+16402,1614912,131
+16403,1615043,213
+16404,1615256,133
+16405,1615389,173
+16406,1615562,197
+16407,1615759,161
+16408,1615920,151
+16409,1616071,151
+16410,1616222,177
+16411,1616399,156
+16412,1616555,152
+16413,1616707,155
+16414,1616862,116
+16415,1616978,187
+16416,1617165,158
+16417,1617323,136
+16418,1617459,153
+16419,1617612,156
+16420,1617768,137
+16421,1617905,152
+16422,1618057,157
+16423,1618214,155
+16424,1618369,184
+16425,1618553,113
+16426,1618666,142
+16427,1618808,186
+16428,1618994,184
+16429,1619178,163
+16430,1619341,169
+16431,1619510,160
+16432,1619670,132
+16433,1619802,168
+16434,1619970,177
+16435,1620147,167
+16436,1620314,144
+16437,1620458,118
+16438,1620576,167
+16439,1620743,140
+16440,1620883,206
+16441,1621089,185
+16442,1621274,167
+16443,1621441,193
+16444,1621634,131
+16445,1621765,128
+16446,1621893,152
+16447,1622045,193
+16448,1622238,145
+16449,1622383,128
+16450,1622511,133
+16451,1622644,197
+16452,1622841,211
+16453,1623052,152
+16454,1623204,175
+16455,1623379,143
+16456,1623522,180
+16457,1623702,138
+16458,1623840,201
+16459,1624041,155
+16460,1624196,154
+16461,1624350,179
+16462,1624529,137
+16463,1624666,182
+16464,1624848,143
+16465,1624991,131
+16466,1625122,147
+16467,1625269,138
+16468,1625407,166
+16469,1625573,152
+16470,1625725,151
+16471,1625876,172
+16472,1626048,127
+16473,1626175,175
+16474,1626350,187
+16475,1626537,171
+16476,1626708,209
+16477,1626917,132
+16478,1627049,137
+16479,1627186,182
+16480,1627368,179
+16481,1627547,245
+16482,1627792,182
+16483,1627974,149
+16484,1628123,161
+16485,1628284,130
+16486,1628414,184
+16487,1628598,155
+16488,1628753,141
+16489,1628894,150
+16490,1629044,168
+16491,1629212,119
+16492,1629331,146
+16493,1629477,148
+16494,1629625,127
+16495,1629752,134
+16496,1629886,186
+16497,1630072,155
+16498,1630227,158
+16499,1630385,146
+16500,1630531,169
+16501,1630700,182
+16502,1630882,171
+16503,1631053,195
+16504,1631248,156
+16505,1631404,206
+16506,1631610,178
+16507,1631788,196
+16508,1631984,151
+16509,1632135,158
+16510,1632293,155
+16511,1632448,120
+16512,1632568,145
+16513,1632713,167
+16514,1632880,172
+16515,1633052,181
+16516,1633233,144
+16517,1633377,133
+16518,1633510,160
+16519,1633670,169
+16520,1633839,157
+16521,1633996,185
+16522,1634181,174
+16523,1634355,148
+16524,1634503,147
+16525,1634650,168
+16526,1634818,136
+16527,1634954,152
+16528,1635106,147
+16529,1635253,178
+16530,1635431,164
+16531,1635595,187
+16532,1635782,150
+16533,1635932,202
+16534,1636134,145
+16535,1636279,163
+16536,1636442,146
+16537,1636588,155
+16538,1636743,152
+16539,1636895,154
+16540,1637049,128
+16541,1637177,145
+16542,1637322,205
+16543,1637527,176
+16544,1637703,154
+16545,1637857,139
+16546,1637996,193
+16547,1638189,171
+16548,1638360,139
+16549,1638499,149
+16550,1638648,124
+16551,1638772,173
+16552,1638945,192
+16553,1639137,141
+16554,1639278,149
+16555,1639427,160
+16556,1639587,152
+16557,1639739,156
+16558,1639895,152
+16559,1640047,152
+16560,1640199,169
+16561,1640368,141
+16562,1640509,134
+16563,1640643,172
+16564,1640815,133
+16565,1640948,202
+16566,1641150,149
+16567,1641299,154
+16568,1641453,133
+16569,1641586,152
+16570,1641738,166
+16571,1641904,180
+16572,1642084,145
+16573,1642229,162
+16574,1642391,169
+16575,1642560,172
+16576,1642732,159
+16577,1642891,214
+16578,1643105,178
+16579,1643283,157
+16580,1643440,160
+16581,1643600,164
+16582,1643764,153
+16583,1643917,193
+16584,1644110,169
+16585,1644279,139
+16586,1644418,211
+16587,1644629,147
+16588,1644776,187
+16589,1644963,177
+16590,1645140,156
+16591,1645296,151
+16592,1645447,168
+16593,1645615,181
+16594,1645796,146
+16595,1645942,185
+16596,1646127,142
+16597,1646269,140
+16598,1646409,138
+16599,1646547,142
+16600,1646689,204
+16601,1646893,156
+16602,1647049,167
+16603,1647216,185
+16604,1647401,154
+16605,1647555,140
+16606,1647695,163
+16607,1647858,155
+16608,1648013,149
+16609,1648162,155
+16610,1648317,175
+16611,1648492,187
+16612,1648679,155
+16613,1648834,149
+16614,1648983,132
+16615,1649115,217
+16616,1649332,168
+16617,1649500,142
+16618,1649642,182
+16619,1649824,161
+16620,1649985,172
+16621,1650157,165
+16622,1650322,134
+16623,1650456,138
+16624,1650594,173
+16625,1650767,167
+16626,1650934,176
+16627,1651110,115
+16628,1651225,166
+16629,1651391,132
+16630,1651523,197
+16631,1651720,143
+16632,1651863,169
+16633,1652032,134
+16634,1652166,152
+16635,1652318,202
+16636,1652520,170
+16637,1652690,112
+16638,1652802,149
+16639,1652951,155
+16978,1653106,161
+17665,1653267,161
+20480,1653428,173
+20481,1653601,137
+20482,1653738,122
+20483,1653860,140
+20484,1654000,142
+20486,1654142,107
+20487,1654249,209
+20488,1654458,166
+20489,1654624,163
+20490,1654787,183
+20491,1654970,164
+20492,1655134,144
+20493,1655278,160
+20494,1655438,159
+20495,1655597,158
+20496,1655755,163
+20498,1655918,123
+20499,1656041,163
+20500,1656204,165
+20501,1656369,149
+20502,1656518,157
+20503,1656675,137
+20504,1656812,157
+20505,1656969,157
+20506,1657126,140
+20507,1657266,144
+20508,1657410,156
+20510,1657566,171
+20511,1657737,164
+20512,1657901,175
+20513,1658076,155
+20514,1658231,195
+20515,1658426,168
+20516,1658594,137
+20518,1658731,139
+20519,1658870,158
+20520,1659028,157
+20521,1659185,154
+20522,1659339,164
+20523,1659503,173
+20524,1659676,196
+20525,1659872,171
+20526,1660043,144
+20527,1660187,164
+20528,1660351,144
+20529,1660495,164
+20530,1660659,158
+20531,1660817,146
+20534,1660963,132
+20535,1661095,160
+20536,1661255,179
+20537,1661434,147
+20538,1661581,166
+20539,1661747,154
+20540,1661901,188
+20542,1662089,165
+20543,1662254,136
+20544,1662390,182
+20545,1662572,182
+20546,1662754,171
+20547,1662925,161
+20548,1663086,148
+20549,1663234,204
+20550,1663438,212
+20551,1663650,56
+20552,1663706,140
+20553,1663846,143
+20554,1663989,141
+20555,1664130,133
+20556,1664263,145
+20557,1664408,180
+20558,1664588,144
+20559,1664732,156
+20560,1664888,157
+20561,1665045,164
+20562,1665209,145
+20563,1665354,156
+20564,1665510,164
+20565,1665674,124
+20566,1665798,133
+20567,1665931,156
+20568,1666087,183
+20569,1666270,144
+20570,1666414,153
+20571,1666567,175
+20572,1666742,136
+20574,1666878,158
+20575,1667036,132
+20576,1667168,138
+20578,1667306,179
+20579,1667485,138
+20580,1667623,136
+20581,1667759,164
+20582,1667923,191
+20583,1668114,134
+20584,1668248,172
+20585,1668420,157
+20586,1668577,139
+20587,1668716,121
+20588,1668837,148
+20589,1668985,165
+20590,1669150,178
+20591,1669328,111
+20592,1669439,218
+20593,1669657,154
+20594,1669811,142
+20595,1669953,164
+20596,1670117,154
+20597,1670271,142
+20598,1670413,139
+20599,1670552,181
+20600,1670733,158
+20601,1670891,56
+20602,1670947,152
+20603,1671099,174
+20604,1671273,138
+20605,1671411,104
+20606,1671515,144
+20607,1671659,169
+20608,1671828,164
+20609,1671992,161
+20610,1672153,174
+20611,1672327,127
+20612,1672454,133
+20614,1672587,142
+20615,1672729,160
+20616,1672889,147
+20617,1673036,174
+20619,1673210,153
+20620,1673363,135
+20621,1673498,196
+20622,1673694,136
+20623,1673830,159
+20624,1673989,138
+20625,1674127,133
+20626,1674260,167
+20627,1674427,124
+20628,1674551,195
+20629,1674746,151
+20630,1674897,170
+20631,1675067,171
+20632,1675238,127
+20633,1675365,154
+20634,1675519,179
+20635,1675698,131
+20636,1675829,122
+20637,1675951,154
+20638,1676105,191
+20639,1676296,154
+20640,1676450,177
+20641,1676627,154
+20642,1676781,158
+20643,1676939,175
+20644,1677114,132
+20645,1677246,207
+20646,1677453,121
+20647,1677574,164
+20648,1677738,145
+20649,1677883,172
+20650,1678055,169
+20651,1678224,145
+20652,1678369,167
+20653,1678536,179
+20654,1678715,198
+20655,1678913,136
+20656,1679049,181
+20657,1679230,142
+20658,1679372,127
+20659,1679499,152
+20660,1679651,192
+20661,1679843,139
+20662,1679982,205
+20663,1680187,195
+20664,1680382,157
+20665,1680539,159
+20666,1680698,150
+20667,1680848,140
+20668,1680988,153
+20669,1681141,158
+20670,1681299,137
+20671,1681436,172
+20672,1681608,130
+20673,1681738,164
+20674,1681902,157
+20676,1682059,102
+20677,1682161,151
+20678,1682312,238
+20680,1682550,164
+20681,1682714,128
+20682,1682842,161
+20683,1683003,112
+20684,1683115,161
+20685,1683276,112
+20686,1683388,185
+20687,1683573,239
+20688,1683812,143
+20689,1683955,164
+20690,1684119,150
+20691,1684269,171
+20692,1684440,200
+20693,1684640,141
+20694,1684781,124
+20695,1684905,112
+20696,1685017,169
+20697,1685186,214
+20698,1685400,155
+20699,1685555,170
+20700,1685725,184
+20701,1685909,177
+20702,1686086,152
+20703,1686238,137
+20705,1686375,211
+20706,1686586,158
+20707,1686744,133
+20708,1686877,151
+20710,1687028,159
+20711,1687187,191
+20712,1687378,146
+20714,1687524,153
+20715,1687677,179
+20716,1687856,111
+20717,1687967,133
+20718,1688100,160
+20719,1688260,135
+20720,1688395,164
+20721,1688559,174
+20722,1688733,139
+20723,1688872,211
+20724,1689083,165
+20726,1689248,186
+20727,1689434,197
+20728,1689631,183
+20729,1689814,137
+20730,1689951,139
+20731,1690090,135
+20732,1690225,198
+20733,1690423,178
+20734,1690601,117
+20735,1690718,171
+24576,1690889,118
+24577,1691007,137
+24578,1691144,188
+24579,1691332,160
+24580,1691492,175
+24581,1691667,155
+24582,1691822,158
+24583,1691980,142
+24584,1692122,142
+24585,1692264,150
+24586,1692414,169
+24587,1692583,119
+24588,1692702,160
+24589,1692862,134
+24590,1692996,165
+24591,1693161,135
+24592,1693296,167
+24593,1693463,154
+24594,1693617,158
+24595,1693775,142
+24596,1693917,158
+24597,1694075,143
+24598,1694218,135
+24599,1694353,126
+24600,1694479,163
+24601,1694642,146
+24602,1694788,145
+24603,1694933,143
+24604,1695076,163
+24605,1695239,166
+24606,1695405,128
+24607,1695533,147
+24608,1695680,156
+24609,1695836,169
+24610,1696005,150
+24611,1696155,159
+24612,1696314,162
+24613,1696476,176
+24614,1696652,149
+24615,1696801,187
+24616,1696988,162
+24617,1697150,159
+24618,1697309,213
+24619,1697522,132
+24620,1697654,161
+24621,1697815,159
+24622,1697974,147
+24623,1698121,150
+24624,1698271,143
+24625,1698414,120
+24626,1698534,134
+24627,1698668,141
+24628,1698809,128
+24629,1698937,170
+24630,1699107,157
+24631,1699264,165
+24632,1699429,193
+24633,1699622,169
+24634,1699791,183
+24635,1699974,126
+24636,1700100,158
+24637,1700258,123
+24638,1700381,150
+24639,1700531,140
+24640,1700671,129
+24641,1700800,166
+24642,1700966,133
+24643,1701099,152
+24644,1701251,156
+24645,1701407,145
+24646,1701552,139
+24647,1701691,150
+24648,1701841,133
+24649,1701974,146
+24650,1702120,147
+24651,1702267,144
+24652,1702411,136
+24653,1702547,153
+24654,1702700,178
+24655,1702878,153
+24656,1703031,130
+24657,1703161,150
+24658,1703311,216
+24659,1703527,160
+24660,1703687,130
+24661,1703817,143
+24662,1703960,158
+24663,1704118,162
+24664,1704280,186
+24665,1704466,163
+24666,1704629,151
+24667,1704780,167
+24668,1704947,150
+24669,1705097,145
+24670,1705242,167
+24671,1705409,181
+24672,1705590,154
+24673,1705744,171
+24674,1705915,143
+24675,1706058,171
+24676,1706229,130
+24677,1706359,184
+24678,1706543,138
+24679,1706681,155
+24680,1706836,157
+24681,1706993,181
+24682,1707174,186
+24683,1707360,134
+24684,1707494,131
+24685,1707625,169
+24686,1707794,165
+24687,1707959,193
+24688,1708152,150
+24689,1708302,131
+24690,1708433,184
+24691,1708617,166
+24692,1708783,146
+24693,1708929,132
+24694,1709061,213
+24695,1709274,152
+24696,1709426,157
+24697,1709583,160
+24698,1709743,114
+24699,1709857,141
+24700,1709998,148
+24701,1710146,157
+24702,1710303,136
+24703,1710439,154
+24704,1710593,155
+24705,1710748,147
+24706,1710895,170
+24707,1711065,150
+24708,1711215,151
+24709,1711366,136
+24710,1711502,184
+24711,1711686,159
+24712,1711845,161
+24713,1712006,125
+24714,1712131,131
+24715,1712262,165
+24716,1712427,147
+24717,1712574,144
+24718,1712718,201
+24719,1712919,191
+24720,1713110,180
+24721,1713290,156
+24722,1713446,139
+24723,1713585,121
+24724,1713706,147
+24725,1713853,150
+24726,1714003,145
+24727,1714148,142
+24728,1714290,143
+24729,1714433,138
+24730,1714571,122
+24731,1714693,145
+24732,1714838,156
+24733,1714994,148
+24734,1715142,227
+24735,1715369,157
+24736,1715526,185
+24737,1715711,141
+24738,1715852,166
+24739,1716018,159
+24740,1716177,154
+24741,1716331,159
+24742,1716490,157
+24743,1716647,141
+24744,1716788,103
+24745,1716891,118
+24746,1717009,170
+24747,1717179,149
+24748,1717328,163
+24749,1717491,149
+24750,1717640,145
+24751,1717785,155
+24752,1717940,155
+24753,1718095,151
+24754,1718246,145
+24755,1718391,178
+24756,1718569,141
+24757,1718710,114
+24758,1718824,145
+24759,1718969,147
+24760,1719116,133
+24761,1719249,158
+24762,1719407,147
+24763,1719554,179
+24764,1719733,208
+24765,1719941,138
+24766,1720079,137
+24767,1720216,154
+24768,1720370,123
+24769,1720493,153
+24770,1720646,115
+24771,1720761,157
+24772,1720918,141
+24773,1721059,132
+24774,1721191,110
+24775,1721301,160
+24776,1721461,176
+24777,1721637,138
+24778,1721775,172
+24779,1721947,160
+24780,1722107,163
+24781,1722270,136
+24782,1722406,159
+24783,1722565,149
+24784,1722714,173
+24785,1722887,155
+24786,1723042,259
+24787,1723301,154
+24788,1723455,148
+24789,1723603,144
+24790,1723747,187
+24791,1723934,189
+24792,1724123,166
+24793,1724289,148
+24794,1724437,148
+24795,1724585,127
+24796,1724712,213
+24797,1724925,137
+24798,1725062,138
+24799,1725200,179
+24800,1725379,195
+24801,1725574,157
+24802,1725731,173
+24803,1725904,148
+24804,1726052,166
+24805,1726218,153
+24806,1726371,173
+24807,1726544,112
+24808,1726656,190
+24809,1726846,213
+24810,1727059,133
+24811,1727192,165
+24812,1727357,163
+24813,1727520,162
+24814,1727682,132
+24815,1727814,191
+24816,1728005,160
+24817,1728165,137
+24818,1728302,130
+24819,1728432,198
+24820,1728630,187
+24821,1728817,143
+24822,1728960,200
+24823,1729160,139
+24824,1729299,203
+24825,1729502,165
+24826,1729667,182
+24827,1729849,145
+24828,1729994,187
+24829,1730181,122
+24830,1730303,164
+24831,1730467,146
+28848,1730613,156
+28851,1730769,157
+32768,1730926,155
+32769,1731081,169
+32770,1731250,184
+32771,1731434,163
+32772,1731597,169
+32773,1731766,165
+32774,1731931,164
+32775,1732095,139
+32776,1732234,185
+32777,1732419,159
+32778,1732578,164
+32779,1732742,158
+32780,1732900,158
+32781,1733058,134
+32782,1733192,155
+32783,1733347,148
+32784,1733495,155
+32785,1733650,180
+32786,1733830,169
+32787,1733999,154
+32788,1734153,185
+32789,1734338,179
+32790,1734517,165
+32791,1734682,147
+32792,1734829,169
+32793,1734998,173
+32794,1735171,147
+32795,1735318,137
+32796,1735455,177
+32797,1735632,162
+32798,1735794,137
+32799,1735931,150
+32800,1736081,174
+32801,1736255,143
+32802,1736398,128
+32803,1736526,218
+32804,1736744,138
+32805,1736882,141
+32806,1737023,168
+32807,1737191,170
+32808,1737361,171
+32809,1737532,160
+32810,1737692,182
+32811,1737874,167
+32812,1738041,182
+32813,1738223,129
+32814,1738352,151
+32815,1738503,171
+32816,1738674,161
+32817,1738835,130
+32818,1738965,164
+32819,1739129,141
+32820,1739270,126
+32821,1739396,151
+32822,1739547,207
+32823,1739754,156
+32824,1739910,187
+32825,1740097,162
+32826,1740259,141
+32827,1740400,157
+32828,1740557,143
+32829,1740700,157
+32830,1740857,133
+32831,1740990,160
+32832,1741150,166
+32833,1741316,153
+32834,1741469,145
+32835,1741614,161
+32836,1741775,155
+32837,1741930,167
+32838,1742097,186
+32839,1742283,143
+32840,1742426,152
+32841,1742578,166
+32842,1742744,125
+32843,1742869,167
+32844,1743036,148
+32845,1743184,156
+32846,1743340,150
+32847,1743490,183
+32848,1743673,151
+32849,1743824,131
+32850,1743955,171
+32851,1744126,143
+32852,1744269,169
+32853,1744438,123
+32854,1744561,177
+32855,1744738,138
+32856,1744876,163
+32857,1745039,177
+32858,1745216,186
+32859,1745402,149
+32860,1745551,169
+32861,1745720,141
+32862,1745861,165
+32863,1746026,153
+32864,1746179,164
+32865,1746343,168
+32866,1746511,140
+32867,1746651,206
+32868,1746857,145
+32869,1747002,178
+32870,1747180,182
+32871,1747362,163
+32872,1747525,168
+32873,1747693,159
+32874,1747852,158
+32875,1748010,162
+32876,1748172,169
+32877,1748341,156
+32878,1748497,160
+32879,1748657,162
+32880,1748819,150
+32881,1748969,145
+32882,1749114,152
+32883,1749266,142
+32884,1749408,139
+32885,1749547,138
+32886,1749685,105
+32887,1749790,169
+32888,1749959,170
+32889,1750129,184
+32890,1750313,162
+32891,1750475,162
+32892,1750637,136
+32893,1750773,146
+32894,1750919,172
+32895,1751091,160
+32896,1751251,152
+32897,1751403,165
+32898,1751568,174
+32899,1751742,155
+32900,1751897,165
+32901,1752062,185
+32902,1752247,160
+32903,1752407,164
+32904,1752571,171
+32905,1752742,164
+32906,1752906,160
+32907,1753066,170
+32908,1753236,163
+32909,1753399,161
+32910,1753560,161
+32911,1753721,151
+32912,1753872,170
+32913,1754042,160
+32914,1754202,152
+32915,1754354,138
+32916,1754492,140
+32917,1754632,176
+32918,1754808,168
+32919,1754976,160
+32920,1755136,183
+32921,1755319,174
+32922,1755493,176
+32923,1755669,153
+32924,1755822,132
+32925,1755954,139
+32926,1756093,139
+32927,1756232,154
+32928,1756386,179
+32929,1756565,141
+32930,1756706,189
+32931,1756895,126
+32932,1757021,151
+32933,1757172,143
+32934,1757315,151
+32935,1757466,135
+32936,1757601,151
+32937,1757752,139
+32938,1757891,121
+32939,1758012,160
+32940,1758172,173
+32941,1758345,146
+32942,1758491,156
+32943,1758647,141
+32944,1758788,169
+32945,1758957,137
+32946,1759094,171
+32947,1759265,181
+32948,1759446,134
+32949,1759580,146
+32950,1759726,136
+32951,1759862,133
+32952,1759995,171
+32953,1760166,169
+32954,1760335,182
+32955,1760517,149
+32956,1760666,183
+32957,1760849,177
+32958,1761026,134
+32959,1761160,197
+32960,1761357,147
+32961,1761504,143
+32962,1761647,191
+32963,1761838,191
+32964,1762029,167
+32965,1762196,173
+32966,1762369,231
+32967,1762600,118
+32968,1762718,141
+32969,1762859,177
+32970,1763036,162
+32971,1763198,150
+32972,1763348,166
+32973,1763514,160
+32974,1763674,181
+32975,1763855,162
+32976,1764017,167
+32977,1764184,162
+32978,1764346,161
+32979,1764507,128
+32980,1764635,168
+32981,1764803,151
+32982,1764954,142
+32983,1765096,142
+32984,1765238,162
+32985,1765400,153
+32986,1765553,137
+32987,1765690,148
+32988,1765838,143
+32989,1765981,137
+32990,1766118,152
+32991,1766270,168
+32992,1766438,150
+32993,1766588,151
+32994,1766739,171
+32995,1766910,206
+32996,1767116,161
+32997,1767277,151
+32998,1767428,154
+32999,1767582,193
+33000,1767775,150
+33001,1767925,147
+33002,1768072,172
+33003,1768244,152
+33004,1768396,171
+33005,1768567,165
+33006,1768732,160
+33007,1768892,127
+33008,1769019,170
+33009,1769189,134
+33010,1769323,146
+33011,1769469,156
+33012,1769625,176
+33013,1769801,133
+33014,1769934,161
+33015,1770095,145
+33016,1770240,127
+33017,1770367,147
+33018,1770514,132
+33019,1770646,137
+33020,1770783,140
+33021,1770923,164
+33022,1771087,157
+33023,1771244,205
+36864,1771449,162
+36865,1771611,190
+36866,1771801,111
+36867,1771912,112
+36868,1772024,166
+36869,1772190,185
+36870,1772375,142
+36871,1772517,194
+36872,1772711,161
+36873,1772872,178
+36874,1773050,218
+36875,1773268,193
+36876,1773461,158
+36877,1773619,151
+36878,1773770,217
+36879,1773987,182
+36880,1774169,168
+36881,1774337,134
+36882,1774471,162
+36883,1774633,188
+36884,1774821,173
+36885,1774994,168
+36886,1775162,103
+36887,1775265,149
+36888,1775414,177
+36889,1775591,161
+36890,1775752,141
+36891,1775893,144
+36892,1776037,128
+36893,1776165,134
+36894,1776299,144
+36895,1776443,153
+36896,1776596,152
+36897,1776748,156
+36898,1776904,130
+36899,1777034,130
+36900,1777164,146
+36901,1777310,212
+36902,1777522,193
+36903,1777715,162
+36904,1777877,161
+36905,1778038,108
+36906,1778146,160
+36907,1778306,160
+36908,1778466,193
+36909,1778659,178
+36910,1778837,158
+36911,1778995,154
+36912,1779149,141
+36913,1779290,116
+36914,1779406,158
+36915,1779564,131
+36916,1779695,130
+36917,1779825,187
+36918,1780012,119
+36919,1780131,146
+36920,1780277,158
+36921,1780435,142
+36922,1780577,152
+36923,1780729,158
+36924,1780887,173
+36925,1781060,147
+36926,1781207,174
+36927,1781381,136
+36928,1781517,180
+36929,1781697,151
+36930,1781848,128
+36931,1781976,153
+36932,1782129,149
+36933,1782278,154
+36934,1782432,151
+36935,1782583,178
+36936,1782761,143
+36937,1782904,169
+36938,1783073,168
+36939,1783241,212
+36940,1783453,134
+36941,1783587,110
+36942,1783697,121
+36943,1783818,162
+36944,1783980,116
+36945,1784096,151
+36946,1784247,151
+36947,1784398,213
+36948,1784611,190
+36949,1784801,210
+36950,1785011,149
+36951,1785160,151
+36952,1785311,263
+36953,1785574,166
+36954,1785740,156
+36955,1785896,173
+36956,1786069,112
+36957,1786181,150
+36958,1786331,152
+36959,1786483,160
+36960,1786643,150
+36961,1786793,193
+36962,1786986,161
+36963,1787147,195
+36964,1787342,142
+36965,1787484,147
+36966,1787631,172
+36967,1787803,173
+36968,1787976,135
+36969,1788111,161
+36970,1788272,157
+36971,1788429,153
+36972,1788582,144
+36973,1788726,157
+36974,1788883,128
+36975,1789011,156
+36976,1789167,146
+36977,1789313,158
+36978,1789471,106
+36979,1789577,168
+36980,1789745,143
+36981,1789888,183
+36982,1790071,176
+36983,1790247,181
+36984,1790428,168
+36985,1790596,135
+36986,1790731,132
+36987,1790863,147
+36988,1791010,169
+36989,1791179,140
+36990,1791319,145
+36991,1791464,178
+36992,1791642,155
+36993,1791797,178
+36994,1791975,126
+36995,1792101,169
+36996,1792270,168
+36997,1792438,188
+36998,1792626,156
+36999,1792782,150
+37000,1792932,206
+37001,1793138,160
+37002,1793298,153
+37003,1793451,155
+37004,1793606,178
+37005,1793784,165
+37006,1793949,168
+37007,1794117,132
+37008,1794249,118
+37009,1794367,142
+37010,1794509,164
+37011,1794673,141
+37012,1794814,170
+37013,1794984,149
+37014,1795133,188
+37015,1795321,135
+37016,1795456,148
+37017,1795604,166
+37018,1795770,158
+37019,1795928,109
+37020,1796037,133
+37021,1796170,189
+37022,1796359,155
+37023,1796514,146
+37024,1796660,133
+37025,1796793,187
+37026,1796980,194
+37027,1797174,165
+37028,1797339,139
+37029,1797478,132
+37030,1797610,156
+37031,1797766,163
+37032,1797929,162
+37033,1798091,138
+37034,1798229,202
+37035,1798431,158
+37036,1798589,141
+37037,1798730,152
+37038,1798882,126
+37039,1799008,156
+37040,1799164,112
+37041,1799276,156
+37042,1799432,144
+37043,1799576,133
+37044,1799709,166
+37045,1799875,188
+37046,1800063,138
+37047,1800201,165
+37048,1800366,168
+37049,1800534,176
+37050,1800710,141
+37051,1800851,210
+37052,1801061,176
+37053,1801237,161
+37054,1801398,181
+37055,1801579,158
+37056,1801737,155
+37057,1801892,131
+37058,1802023,147
+37059,1802170,167
+37060,1802337,145
+37061,1802482,156
+37062,1802638,154
+37063,1802792,117
+37064,1802909,165
+37065,1803074,142
+37066,1803216,190
+37067,1803406,161
+37068,1803567,173
+37069,1803740,232
+37070,1803972,124
+37071,1804096,120
+37072,1804216,148
+37073,1804364,191
+37074,1804555,144
+37075,1804699,155
+37076,1804854,162
+37077,1805016,133
+37078,1805149,128
+37079,1805277,142
+37080,1805419,171
+37081,1805590,165
+37082,1805755,136
+37083,1805891,163
+37084,1806054,179
+37085,1806233,174
+37086,1806407,154
+37087,1806561,168
+37088,1806729,130
+37089,1806859,118
+37090,1806977,170
+37091,1807147,151
+37092,1807298,143
+37093,1807441,136
+37094,1807577,150
+37095,1807727,149
+37096,1807876,206
+37097,1808082,132
+37098,1808214,152
+37099,1808366,146
+37100,1808512,112
+37101,1808624,176
+37102,1808800,171
+37103,1808971,147
+37104,1809118,196
+37105,1809314,163
+37106,1809477,158
+37107,1809635,157
+37108,1809792,147
+37109,1809939,160
+37110,1810099,140
+37111,1810239,154
+37112,1810393,141
+37113,1810534,119
+37114,1810653,129
+37115,1810782,163
+37116,1810945,162
+37117,1811107,150
+37118,1811257,212
+37119,1811469,159
+37334,1811628,140
+40334,1811768,168
+40960,1811936,162
+40961,1812098,160
+40962,1812258,175
+40963,1812433,245
+40964,1812678,136
+40965,1812814,152
+40966,1812966,172
+40967,1813138,156
+40968,1813294,142
+40969,1813436,161
+40970,1813597,142
+40971,1813739,165
+40972,1813904,186
+40973,1814090,150
+40974,1814240,158
+40975,1814398,166
+40976,1814564,149
+40977,1814713,164
+40978,1814877,157
+40979,1815034,168
+40980,1815202,120
+40981,1815322,117
+40982,1815439,143
+40983,1815582,141
+40984,1815723,157
+40985,1815880,148
+40986,1816028,146
+40987,1816174,164
+40988,1816338,170
+40989,1816508,116
+40990,1816624,133
+40991,1816757,159
+40992,1816916,137
+40993,1817053,168
+40994,1817221,207
+40995,1817428,180
+40996,1817608,142
+40997,1817750,140
+40998,1817890,141
+40999,1818031,158
+41000,1818189,145
+41001,1818334,144
+41002,1818478,157
+41003,1818635,156
+41004,1818791,175
+41005,1818966,151
+41006,1819117,181
+41007,1819298,115
+41008,1819413,112
+41009,1819525,168
+41010,1819693,149
+41011,1819842,133
+41012,1819975,123
+41013,1820098,142
+41014,1820240,173
+41015,1820413,145
+41016,1820558,132
+41017,1820690,157
+41018,1820847,151
+41019,1820998,194
+41020,1821192,153
+41021,1821345,125
+41022,1821470,163
+41023,1821633,253
+41024,1821886,141
+41025,1822027,123
+41026,1822150,145
+41027,1822295,187
+41028,1822482,144
+41029,1822626,158
+41030,1822784,124
+41031,1822908,149
+41032,1823057,147
+41033,1823204,170
+41034,1823374,182
+41035,1823556,185
+41036,1823741,207
+41037,1823948,158
+41038,1824106,159
+41039,1824265,136
+41040,1824401,153
+41041,1824554,157
+41042,1824711,167
+41043,1824878,148
+41044,1825026,56
+41045,1825082,149
+41046,1825231,112
+41047,1825343,156
+41048,1825499,125
+41049,1825624,139
+41050,1825763,146
+41051,1825909,136
+41052,1826045,192
+41053,1826237,145
+41054,1826382,145
+41055,1826527,160
+41056,1826687,171
+41057,1826858,137
+41058,1826995,141
+41059,1827136,136
+41060,1827272,126
+41061,1827398,154
+41062,1827552,157
+41063,1827709,164
+41064,1827873,123
+41065,1827996,143
+41066,1828139,145
+41067,1828284,157
+41068,1828441,175
+41069,1828616,159
+41070,1828775,131
+41071,1828906,151
+41072,1829057,131
+41073,1829188,168
+41074,1829356,184
+41075,1829540,134
+41076,1829674,148
+41077,1829822,170
+41078,1829992,147
+41079,1830139,144
+41080,1830283,154
+41081,1830437,159
+41082,1830596,208
+41083,1830804,168
+41084,1830972,208
+41085,1831180,150
+41086,1831330,177
+41087,1831507,181
+41088,1831688,143
+41089,1831831,154
+41090,1831985,127
+41091,1832112,167
+41092,1832279,141
+41093,1832420,56
+41094,1832476,172
+41095,1832648,164
+41096,1832812,166
+41097,1832978,167
+41098,1833145,169
+41099,1833314,205
+41100,1833519,173
+41101,1833692,151
+41102,1833843,170
+41103,1834013,150
+41104,1834163,148
+41105,1834311,149
+41106,1834460,192
+41107,1834652,143
+41108,1834795,149
+41109,1834944,149
+41110,1835093,153
+41111,1835246,157
+41112,1835403,121
+41113,1835524,152
+41114,1835676,143
+41115,1835819,152
+41116,1835971,129
+41117,1836100,168
+41118,1836268,119
+41119,1836387,139
+41120,1836526,141
+41121,1836667,141
+41122,1836808,130
+41123,1836938,157
+41124,1837095,152
+41125,1837247,158
+41126,1837405,146
+41127,1837551,152
+41128,1837703,144
+41129,1837847,158
+41130,1838005,137
+41131,1838142,175
+41132,1838317,158
+41133,1838475,126
+41134,1838601,202
+41135,1838803,133
+41136,1838936,149
+41137,1839085,168
+41138,1839253,121
+41139,1839374,126
+41140,1839500,155
+41141,1839655,138
+41142,1839793,160
+41143,1839953,140
+41144,1840093,145
+41145,1840238,164
+41146,1840402,159
+41147,1840561,124
+41148,1840685,147
+41149,1840832,138
+41150,1840970,219
+41151,1841189,164
+41152,1841353,143
+41153,1841496,130
+41154,1841626,164
+41155,1841790,152
+41156,1841942,172
+41157,1842114,198
+41158,1842312,149
+41159,1842461,147
+41160,1842608,135
+41161,1842743,167
+41162,1842910,142
+41163,1843052,169
+41164,1843221,165
+41165,1843386,166
+41166,1843552,151
+41167,1843703,133
+41168,1843836,166
+41169,1844002,205
+41170,1844207,183
+41171,1844390,183
+41172,1844573,143
+41173,1844716,154
+41174,1844870,124
+41175,1844994,172
+41176,1845166,156
+41177,1845322,191
+41178,1845513,192
+41179,1845705,174
+41180,1845879,146
+41181,1846025,157
+41182,1846182,177
+41183,1846359,174
+41184,1846533,181
+41185,1846714,169
+41186,1846883,176
+41187,1847059,139
+41188,1847198,126
+41189,1847324,143
+41190,1847467,143
+41191,1847610,154
+41192,1847764,156
+41193,1847920,191
+41194,1848111,135
+41195,1848246,169
+41196,1848415,162
+41197,1848577,154
+41198,1848731,139
+41199,1848870,164
+41200,1849034,175
+41201,1849209,116
+41202,1849325,166
+41203,1849491,128
+41204,1849619,125
+41205,1849744,127
+41206,1849871,141
+41207,1850012,149
+41208,1850161,184
+41209,1850345,149
+41210,1850494,162
+41211,1850656,167
+41212,1850823,144
+41213,1850967,163
+41214,1851130,159
+41215,1851289,171
+43520,1851460,149
+43521,1851609,100
+43522,1851709,100
+43580,1851809,173
+45065,1851982,147
+45079,1852129,160
+45081,1852289,132
+45084,1852421,147
+45086,1852568,143
+45098,1852711,120
+45101,1852831,172
+45115,1853003,135
+45128,1853138,171
+45130,1853309,155
+45138,1853464,155
+45156,1853619,155
+45161,1853774,117
+45165,1853891,141
+45184,1854032,150
+45190,1854182,145
+45198,1854327,154
+45201,1854481,140
+45204,1854621,134
+45210,1854755,161
+45213,1854916,169
+45228,1855085,173
+45230,1855258,130
+45235,1855388,153
+45250,1855541,155
+45255,1855696,181
+45262,1855877,140
+45264,1856017,140
+45275,1856157,133
+45279,1856290,140
+45287,1856430,152
+45292,1856582,116
+45294,1856698,161
+45296,1856859,135
+45301,1856994,183
+47808,1857177,157
+47873,1857334,141
+48112,1857475,148
+49152,1857623,144
+49153,1857767,178
+49154,1857945,172
+49155,1858117,167
+49156,1858284,175
+49157,1858459,175
+49158,1858634,187
+49159,1858821,164
+49160,1858985,119
+49161,1859104,170
+49162,1859274,145
+49163,1859419,131
+49164,1859550,210
+49165,1859760,157
+49166,1859917,143
+49167,1860060,186
+49168,1860246,183
+49169,1860429,176
+49170,1860605,163
+49171,1860768,128
+49172,1860896,171
+49173,1861067,163
+49174,1861230,158
+49175,1861388,138
+49176,1861526,142
+49177,1861668,134
+49178,1861802,175
+49179,1861977,160
+49180,1862137,194
+49181,1862331,169
+49182,1862500,158
+49183,1862658,128
+49184,1862786,176
+49185,1862962,155
+49186,1863117,171
+49187,1863288,154
+49188,1863442,175
+49189,1863617,165
+49190,1863782,175
+49191,1863957,164
+49192,1864121,149
+49193,1864270,168
+49194,1864438,168
+49195,1864606,186
+49196,1864792,169
+49197,1864961,175
+49198,1865136,115
+49199,1865251,139
+49200,1865390,179
+49201,1865569,187
+49202,1865756,184
+49203,1865940,159
+49204,1866099,189
+49205,1866288,144
+49206,1866432,207
+49207,1866639,131
+49208,1866770,172
+49209,1866942,169
+49210,1867111,165
+49211,1867276,172
+49212,1867448,132
+49213,1867580,154
+49214,1867734,156
+49215,1867890,163
+49216,1868053,122
+49217,1868175,166
+49218,1868341,133
+49219,1868474,126
+49220,1868600,129
+49221,1868729,162
+49222,1868891,175
+49223,1869066,153
+49224,1869219,178
+49225,1869397,155
+49226,1869552,156
+49227,1869708,186
+49228,1869894,186
+49229,1870080,153
+49230,1870233,142
+49231,1870375,168
+49232,1870543,164
+49233,1870707,168
+49234,1870875,125
+49235,1871000,151
+49236,1871151,198
+49237,1871349,163
+49238,1871512,124
+49239,1871636,136
+49240,1871772,149
+49241,1871921,138
+49242,1872059,172
+49243,1872231,149
+49244,1872380,138
+49245,1872518,154
+49246,1872672,129
+49247,1872801,193
+49248,1872994,135
+49249,1873129,158
+49250,1873287,144
+49251,1873431,167
+49252,1873598,179
+49253,1873777,156
+49254,1873933,135
+49255,1874068,164
+49256,1874232,175
+49257,1874407,168
+49258,1874575,188
+49259,1874763,151
+49260,1874914,193
+49261,1875107,148
+49262,1875255,172
+49263,1875427,137
+49264,1875564,165
+49265,1875729,173
+49266,1875902,169
+49267,1876071,146
+49268,1876217,167
+49269,1876384,139
+49270,1876523,159
+49271,1876682,199
+49272,1876881,162
+49273,1877043,151
+49274,1877194,122
+49275,1877316,164
+49276,1877480,172
+49277,1877652,169
+49278,1877821,185
+49279,1878006,152
+49280,1878158,167
+49281,1878325,184
+49282,1878509,143
+49283,1878652,167
+49284,1878819,157
+49285,1878976,164
+49286,1879140,151
+49287,1879291,167
+49288,1879458,143
+49289,1879601,151
+49290,1879752,163
+49291,1879915,168
+49292,1880083,168
+49293,1880251,168
+49294,1880419,171
+49295,1880590,185
+49296,1880775,120
+49297,1880895,149
+49298,1881044,148
+49299,1881192,158
+49300,1881350,120
+49301,1881470,114
+49302,1881584,174
+49303,1881758,135
+49304,1881893,230
+49305,1882123,172
+49306,1882295,158
+49307,1882453,181
+49308,1882634,161
+49309,1882795,176
+49310,1882971,150
+49311,1883121,194
+49312,1883315,164
+49313,1883479,149
+49314,1883628,134
+49315,1883762,203
+49316,1883965,120
+49317,1884085,157
+49318,1884242,170
+49319,1884412,138
+49320,1884550,142
+49321,1884692,178
+49322,1884870,162
+49323,1885032,141
+49324,1885173,183
+49325,1885356,175
+49326,1885531,166
+49327,1885697,155
+49328,1885852,146
+49329,1885998,169
+49330,1886167,145
+49331,1886312,168
+49332,1886480,206
+49333,1886686,176
+49334,1886862,153
+49335,1887015,173
+49336,1887188,161
+49337,1887349,143
+49338,1887492,140
+49339,1887632,148
+49340,1887780,174
+49341,1887954,166
+49342,1888120,131
+49343,1888251,178
+49344,1888429,157
+49345,1888586,141
+49346,1888727,190
+49347,1888917,188
+49348,1889105,206
+49349,1889311,174
+49350,1889485,158
+49351,1889643,171
+49352,1889814,169
+49353,1889983,170
+49354,1890153,178
+49355,1890331,164
+49356,1890495,171
+49357,1890666,160
+49358,1890826,202
+49359,1891028,136
+49360,1891164,168
+49361,1891332,177
+49362,1891509,139
+49363,1891648,167
+49364,1891815,144
+49365,1891959,152
+49366,1892111,143
+49367,1892254,188
+49368,1892442,158
+49369,1892600,197
+49370,1892797,144
+49371,1892941,157
+49372,1893098,164
+49373,1893262,140
+49374,1893402,135
+49375,1893537,163
+49376,1893700,157
+49377,1893857,143
+49378,1894000,164
+49379,1894164,173
+49380,1894337,170
+49381,1894507,141
+49382,1894648,145
+49383,1894793,127
+49384,1894920,138
+49385,1895058,175
+49386,1895233,168
+49387,1895401,169
+49388,1895570,148
+49389,1895718,166
+49390,1895884,151
+49391,1896035,145
+49392,1896180,165
+49393,1896345,194
+49394,1896539,151
+49395,1896690,175
+49396,1896865,185
+49397,1897050,135
+49398,1897185,166
+49399,1897351,159
+49400,1897510,139
+49401,1897649,175
+49402,1897824,163
+49403,1897987,184
+49404,1898171,147
+49405,1898318,119
+49406,1898437,162
+49407,1898599,163
+52157,1898762,220
+53020,1898982,163
+53248,1899145,175
+53249,1899320,143
+53250,1899463,152
+53251,1899615,197
+53252,1899812,147
+53253,1899959,184
+53254,1900143,147
+53255,1900290,154
+53256,1900444,141
+53257,1900585,214
+53258,1900799,168
+53259,1900967,144
+53260,1901111,160
+53261,1901271,181
+53262,1901452,132
+53263,1901584,145
+53264,1901729,155
+53265,1901884,151
+53266,1902035,135
+53267,1902170,180
+53268,1902350,149
+53269,1902499,206
+53270,1902705,150
+53271,1902855,213
+53272,1903068,146
+53273,1903214,191
+53274,1903405,133
+53275,1903538,177
+53276,1903715,180
+53277,1903895,165
+53278,1904060,133
+53279,1904193,147
+53280,1904340,182
+53281,1904522,167
+53282,1904689,168
+53283,1904857,204
+53284,1905061,200
+53285,1905261,165
+53286,1905426,168
+53287,1905594,158
+53288,1905752,153
+53289,1905905,162
+53290,1906067,184
+53291,1906251,143
+53292,1906394,154
+53293,1906548,113
+53294,1906661,172
+53295,1906833,146
+53296,1906979,154
+53297,1907133,170
+53298,1907303,169
+53299,1907472,171
+53300,1907643,141
+53301,1907784,212
+53302,1907996,172
+53303,1908168,117
+53304,1908285,190
+53305,1908475,140
+53306,1908615,156
+53307,1908771,178
+53308,1908949,141
+53309,1909090,141
+53310,1909231,144
+53311,1909375,209
+53312,1909584,167
+53313,1909751,229
+53314,1909980,148
+53315,1910128,159
+53316,1910287,161
+53317,1910448,117
+53318,1910565,164
+53319,1910729,128
+53320,1910857,135
+53321,1910992,194
+53322,1911186,173
+53323,1911359,139
+53324,1911498,177
+53325,1911675,200
+53326,1911875,119
+53327,1911994,142
+53328,1912136,123
+53329,1912259,146
+53330,1912405,190
+53331,1912595,149
+53332,1912744,140
+53333,1912884,153
+53334,1913037,140
+53335,1913177,137
+53336,1913314,147
+53337,1913461,213
+53338,1913674,160
+53339,1913834,164
+53340,1913998,176
+53341,1914174,152
+53342,1914326,166
+53343,1914492,131
+53344,1914623,163
+53345,1914786,221
+53346,1915007,126
+53347,1915133,147
+53348,1915280,152
+53349,1915432,140
+53350,1915572,159
+53351,1915731,157
+53352,1915888,171
+53353,1916059,161
+53354,1916220,166
+53355,1916386,147
+53356,1916533,146
+53357,1916679,130
+53358,1916809,181
+53359,1916990,160
+53360,1917150,225
+53361,1917375,133
+53362,1917508,129
+53363,1917637,189
+53364,1917826,152
+53365,1917978,191
+53366,1918169,158
+53367,1918327,197
+53368,1918524,119
+53369,1918643,147
+53370,1918790,196
+53371,1918986,199
+53372,1919185,172
+53373,1919357,153
+53374,1919510,135
+53375,1919645,191
+53376,1919836,141
+53377,1919977,175
+53378,1920152,133
+53379,1920285,142
+53380,1920427,215
+53381,1920642,150
+53382,1920792,140
+53383,1920932,135
+53384,1921067,133
+53385,1921200,202
+53386,1921402,151
+53387,1921553,197
+53388,1921750,148
+53389,1921898,143
+53390,1922041,137
+53391,1922178,156
+53392,1922334,147
+53393,1922481,162
+53394,1922643,161
+53395,1922804,155
+53396,1922959,159
+53397,1923118,193
+53398,1923311,165
+53399,1923476,161
+53400,1923637,165
+53401,1923802,139
+53402,1923941,145
+53403,1924086,152
+53404,1924238,151
+53405,1924389,136
+53406,1924525,126
+53407,1924651,144
+53408,1924795,133
+53409,1924928,171
+53410,1925099,173
+53411,1925272,144
+53412,1925416,161
+53413,1925577,133
+53414,1925710,208
+53415,1925918,183
+53416,1926101,148
+53417,1926249,190
+53418,1926439,174
+53419,1926613,155
+53420,1926768,140
+53421,1926908,130
+53422,1927038,167
+53423,1927205,163
+53424,1927368,172
+53425,1927540,160
+53426,1927700,153
+53427,1927853,163
+53428,1928016,156
+53429,1928172,161
+53430,1928333,154
+53431,1928487,160
+53432,1928647,95
+53433,1928742,239
+53434,1928981,154
+53435,1929135,154
+53436,1929289,153
+53437,1929442,138
+53438,1929580,122
+53439,1929702,157
+53440,1929859,152
+53441,1930011,164
+53442,1930175,150
+53443,1930325,172
+53444,1930497,154
+53445,1930651,163
+53446,1930814,189
+53447,1931003,136
+53448,1931139,120
+53449,1931259,194
+53450,1931453,197
+53451,1931650,180
+53452,1931830,174
+53453,1932004,197
+53454,1932201,142
+53455,1932343,144
+53456,1932487,178
+53457,1932665,135
+53458,1932800,149
+53459,1932949,161
+53460,1933110,148
+53461,1933258,137
+53462,1933395,153
+53463,1933548,144
+53464,1933692,144
+53465,1933836,197
+53466,1934033,198
+53467,1934231,158
+53468,1934389,165
+53469,1934554,149
+53470,1934703,173
+53471,1934876,178
+53472,1935054,198
+53473,1935252,151
+53474,1935403,145
+53475,1935548,226
+53476,1935774,147
+53477,1935921,163
+53478,1936084,148
+53479,1936232,160
+53480,1936392,198
+53481,1936590,193
+53482,1936783,168
+53483,1936951,150
+53484,1937101,179
+53485,1937280,112
+53486,1937392,159
+53487,1937551,110
+53488,1937661,159
+53489,1937820,167
+53490,1937987,147
+53491,1938134,139
+53492,1938273,161
+53493,1938434,144
+53494,1938578,133
+53495,1938711,173
+53496,1938884,191
+53497,1939075,210
+53498,1939285,211
+53499,1939496,166
+53500,1939662,151
+53501,1939813,147
+53502,1939960,166
+53503,1940126,147
+56576,1940273,148
+56577,1940421,148
+56578,1940569,148
+56579,1940717,148
+56580,1940865,148
+56581,1941013,148
+56582,1941161,148
+56583,1941309,148
+56584,1941457,148
+56585,1941605,148
+56586,1941753,148
+56587,1941901,148
+56588,1942049,148
+56589,1942197,148
+56590,1942345,148
+56591,1942493,148
+57344,1942641,186
+57345,1942827,167
+57346,1942994,169
+57347,1943163,213
+57348,1943376,138
+57349,1943514,150
+57350,1943664,203
+57351,1943867,160
+57352,1944027,151
+57353,1944178,169
+57354,1944347,125
+57355,1944472,159
+57356,1944631,128
+57357,1944759,137
+57358,1944896,159
+57359,1945055,183
+57360,1945238,156
+57361,1945394,139
+57362,1945533,177
+57363,1945710,201
+57364,1945911,150
+57365,1946061,150
+57366,1946211,157
+57367,1946368,121
+57368,1946489,154
+57369,1946643,151
+57370,1946794,168
+57371,1946962,158
+57372,1947120,150
+57373,1947270,144
+57374,1947414,150
+57375,1947564,161
+57376,1947725,115
+57377,1947840,138
+57378,1947978,154
+57379,1948132,98
+57380,1948230,139
+57381,1948369,159
+57382,1948528,153
+57383,1948681,124
+57384,1948805,142
+57385,1948947,148
+57386,1949095,145
+57387,1949240,140
+57388,1949380,129
+57389,1949509,153
+57390,1949662,155
+57391,1949817,176
+57392,1949993,169
+57393,1950162,172
+57394,1950334,172
+57395,1950506,131
+57396,1950637,150
+57397,1950787,145
+57398,1950932,168
+57399,1951100,133
+57400,1951233,155
+57401,1951388,136
+57402,1951524,164
+57403,1951688,159
+57404,1951847,123
+57405,1951970,160
+57406,1952130,159
+57407,1952289,146
+57408,1952435,161
+57409,1952596,111
+57410,1952707,145
+57411,1952852,120
+57412,1952972,143
+57413,1953115,138
+57414,1953253,134
+57415,1953387,157
+57416,1953544,147
+57417,1953691,143
+57418,1953834,175
+57419,1954009,180
+57420,1954189,214
+57421,1954403,160
+57422,1954563,148
+57423,1954711,150
+57424,1954861,180
+57425,1955041,138
+57426,1955179,160
+57427,1955339,143
+57428,1955482,139
+57429,1955621,182
+57430,1955803,150
+57431,1955953,204
+57432,1956157,144
+57433,1956301,156
+57434,1956457,164
+57435,1956621,161
+57436,1956782,190
+57437,1956972,144
+57438,1957116,194
+57439,1957310,145
+57440,1957455,122
+57441,1957577,157
+57442,1957734,154
+57443,1957888,189
+57444,1958077,144
+57445,1958221,169
+57446,1958390,156
+57447,1958546,159
+57448,1958705,148
+57449,1958853,124
+57450,1958977,112
+57451,1959089,147
+57452,1959236,204
+57453,1959440,147
+57454,1959587,132
+57455,1959719,133
+57456,1959852,140
+57457,1959992,158
+57458,1960150,132
+57459,1960282,173
+57460,1960455,162
+57461,1960617,145
+57462,1960762,160
+57463,1960922,132
+57464,1961054,144
+57465,1961198,105
+57466,1961303,120
+57467,1961423,123
+57468,1961546,150
+57469,1961696,126
+57470,1961822,151
+57471,1961973,135
+57472,1962108,166
+57473,1962274,145
+57474,1962419,107
+57475,1962526,162
+57476,1962688,141
+57477,1962829,156
+57478,1962985,155
+57479,1963140,193
+57480,1963333,144
+57481,1963477,152
+57482,1963629,167
+57483,1963796,137
+57484,1963933,160
+57485,1964093,148
+57486,1964241,122
+57487,1964363,150
+57488,1964513,161
+57489,1964674,162
+57490,1964836,142
+57491,1964978,139
+57492,1965117,105
+57493,1965222,199
+57494,1965421,151
+57495,1965572,157
+57496,1965729,172
+57497,1965901,118
+57498,1966019,146
+57499,1966165,161
+57500,1966326,139
+57501,1966465,139
+57502,1966604,148
+57503,1966752,122
+57504,1966874,129
+57505,1967003,177
+57506,1967180,136
+57507,1967316,150
+57508,1967466,124
+57509,1967590,171
+57510,1967761,151
+57511,1967912,180
+57512,1968092,122
+57513,1968214,152
+57514,1968366,153
+57515,1968519,116
+57516,1968635,130
+57517,1968765,147
+57518,1968912,146
+57519,1969058,214
+57520,1969272,150
+57521,1969422,193
+57522,1969615,162
+57523,1969777,151
+57524,1969928,144
+57525,1970072,168
+57526,1970240,149
+57527,1970389,151
+57528,1970540,134
+57529,1970674,140
+57530,1970814,160
+57531,1970974,138
+57532,1971112,169
+57533,1971281,160
+57534,1971441,157
+57535,1971598,200
+57536,1971798,168
+57537,1971966,168
+57538,1972134,115
+57539,1972249,195
+57540,1972444,156
+57541,1972600,165
+57542,1972765,137
+57543,1972902,127
+57544,1973029,173
+57545,1973202,167
+57546,1973369,147
+57547,1973516,122
+57548,1973638,187
+57549,1973825,145
+57550,1973970,117
+57551,1974087,191
+57552,1974278,136
+57553,1974414,158
+57554,1974572,173
+57555,1974745,131
+57556,1974876,140
+57557,1975016,143
+57558,1975159,207
+57559,1975366,169
+57560,1975535,171
+57561,1975706,128
+57562,1975834,161
+57563,1975995,181
+57564,1976176,139
+57565,1976315,169
+57566,1976484,108
+57567,1976592,120
+57568,1976712,141
+57569,1976853,151
+57570,1977004,134
+57571,1977138,138
+57572,1977276,186
+57573,1977462,170
+57574,1977632,136
+57575,1977768,153
+57576,1977921,160
+57577,1978081,161
+57578,1978242,164
+57579,1978406,162
+57580,1978568,139
+57581,1978707,138
+57582,1978845,108
+57583,1978953,117
+57584,1979070,174
+57585,1979244,140
+57586,1979384,161
+57587,1979545,167
+57588,1979712,141
+57589,1979853,107
+57590,1979960,153
+57591,1980113,150
+57592,1980263,128
+57593,1980391,150
+57594,1980541,163
+57595,1980704,132
+57596,1980836,200
+57597,1981036,208
+57598,1981244,150
+57599,1981394,174
+59091,1981568,160
+132865,1981728,165
+138364,1981893,175
+155782,1982068,184
+155788,1982252,147
+159745,1982399,165
+159920,1982564,156
+159923,1982720,155
+171406,1982875,163
+174652,1983038,175
+178945,1983213,141
+180364,1983354,161
+184092,1983515,163
+190163,1983678,202
+264928,1983880,168
+319684,1984048,142
+524289,1984190,161
+524290,1984351,164
+524291,1984515,160
+524292,1984675,154
+524293,1984829,134
+524294,1984963,175
+524295,1985138,151
+524296,1985289,162
+524297,1985451,170
+524298,1985621,166
+524299,1985787,143
+524300,1985930,148
+524301,1986078,191
+524302,1986269,134
+524303,1986403,162
+524305,1986565,181
+524306,1986746,165
+524307,1986911,58
+524308,1986969,124
+524309,1987093,185
+524310,1987278,172
+524311,1987450,159
+524312,1987609,171
+524313,1987780,164
+524314,1987944,160
+524315,1988104,135
+524316,1988239,205
+524317,1988444,160
+524318,1988604,148
+524319,1988752,178
+524320,1988930,152
+524321,1989082,158
+524322,1989240,139
+524323,1989379,170
+524324,1989549,180
+524325,1989729,139
+524326,1989868,130
+524327,1989998,146
+524328,1990144,151
+524329,1990295,145
+524330,1990440,157
+524331,1990597,183
+524332,1990780,142
+524333,1990922,134
+524334,1991056,161
+524335,1991217,146
+524336,1991363,161
+524336,1991524,106
+524336,1991630,154
+524337,1991784,147
+524338,1991931,152
+524339,1992083,160
+524340,1992243,148
+524341,1992391,168
+524342,1992559,161
+524343,1992720,179
+524344,1992899,140
+524345,1993039,173
+524346,1993212,144
+524347,1993356,174
+524348,1993530,190
+524349,1993720,148
+524350,1993868,160
+524351,1994028,98
+524352,1994126,202
+524353,1994328,174
+524354,1994502,96
+524355,1994598,144
+524356,1994742,141
+524357,1994883,155
+524358,1995038,161
+524359,1995199,196
+524360,1995395,169
+524361,1995564,132
+524362,1995696,143
+524363,1995839,177
+524364,1996016,154
+524365,1996170,143
+524366,1996313,174
+524367,1996487,136
+524368,1996623,142
+524369,1996765,127
+524370,1996892,126
+524371,1997018,171
+524373,1997189,148
+524374,1997337,166
+524375,1997503,165
+524376,1997668,141
+524377,1997809,119
+524378,1997928,161
+524379,1998089,150
+524380,1998239,145
+524381,1998384,160
+524382,1998544,160
+524383,1998704,154
+524384,1998858,162
+524385,1999020,157
+524386,1999177,157
+524387,1999334,145
+524388,1999479,156
+524389,1999635,142
+524390,1999777,144
+524391,1999921,132
+524392,2000053,147
+524393,2000200,190
+524394,2000390,158
+524395,2000548,152
+524396,2000700,154
+524397,2000854,156
+524398,2001010,123
+524399,2001133,162
+524400,2001295,174
+524401,2001469,143
+524402,2001612,202
+524403,2001814,124
+524404,2001938,171
+524405,2002109,153
+524406,2002262,157
+524407,2002419,190
+524408,2002609,141
+524409,2002750,136
+524410,2002886,118
+524411,2003004,160
+524412,2003164,160
+524414,2003324,189
+524415,2003513,182
+524416,2003695,151
+524417,2003846,141
+524418,2003987,149
+524419,2004136,158
+524420,2004294,164
+524421,2004458,114
+524422,2004572,169
+524423,2004741,118
+524424,2004859,179
+524425,2005038,137
+524426,2005175,172
+524427,2005347,161
+524428,2005508,161
+524429,2005669,134
+524430,2005803,141
+524431,2005944,176
+524432,2006120,157
+529475,2006277,137
+572364,2006414,158
+1048576,2006572,56
+1048666,2006628,161
+1048808,2006789,159
+1114282,2006948,56
+8388624,2007004,158
+10512896,2007162,145
+11141120,2007307,183
+11141121,2007490,183
+11141122,2007673,183
+11141123,2007856,183
+11141124,2008039,183
+11329096,2008222,56
diff --git a/netaddr/eui/oui.txt b/netaddr/eui/oui.txt
index 0eac75e..8cc791b 100644
--- a/netaddr/eui/oui.txt
+++ b/netaddr/eui/oui.txt
@@ -2136,8 +2136,8 @@ company_id Organization
00-01-4A (hex) Sony Corporation
00014A (base 16) Sony Corporation
- Engineering Standardization Office:MONO-ZUKURI Technology Div.
- Gotenyama Tec 5-1-2 Kitashinagawa,
+ Gotenyama Tec 5-1-2
+ Kitashinagawa,
Tokyo Shinagawa-ku 141-0001
JAPAN
@@ -3869,9 +3869,9 @@ company_id Organization
00-02-51 (hex) Soma Networks, Inc.
000251 (base 16) Soma Networks, Inc.
- 185 Berry Street
- Suite 2000
- San Francisco CA 94107
+ 650 Townsend St.
+ Suite 305
+ San Francisco CA 94103
UNITED STATES
00-02-52 (hex) Carrier Corporation
@@ -4623,7 +4623,7 @@ company_id Organization
00-02-C4 (hex) Vector International BVBA
0002C4 (base 16) Vector International BVBA
Technologielaan 4
- B-3001 Leuven Heverlee
+ 3001 Leuven
BELGIUM
00-02-C5 (hex) Evertz Microsystems Ltd.
@@ -9023,9 +9023,9 @@ company_id Organization
S-41121 Goteborg
SWEDEN
-00-05-69 (hex) VMWARE, Inc.
-000569 (base 16) VMWARE, Inc.
- 3145 Porter Dr., Bldg. F
+00-05-69 (hex) VMware, Inc.
+000569 (base 16) VMware, Inc.
+ 3401 Hillview Avenue
Palo Alto CA 94304
UNITED STATES
@@ -13748,10 +13748,10 @@ company_id Organization
Kangseo-Gu Seoul 157-810
KOREA, REPUBLIC OF
-00-08-72 (hex) Sorenson Technologies, Inc.
-000872 (base 16) Sorenson Technologies, Inc.
- 1011 West 400 North
- Logan UT 84321
+00-08-72 (hex) Sorenson Communications
+000872 (base 16) Sorenson Communications
+ 4192 South Riverboat Road
+ Salt Lake City UT 84123
UNITED STATES
00-08-73 (hex) DAP Design B.V.
@@ -14370,10 +14370,10 @@ company_id Organization
Canton Massachusetts 02021
UNITED STATES
-00-08-D5 (hex) Vanguard Managed Solutions
-0008D5 (base 16) Vanguard Managed Solutions
- 575 West Street
- Mansfield Ma. 02048
+00-08-D5 (hex) Vanguard Networks Solutions, LLC
+0008D5 (base 16) Vanguard Networks Solutions, LLC
+ 25 Forbes Boulevard
+ Foxboro MA 02035
UNITED STATES
00-08-D6 (hex) HASSNET Inc.
@@ -14894,8 +14894,8 @@ company_id Organization
Osaka 533-0021
JAPAN
-00-09-28 (hex) Telecore Inc
-000928 (base 16) Telecore Inc
+00-09-28 (hex) Telecore
+000928 (base 16) Telecore
1800 North Glenville
Suite 116
Richardson TX 75081
@@ -15870,9 +15870,12 @@ company_id Organization
Silkeborg DK-8600
DENMARK
-00-09-C2 (hex) PRIVATE
-0009C2 (base 16)
-
+00-09-C2 (hex) Onity, Inc.
+0009C2 (base 16) Onity, Inc.
+ 2232 Northmont Parkway
+ Duluth GA 30096
+ UNITED STATES
+
00-09-C3 (hex) NETAS
0009C3 (base 16) NETAS
Alemdag Cad. No 171
@@ -16228,8 +16231,8 @@ company_id Organization
Kawasaki Kanagawa 211-0016
JAPAN
-00-09-FB (hex) Philips Medizinsysteme Boeblingen GmbH
-0009FB (base 16) Philips Medizinsysteme Boeblingen GmbH
+00-09-FB (hex) Philips Patient Monitoring
+0009FB (base 16) Philips Patient Monitoring
Hewlett-Packard-Str.2
Boeblingen 71034
GERMANY
@@ -19751,7 +19754,7 @@ company_id Organization
00-0C-29 (hex) VMware, Inc.
000C29 (base 16) VMware, Inc.
- 3145 Porter Dr.
+ 3401 Hillview Avenue
Palo Alto CA 94304
UNITED STATES
@@ -21709,8 +21712,8 @@ company_id Organization
Somerset NJ 08873
UNITED STATES
-00-0D-5E (hex) NEC CustomTechnica, Ltd.
-000D5E (base 16) NEC CustomTechnica, Ltd.
+00-0D-5E (hex) NEC Personal Products
+000D5E (base 16) NEC Personal Products
6-80, Shimohanazawa 2-Chome
Yonezawa-shi Yamagata 992-8520
JAPAN
@@ -26059,10 +26062,10 @@ company_id Organization
BANGALORE 560 025
INDIA
-00-10-13 (hex) Kontron
-001013 (base 16) Kontron
- 6260 Sequence Drive
- San Diego CA 92121
+00-10-13 (hex) Kontron America, Inc.
+001013 (base 16) Kontron America, Inc.
+ 14118 Stowe Drive
+ Poway, CA 9206
UNITED STATES
00-10-14 (hex) CISCO SYSTEMS, INC.
@@ -26407,10 +26410,10 @@ company_id Organization
Sunnyvale CA 94085
UNITED STATES
-00-10-4A (hex) THE PARVUC CORPORATION
-00104A (base 16) THE PARVUC CORPORATION
- 396 W. IRONWOOD DRIVE
- SALT LAKE CITY UT 84115
+00-10-4A (hex) The Parvus Corporation
+00104A (base 16) The Parvus Corporation
+ 3222 S Washington St.
+ Salt Lake City UT 84115
UNITED STATES
00-10-4B (hex) 3COM CORPORATION
@@ -28368,9 +28371,9 @@ company_id Organization
Lichfield Staffordshire WS13 6SB
UNITED KINGDOM
-00-11-83 (hex) PSC Scanning, Inc
-001183 (base 16) PSC Scanning, Inc
- 959 Terry St
+00-11-83 (hex) Datalogic Mobile, Inc.
+001183 (base 16) Datalogic Mobile, Inc.
+ 1505 Westec Drive
Eugene OR 97402
UNITED STATES
@@ -31844,8 +31847,8 @@ company_id Organization
00-13-A9 (hex) Sony Corporation
0013A9 (base 16) Sony Corporation
- Engineering Standardization Office:MONO-ZUKURI Technology Div.
- Gotenyama Tec 5-1-2 Kitashinagawa,
+ Gotenyama Tec 5-1-2
+ Kitashinagawa,
Shinagawa-ku Tokyo 141-0001
JAPAN
@@ -34267,8 +34270,8 @@ company_id Organization
00-15-24 (hex) Numatics, Inc.
001524 (base 16) Numatics, Inc.
- 1450 North Milford Road
- Highland Michigan 48357
+ 46280 Dylan Dr.
+ Novi Michigan 48377
UNITED STATES
00-15-25 (hex) Chamberlain Access Solutions
@@ -40787,8 +40790,8 @@ company_id Organization
00-19-2B (hex) Aclara RF Systems Inc.
00192B (base 16) Aclara RF Systems Inc.
- 23905 Mercantile Rd
- Beachwood OH 44122
+ 30400 Solon Road
+ Solon OH 44139
UNITED STATES
00-19-2C (hex) Motorola Mobile Devices
@@ -41482,8 +41485,8 @@ company_id Organization
SAITAMA-SHI SAITAMA 330-0852
JAPAN
-00-19-99 (hex) Fujitsu Siemens Computers
-001999 (base 16) Fujitsu Siemens Computers
+00-19-99 (hex) Fujitsu Technology Solutions
+001999 (base 16) Fujitsu Technology Solutions
Buergermeister-Ulrich-Strasse 100
Augsburg 86199
GERMANY
@@ -42076,8 +42079,9 @@ company_id Organization
00-19-F5 (hex) Imagination Technologies Ltd
0019F5 (base 16) Imagination Technologies Ltd
- 23 The Calls
- Leeds West Yorkshire LS2 7EH
+ Zurich House
+ Canal Wharf
+ Leeds West Yorkshire LS11 5DB
UNITED KINGDOM
00-19-F6 (hex) Acconet (PTE) Ltd
@@ -42698,8 +42702,8 @@ company_id Organization
Newburgh IN 47630
UNITED STATES
-00-1A-58 (hex) Celectronic GmbH
-001A58 (base 16) Celectronic GmbH
+00-1A-58 (hex) CCV Deutschland GmbH - Celectronic eHealth Div.
+001A58 (base 16) CCV Deutschland GmbH - Celectronic eHealth Div.
Nordlichtstrasse 63
Berlin D-13405
GERMANY
@@ -42952,8 +42956,8 @@ company_id Organization
00-1A-80 (hex) Sony Corporation
001A80 (base 16) Sony Corporation
- Engineering Standardization Office:MONO-ZUKURI Technology Div
- Gotenyama Tec 5-1-2 Kitashinagawa
+ Gotenyama Tec 5-1-2
+ Kitashinagawa
Shinagawa-ku Tokyo 141-0001
JAPAN
@@ -45536,7 +45540,7 @@ company_id Organization
00-1C-14 (hex) VMware, Inc
001C14 (base 16) VMware, Inc
- 3145 Porter Drive
+ 3401 Hillview Avenue
Palo Alto CA 94304
UNITED STATES
@@ -48209,9 +48213,9 @@ company_id Organization
00-1D-BA (hex) Sony Corporation
001DBA (base 16) Sony Corporation
- Engineering Standardization Office:MONO-ZUKURI Technology Div.
- Gotenyama Tec. 5-1-12 Kitashinagawa Shinagawa-ku
- Tokyo 141-0001
+ Gotenyama Tec,5-1-12,
+ Kitashinagawa
+ Shinagawa-ku Tokyo 141-0001
JAPAN
00-1D-BB (hex) Dynamic System Electronics Corp.
@@ -49325,8 +49329,8 @@ company_id Organization
Lawrenceville GA 30044
UNITED STATES
-00-1E-6C (hex) Spliced Networks LLC
-001E6C (base 16) Spliced Networks LLC
+00-1E-6C (hex) Carbon Mountain LLC
+001E6C (base 16) Carbon Mountain LLC
4820 Fisher Road
Athens OH 45701
UNITED STATES
@@ -49353,7 +49357,7 @@ company_id Organization
00-1E-70 (hex) Cobham Defence Communications Ltd
001E70 (base 16) Cobham Defence Communications Ltd
Haslingden Road
- Blackburn Lancashire BB12EE
+ Blackburn Lancashire BB1 2EE
UNITED KINGDOM
00-1E-71 (hex) IgeaCare Systems Inc.
@@ -55047,8 +55051,8 @@ company_id Organization
Hong Kong 999077
CHINA
-00-21-F3 (hex) M31 SpA
-0021F3 (base 16) M31 SpA
+00-21-F3 (hex) Si14 SpA
+0021F3 (base 16) Si14 SpA
Via Tommaseo 77
Padova PD 35131
ITALY
@@ -57345,11 +57349,11 @@ company_id Organization
Dresden Saxony 01109
GERMANY
-00-23-60 (hex) Lookit Co., Ltd
-002360 (base 16) Lookit Co., Ltd
- R413 Excellence Mansion, Fuhua 1st Road,
- Futian District,
- Shenzhen Guangdong 518048
+00-23-60 (hex) Lookit Technology Co., Ltd
+002360 (base 16) Lookit Technology Co., Ltd
+ FL 8 Seashore Mansion
+ Bao'an CBD District
+ Shenzhen Guangdong 518100
CHINA
00-23-61 (hex) Unigen Corporation
@@ -61071,8 +61075,8 @@ company_id Organization
Shenzhen 518057
CHINA
-00-25-B2 (hex) OPE2
-0025B2 (base 16) OPE2
+00-25-B2 (hex) LFK-Lenkflugkörpersysteme GmbH
+0025B2 (base 16) LFK-Lenkflugkörpersysteme GmbH
Landshuter Straße 26
Unterschleißheim Bavaria 85716
GERMANY
@@ -61356,6 +61360,737 @@ company_id Organization
Seoul 152-878
KOREA, REPUBLIC OF
+00-25-DF (hex) PRIVATE
+0025DF (base 16)
+
+00-25-E0 (hex) CeedTec Sdn Bhd
+0025E0 (base 16) CeedTec Sdn Bhd
+ 303-4-5, Krystal Point Business Center
+ Bayan Lepas Penang 11900
+ MALAYSIA
+
+00-25-E1 (hex) SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
+0025E1 (base 16) SHANGHAI SEEYOO ELECTRONIC & TECHNOLOGY CO., LTD
+ RM701,XIN'AN BUILDING,99 TIANZHOU RD,XUHUI DISTRICT,SHANGHAI
+ SHANGHAI 200233
+ CHINA
+
+00-25-E2 (hex) Everspring Industry Co., Ltd.
+0025E2 (base 16) Everspring Industry Co., Ltd.
+ 7F., No. 609, Sec 1, Wanshou Rd.
+ Gueishan Township Taoyuan County 333
+ TAIWAN, REPUBLIC OF CHINA
+
+00-25-E3 (hex) Hanshinit Inc.
+0025E3 (base 16) Hanshinit Inc.
+ Dong-Won Bld 3F, 395-13, Gal-Ma 2, Seo-Gu
+ Daejeon 302-809
+ KOREA, REPUBLIC OF
+
+00-25-E4 (hex) OMNI-WiFi, LLC
+0025E4 (base 16) OMNI-WiFi, LLC
+ 107 Pine Hill Road
+ Berwick Maine 03901
+ UNITED STATES
+
+00-25-E5 (hex) LG Electronics Inc
+0025E5 (base 16) LG Electronics Inc
+ 60-39 ,Gasan-Dong
+ Gumchon-gu
+ Seoul 153-023
+ KOREA, REPUBLIC OF
+
+00-25-E6 (hex) Belgian Monitoring Systems bvba
+0025E6 (base 16) Belgian Monitoring Systems bvba
+ Th. Sevenslaan 106
+ Kortrijk WVL 8500
+ BELGIUM
+
+00-25-E7 (hex) Sony Ericsson Mobile Communications
+0025E7 (base 16) Sony Ericsson Mobile Communications
+ Nya Vattentornet
+ Lund 22188
+ SWEDEN
+
+00-25-E8 (hex) Idaho Technology
+0025E8 (base 16) Idaho Technology
+ 390 Wakara way
+ Salt lake City UT 84108
+ UNITED STATES
+
+00-25-E9 (hex) i-mate Development, Inc.
+0025E9 (base 16) i-mate Development, Inc.
+ 8383 158th Ave. N.E., Suite 300, Redmond,
+ WA 98052-3871
+ Washington WA 98052-3871
+ UNITED STATES
+
+00-25-EA (hex) Iphion BV
+0025EA (base 16) Iphion BV
+ Willemstraat 106
+ Eindhoven 5616GE
+ NETHERLANDS
+
+00-25-EB (hex) Reutech Radar Systems (PTY) Ltd
+0025EB (base 16) Reutech Radar Systems (PTY) Ltd
+ 35 Electron Avenue
+ Technopark
+ Stellenbosch Western Cape 7600
+ SOUTH AFRICA
+
+00-25-EC (hex) Humanware
+0025EC (base 16) Humanware
+ 445 rue du Parc Industriel
+ Longueuil Québec J4H 3V7
+ CANADA
+
+00-25-ED (hex) NuVo Technologies LLC
+0025ED (base 16) NuVo Technologies LLC
+ 3015 Kustom Drive
+ Hebron KY 41048
+ UNITED STATES
+
+00-25-EE (hex) Avtex Ltd
+0025EE (base 16) Avtex Ltd
+ Unit G5 Capital Business Park
+ Parkway
+ Cardiff CF3 2PX
+ UNITED KINGDOM
+
+00-25-EF (hex) I-TEC Co., Ltd.
+0025EF (base 16) I-TEC Co., Ltd.
+ 7/F,KAWARAMACHI KOYO BLDG.3-4-3,KAWARAMCHI,CHUO-KU,
+ OSAKA 541-0048
+ JAPAN
+
+00-25-F0 (hex) Suga Electronics Limited
+0025F0 (base 16) Suga Electronics Limited
+ Units 1904-1907, Chevalier Commercial Centre,
+ 8 Wang Hoi Road, ,
+ Kowloon Bay Hong Kong
+ CHINA
+
+00-25-F1 (hex) Motorola CHS
+0025F1 (base 16) Motorola CHS
+ 6450 Sequence Drive
+ San Diego CA 92121
+ UNITED STATES
+
+00-25-F2 (hex) Motorola CHS
+0025F2 (base 16) Motorola CHS
+ 6450 Sequence Drive
+ San Diego CA 92121
+ UNITED STATES
+
+00-25-F3 (hex) Nordwestdeutsche Zählerrevision
+0025F3 (base 16) Nordwestdeutsche Zählerrevision
+ Ing. Aug. Knemeyer GmbH & Co. KG
+ Heideweg 33
+ Bad Laer Niedersachsen 49196
+ GERMANY
+
+00-25-F4 (hex) KoCo Connector AG
+0025F4 (base 16) KoCo Connector AG
+ Marienstraße 12
+ Berlin 10117
+ GERMANY
+
+00-25-F5 (hex) DVS Korea, Co., Ltd
+0025F5 (base 16) DVS Korea, Co., Ltd
+ 497-3, SangHa-Dong, Giheung-gu
+ R&D Hardware 2Team
+ Yong-In city Gyeonggi-do 446-914
+ KOREA, REPUBLIC OF
+
+00-25-F6 (hex) netTALK.com, Inc.
+0025F6 (base 16) netTALK.com, Inc.
+ 1100 NW 163RD DRIVE
+ SUITE B-4
+ NORTH MIAMI BEACH FL 33169
+ UNITED STATES
+
+00-25-F7 (hex) Ansaldo STS USA
+0025F7 (base 16) Ansaldo STS USA
+ 1000 Technology Drive
+ Union Switch & Signal Building
+ Pittsburgh PA 15219
+ UNITED STATES
+
+00-25-F8 (hex) Zamir Recognition Systems Ltd.
+0025F8 (base 16) Zamir Recognition Systems Ltd.
+ Manachat Tech Park 1/22
+ Jerusalem 96951
+ ISRAEL
+
+00-25-F9 (hex) GMK electronic design GmbH
+0025F9 (base 16) GMK electronic design GmbH
+ Daimlerstr. 8
+ Wernberg-Koeblitz Bavaria D-92533
+ GERMANY
+
+00-25-FA (hex) J&M Analytik AG
+0025FA (base 16) J&M Analytik AG
+ Willy-Messerschmitt-Strasse 8
+ Essingen BW 73457
+ GERMANY
+
+00-25-FB (hex) Tunstall Healthcare A/S
+0025FB (base 16) Tunstall Healthcare A/S
+ Stroemmen 6
+ Noerresundby 9400
+ DENMARK
+
+00-25-FC (hex) ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
+0025FC (base 16) ENDA ENDUSTRIYEL ELEKTRONIK LTD. STI.
+ Y. Dudullu Barbaros C. Kutup S. No. 20
+ Umraniye
+ Istanbul 34775
+ TURKEY
+
+00-25-FD (hex) OBR Centrum Techniki Morskiej S.A.
+0025FD (base 16) OBR Centrum Techniki Morskiej S.A.
+ Dickmana 62
+ Gdynia 81-109
+ POLAND
+
+00-25-FE (hex) Pilot Electronics Corporation
+0025FE (base 16) Pilot Electronics Corporation
+ No. 2, Tzu-Chiang 3rd Road, Chung-Li Industrial Zone,
+ Taoyuan Hsien 32063
+ TAIWAN, REPUBLIC OF CHINA
+
+00-25-FF (hex) CreNova Technology GmbH
+0025FF (base 16) CreNova Technology GmbH
+ An der Schindhohl 7
+ Sulzbach Hessen 65843
+ GERMANY
+
+00-26-00 (hex) TEAC Australia Pty Ltd.
+002600 (base 16) TEAC Australia Pty Ltd.
+ 75 Northgate Drive
+ Thomastown Victoria 3074
+ AUSTRALIA
+
+00-26-01 (hex) PRIVATE
+002601 (base 16)
+
+00-26-02 (hex) SMART Temps LLC
+002602 (base 16) SMART Temps LLC
+ 303 S Byrkit St
+ Mishawaka IN 46544
+ UNITED STATES
+
+00-26-03 (hex) Shenzhen Wistar Technology Co., Ltd
+002603 (base 16) Shenzhen Wistar Technology Co., Ltd
+ Rm919, Science &Technology Service Center
+ No.1 Qilin Rd
+ Shenzhen Guang Dong 518000
+ CHINA
+
+00-26-04 (hex) Audio Processing Technology Ltd
+002604 (base 16) Audio Processing Technology Ltd
+ Whiterock Business Park
+ 729 Springfield Road
+ Belfast County Antrim BT12 7FP
+ UNITED KINGDOM
+
+00-26-05 (hex) CC Systems AB
+002605 (base 16) CC Systems AB
+ Box 83
+ Alfta Sweden 82222
+ SWEDEN
+
+00-26-06 (hex) RAUMFELD GmbH
+002606 (base 16) RAUMFELD GmbH
+ Reichenberger Str. 124
+ Berlin 10999
+ GERMANY
+
+00-26-07 (hex) Enabling Technology Pty Ltd
+002607 (base 16) Enabling Technology Pty Ltd
+ 23/44 Kings Park Road
+ West Perth Western Australia 6005
+ AUSTRALIA
+
+00-26-08 (hex) Apple, Inc
+002608 (base 16) Apple, Inc
+ 1 Infinite Loop
+ Cupertino CA 95014
+ UNITED STATES
+
+00-26-09 (hex) Phyllis Co., Ltd.
+002609 (base 16) Phyllis Co., Ltd.
+ 9th Fl., Room 3/4, No. 52, Sec. 2, Chung Shan North Road,
+ Taipei 104
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-0A (hex) Cisco Systems
+00260A (base 16) Cisco Systems
+ 80 West Tasman Dr.
+ SJC-M/1
+ San Jose CA 95134
+ UNITED STATES
+
+00-26-0B (hex) Cisco Systems
+00260B (base 16) Cisco Systems
+ 80 West Tasman Dr.
+ SJC-M/1
+ San Jose CA 95134
+ UNITED STATES
+
+00-26-0C (hex) Dataram
+00260C (base 16) Dataram
+ 186 Princeton Rd.
+ Bldg. 3A
+ West Windsor NJ 08550
+ UNITED STATES
+
+00-26-0D (hex) Micronetics, Inc.
+00260D (base 16) Micronetics, Inc.
+ 26 Hampshire Dr
+ Hudson NH 03051
+ UNITED STATES
+
+00-26-0E (hex) Ablaze Systems, LLC
+00260E (base 16) Ablaze Systems, LLC
+ 523 West Valley Road
+ Wayne Pennsylvania 19087
+ UNITED STATES
+
+00-26-0F (hex) Linn Products Ltd
+00260F (base 16) Linn Products Ltd
+ Glasgow Road
+ Waterfoot
+ Glasgow G76 0EQ
+ UNITED KINGDOM
+
+00-26-10 (hex) Apacewave Technologies
+002610 (base 16) Apacewave Technologies
+ 48389 Fremont Blvd, STE#100
+ Fremont CA 94538
+ UNITED STATES
+
+00-26-11 (hex) Licera AB
+002611 (base 16) Licera AB
+ Teknikringen 1C
+ Linköping 58330
+ SWEDEN
+
+00-26-12 (hex) Space Exploration Technologies
+002612 (base 16) Space Exploration Technologies
+ 1 Rocket Road
+ Hawthorne CA 90250
+ UNITED STATES
+
+00-26-13 (hex) Engel Axil S.L.
+002613 (base 16) Engel Axil S.L.
+ Puig dels Tudons, 6
+ Pol. Industrial Santiga
+ Barbera del Valles Barcelona 08210
+ SPAIN
+
+00-26-14 (hex) KTNF
+002614 (base 16) KTNF
+ 204,Daeryungtechnotown1,327,Gasan-Dong,
+ Geumcheon-Gu,
+ Seoul 153-771
+ KOREA, REPUBLIC OF
+
+00-26-15 (hex) Teracom Limited
+002615 (base 16) Teracom Limited
+ B-84
+ Sector - 60
+ Noida Uttar Pradesh 201301
+ INDIA
+
+00-26-16 (hex) Rosemount Inc.
+002616 (base 16) Rosemount Inc.
+ 8200 Market Boulevard
+ Chanhassen MN 55317
+ UNITED STATES
+
+00-26-17 (hex) OEM Worldwide
+002617 (base 16) OEM Worldwide
+ 2920 Kelly Ave
+ Watertown SD 57201
+ UNITED STATES
+
+00-26-18 (hex) ASUSTek COMPUTER INC.
+002618 (base 16) ASUSTek COMPUTER INC.
+ 15,Li-Te Rd.,Peitou
+ Taipei Taiwan 112
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-19 (hex) FRC
+002619 (base 16) FRC
+ 1511 South Benjamin Avenue
+ Mason City IA 50401
+ UNITED STATES
+
+00-26-1A (hex) Femtocomm System Technology Corp.
+00261A (base 16) Femtocomm System Technology Corp.
+ 2F.-2,No.28, Taiyuan St.,
+ Jhubei City, Hsinchu Country, 30288
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-1B (hex) LAUREL BANK MACHINES CO., LTD.
+00261B (base 16) LAUREL BANK MACHINES CO., LTD.
+ 12-6
+ higashitabata 1-Chome
+ Kita-Ku Tokyo 114-0013
+ JAPAN
+
+00-26-1C (hex) NEOVIA INC.
+00261C (base 16) NEOVIA INC.
+ 503 LOTTE IT CASTLE 1DONG,550-1
+ GASAN-DONG, GEUMCHEON-GU
+ SEOUL 153-768
+ KOREA, REPUBLIC OF
+
+00-26-1D (hex) COP SECURITY SYSTEM CORP.
+00261D (base 16) COP SECURITY SYSTEM CORP.
+ 4~7F, No.5, Lane 130, Min-Chung Rd.,
+ Hsin Tien City
+ Taipei 23141
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-1E (hex) QINGBANG ELEC(SZ) CO., LTD
+00261E (base 16) QINGBANG ELEC(SZ) CO., LTD
+ No. 2, qimin Rd. North District, High-tech Industrial Park, Nanshan,
+ Shenzhen Guangdong 518000
+ CHINA
+
+00-26-1F (hex) SAE Magnetics (H.K.) Ltd.
+00261F (base 16) SAE Magnetics (H.K.) Ltd.
+ SAE Technology Centre
+ 6 Science Park East Avenue
+ Hong Kong Science Park Shatin, New Territories
+ HONG KONG
+
+00-26-20 (hex) ISGUS GmbH
+002620 (base 16) ISGUS GmbH
+ Oberdorfstraße 18 - 22
+ VS - Schwenningen BW 78054
+ GERMANY
+
+00-26-21 (hex) InteliCloud Technology Inc.
+002621 (base 16) InteliCloud Technology Inc.
+ 895 Dove St.
+ Ste. 300
+ Newport Beach CA 92660
+ UNITED STATES
+
+00-26-22 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD.
+002622 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD.
+ NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE
+ KUNSHAN SUZHOU 215300
+ CHINA
+
+00-26-23 (hex) JRD Communication Inc
+002623 (base 16) JRD Communication Inc
+ 16/F, TCL Tower, Gaoxin Nanyi Road, Nanshan District
+ Shenzhen Guangdong 518057
+ CHINA
+
+00-26-24 (hex) Thomson Inc.
+002624 (base 16) Thomson Inc.
+ 101 West 103rd Street
+ Indianapolis IN 46290
+ UNITED STATES
+
+00-26-25 (hex) MediaSputnik
+002625 (base 16) MediaSputnik
+ Yaroslavskoe shosse, 19,
+ Moscow 129337
+ RUSSIAN FEDERATION
+
+00-26-26 (hex) Geophysical Survey Systems, Inc.
+002626 (base 16) Geophysical Survey Systems, Inc.
+ 12 Industrial Way
+ Salem NH 03079
+ UNITED STATES
+
+00-26-27 (hex) Truesell
+002627 (base 16) Truesell
+ 301 Sungyun Bldg, 89-2
+ Yangjae-dong,
+ Seocho-gu, Seoul 137-130
+ KOREA, REPUBLIC OF
+
+00-26-28 (hex) companytec automação e controle ltda
+002628 (base 16) companytec automação e controle ltda
+ Rua Marcilio Dias 3005
+ Pelotas Rio Grande do Sul 96020-480
+ BRAZIL
+
+00-26-29 (hex) Juphoon System Software Inc.
+002629 (base 16) Juphoon System Software Inc.
+ Room 910,Building 2
+ Shangdong Internation Building,Jiangdong District
+ Ningbo Zhejiang 315041
+ CHINA
+
+00-26-2A (hex) Proxense, LLC
+00262A (base 16) Proxense, LLC
+ 689 NW Stonepine Dr
+ Bend Oregon 97701
+ UNITED STATES
+
+00-26-2B (hex) Wongs Electronics Co. Ltd.
+00262B (base 16) Wongs Electronics Co. Ltd.
+ Wanfeng Ind. Esata, Shajing, Baoan,
+ Shenzhen Guang Dong 518104
+ CHINA
+
+00-26-2C (hex) IKT Advanced Technologies s.r.o.
+00262C (base 16) IKT Advanced Technologies s.r.o.
+ Piseckeho 334/19
+ Praha 5 15000
+ CZECH REPUBLIC
+
+00-26-2D (hex) Wistron Corporation
+00262D (base 16) Wistron Corporation
+ 21F, 88, Sec.1, Hsin Tai Wu Rd., Hsichih,
+ Taipei Hsien Taiwan 221
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-2E (hex) Chengdu Jiuzhou Electronic Technology Inc
+00262E (base 16) Chengdu Jiuzhou Electronic Technology Inc
+ A2 Building,Tianfu Software Park
+ No.765,Mid Tianfu Avenue,High-tech industrial Development Zone
+ Chengdu Sichuan 610041
+ CHINA
+
+00-26-2F (hex) HAMAMATSU TOA ELECTRONICS
+00262F (base 16) HAMAMATSU TOA ELECTRONICS
+ 9162-1
+ MIYAKODA-CHO
+ HAMAMATSU SIZUOKA 431-2102
+ JAPAN
+
+00-26-30 (hex) ACOREL S.A.S
+002630 (base 16) ACOREL S.A.S
+ 3, Rue Paul LANGEVIN
+ SAINT-PERAY F-07130
+ FRANCE
+
+00-26-31 (hex) COMMTACT LTD
+002631 (base 16) COMMTACT LTD
+ Nahal Snir 10
+ PO Box 169
+ Yazne 81101
+ ISRAEL
+
+00-26-32 (hex) Instrumentation Technologies d.d.
+002632 (base 16) Instrumentation Technologies d.d.
+ Velika pot 22
+ Solkan Nova Gorica 5250
+ SLOVENIA
+
+00-26-33 (hex) MIR - Medical International Research
+002633 (base 16) MIR - Medical International Research
+ Via del Maggiolino 125
+ Rome RM 00155
+ ITALY
+
+00-26-34 (hex) Infineta Systems, Inc
+002634 (base 16) Infineta Systems, Inc
+ 2870 Zanker Rd
+ Suite 100
+ San Jose CA 95134
+ UNITED STATES
+
+00-26-35 (hex) Bluetechnix GmbH
+002635 (base 16) Bluetechnix GmbH
+ Waidhausenstr. 3/19
+ Vienna 1140
+ AUSTRIA
+
+00-26-36 (hex) Motorola Mobile Devices
+002636 (base 16) Motorola Mobile Devices
+ 600 N. US 45
+ Libertyville IL 60048
+ UNITED STATES
+
+00-26-37 (hex) Samsung Electro-Mechanics
+002637 (base 16) Samsung Electro-Mechanics
+ 314, Metan dong
+ Suwon Kyung-ki do 443-743
+ KOREA, REPUBLIC OF
+
+00-26-38 (hex) Xia Men Joyatech Co., Ltd.
+002638 (base 16) Xia Men Joyatech Co., Ltd.
+ Room 304, 28th Building, Guanri Road, Xiamen Software Park
+ Xiamen Fujian Province 361008
+ CHINA
+
+00-26-39 (hex) T.M. Electronics, Inc.
+002639 (base 16) T.M. Electronics, Inc.
+ 45 Main St
+ Boylston MA 01505
+ UNITED STATES
+
+00-26-3A (hex) Digitec Systems
+00263A (base 16) Digitec Systems
+ C5A/257, 1st Floor
+ Janakpuri
+ New Delhi Delhi 110058
+ INDIA
+
+00-26-3B (hex) Onbnetech
+00263B (base 16) Onbnetech
+ 506, Samsung IT Valley, 197-5
+ Guro-Dong
+ Guro-Gu Seoul 152-848
+ KOREA, REPUBLIC OF
+
+00-26-3C (hex) Bachmann GmbH & Co. KG
+00263C (base 16) Bachmann GmbH & Co. KG
+ Ernsthaldenstrasse 33
+ Stuttgart BW 70565
+ GERMANY
+
+00-26-3D (hex) MIA Corporation
+00263D (base 16) MIA Corporation
+ 1-3-15 Yoshino-cho, Minami-ku
+ Yokohama Kanagawa 232-0014
+ JAPAN
+
+00-26-3E (hex) Trapeze Networks
+00263E (base 16) Trapeze Networks
+ 5753 West Las Positas Blvd.
+ Pleasanton California 94588
+ UNITED STATES
+
+00-26-3F (hex) LIOS Technology GmbH
+00263F (base 16) LIOS Technology GmbH
+ Schanzenstraße 39
+ Building D9-D13
+ Köln Germany D-51063
+ GERMANY
+
+00-26-40 (hex) Baustem Broadband Technologies, Ltd.
+002640 (base 16) Baustem Broadband Technologies, Ltd.
+ 910 Quantum Plaza
+ No.23 Zhichun Road
+ Beijing 100191
+ CHINA
+
+00-26-41 (hex) Motorola, Inc
+002641 (base 16) Motorola, Inc
+ 1101 Marina Village Parkway
+ Suite 200
+ Alameda CA 94501
+ UNITED STATES
+
+00-26-42 (hex) Motorola, Inc
+002642 (base 16) Motorola, Inc
+ 1101 Marina Village Parkway
+ Suite 200
+ Alameda CA 94501
+ UNITED STATES
+
+00-26-43 (hex) Alps Electric Co., Ltd
+002643 (base 16) Alps Electric Co., Ltd
+ 1-2-1,Okinouchi
+ Soma-city Fukushima-ken 976-8501
+ JAPAN
+
+00-26-44 (hex) Thomson Telecom Belgium
+002644 (base 16) Thomson Telecom Belgium
+ Prins Boudewijnlaan 47
+ Edegem Antwerp B-2650
+ BELGIUM
+
+00-26-45 (hex) Circontrol S.A.
+002645 (base 16) Circontrol S.A.
+ Lepant 43
+ Terrassa Barcelona 08223
+ SPAIN
+
+00-26-46 (hex) SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
+002646 (base 16) SHENYANG TONGFANG MULTIMEDIA TECHNOLOGY COMPANY LIMITED
+ No.10 Ping Nan East Road
+ Hunnan New District.
+ Shenyang Liao Ning 110014
+ CHINA
+
+00-26-47 (hex) WFE TECHNOLOGY CORP.
+002647 (base 16) WFE TECHNOLOGY CORP.
+ 17F NO.238,Chin-Hua N Rd,
+ Taichung 404
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-48 (hex) Emitech Corp.
+002648 (base 16) Emitech Corp.
+ No. 156-5A, ChengGong 1st St.,
+ Jhubei City Hsinchu County 302
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-49 (hex) PRIVATE
+002649 (base 16)
+
+00-26-4A (hex) Apple, Inc
+00264A (base 16) Apple, Inc
+ 1 Infinite Loop
+ San Francisco CA 95014
+ UNITED STATES
+
+00-26-4B (hex) PRIVATE
+00264B (base 16)
+
+00-26-4C (hex) Shanghai DigiVision Technology Co., Ltd.
+00264C (base 16) Shanghai DigiVision Technology Co., Ltd.
+ No. 333 Guangji Rd.
+ Shanghai 200083
+ CHINA
+
+00-26-4D (hex) Arcadyan Technology Corporation
+00264D (base 16) Arcadyan Technology Corporation
+ 4F., No. 9 , Park Avenue II ,
+ Hsinchu Science Park ,
+ Hsinchu Taiwan 300
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-4E (hex) Rail & Road Protec GmbH
+00264E (base 16) Rail & Road Protec GmbH
+ Norderhofenden 12-13
+ Flensburg 24937
+ GERMANY
+
+00-26-4F (hex) Krüger&Gothe GmbH
+00264F (base 16) Krüger&Gothe GmbH
+ Atzendorfer Strasse 19
+ Stassfurt Sachsen Anhalt 39418
+ GERMANY
+
+00-26-50 (hex) 2Wire
+002650 (base 16) 2Wire
+ 1764 Automation Parkway
+ San Jose CA 95131
+ UNITED STATES
+
+00-26-51 (hex) Cisco Systems
+002651 (base 16) Cisco Systems
+ 80 West Tasman Dr.
+ SJC-M/1
+ San Jose CA 95134
+ UNITED STATES
+
+00-26-52 (hex) Cisco Systems
+002652 (base 16) Cisco Systems
+ 80 West Tasman Dr.
+ SJC-M/1
+ San Jose CA 95134
+ UNITED STATES
+
+00-26-53 (hex) DaySequerra Corporation
+002653 (base 16) DaySequerra Corporation
+ 154 Cooper Road
+ Suite #902
+ West Berlin NJ 08091
+ UNITED STATES
+
00-26-54 (hex) 3Com Corporation
002654 (base 16) 3Com Corporation
5353 Betsy Ross Drive
@@ -61363,6 +62098,339 @@ company_id Organization
Santa Clara California 95054-1162
UNITED STATES
+00-26-55 (hex) Hewlett Packard
+002655 (base 16) Hewlett Packard
+ 11445 Compaq Center Drive
+ Ms 060302
+ Houston Texas 77095
+ UNITED STATES
+
+00-26-56 (hex) Sansonic Electronics USA
+002656 (base 16) Sansonic Electronics USA
+ 9950 Baldwin Place
+ El Monte Cailfornia 91731
+ UNITED STATES
+
+00-26-57 (hex) OOO NPP EKRA
+002657 (base 16) OOO NPP EKRA
+ I.Yakovleva St., 3
+ Cheboksary Chuvash Republic 428003
+ RUSSIAN FEDERATION
+
+00-26-58 (hex) T-Platforms (Cyprus) Limited
+002658 (base 16) T-Platforms (Cyprus) Limited
+ Themistokli Dervi 3, Julia House
+ Nicosia P.C.-1066
+ CYPRUS
+
+00-26-59 (hex) Nintendo Co., Ltd.
+002659 (base 16) Nintendo Co., Ltd.
+ 11-1 HOKOTATE-CHO
+ KAMITOBA, MINAMI-KU
+ KYOTO 601-8501
+ JAPAN
+
+00-26-5A (hex) D-Link Corporation
+00265A (base 16) D-Link Corporation
+ No.289, Sinhu 3rd Rd.,
+ Neihu District 114
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-5B (hex) Hitron Technologies. Inc
+00265B (base 16) Hitron Technologies. Inc
+ No. 1-8, Lising 1st Rd. Hsinchu Science Park,
+ Hsin-chu 300
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-5C (hex) Hon Hai Precision Ind. Co.,Ltd.
+00265C (base 16) Hon Hai Precision Ind. Co.,Ltd.
+ NO.1925,Nanle Road ,Songjiang Export Processing Zone
+ Shanghai 201613
+ CHINA
+
+00-26-5D (hex) Samsung Electronics
+00265D (base 16) Samsung Electronics
+ #94-1, Imsoo-Dong
+ Gumi Gyeongbuk 730-350
+ KOREA, REPUBLIC OF
+
+00-26-5E (hex) Hon Hai Precision Ind. Co.,Ltd.
+00265E (base 16) Hon Hai Precision Ind. Co.,Ltd.
+ NO.1925,Nanle Road ,Songjiang Export Processing Zone
+ Shanghai 201613
+ CHINA
+
+00-26-5F (hex) Samsung Electronics Co.,Ltd
+00265F (base 16) Samsung Electronics Co.,Ltd
+ #94-1, Imsoo-Dong
+ Gumi Gyeongbuk 730-350
+ KOREA, REPUBLIC OF
+
+00-26-60 (hex) Logiways
+002660 (base 16) Logiways
+ 24/26 rue Louis ARMAND
+ PARIS 75015
+ FRANCE
+
+00-26-61 (hex) Irumtek Co., Ltd.
+002661 (base 16) Irumtek Co., Ltd.
+ Apt 708 513-22 Joongil Eines Platz
+ Sangdaewon-dong, Jungwon-Gu
+ Seongnam-City Gyunggi-do 462-120
+ KOREA, REPUBLIC OF
+
+00-26-62 (hex) Actiontec Electronics, Inc
+002662 (base 16) Actiontec Electronics, Inc
+ 760 North Mary Ave
+ Sunnyvale CA 94085
+ UNITED STATES
+
+00-26-63 (hex) Shenzhen Huitaiwei Tech. Ltd, co.
+002663 (base 16) Shenzhen Huitaiwei Tech. Ltd, co.
+ JianDa Building,501-502
+ Kewei No. 1
+ Shenzhen Guangdong 518000
+ CHINA
+
+00-26-64 (hex) Core System Japan
+002664 (base 16) Core System Japan
+ Bunshu Bldg,2-27-6,Myojin
+ Hachioji Tokyo 1920046
+ JAPAN
+
+00-26-65 (hex) ProtectedLogic Corporation
+002665 (base 16) ProtectedLogic Corporation
+ PO Box 67707
+ Albuquerque NM 87193
+ UNITED STATES
+
+00-26-66 (hex) EFM Networks
+002666 (base 16) EFM Networks
+ 6F Benposra II B/D 1802-1
+ Bojeong-dong Giheung-gu,
+ Yong In Kyunggi-do 446-913
+ KOREA, REPUBLIC OF
+
+00-26-67 (hex) CARECOM CO.,LTD.
+002667 (base 16) CARECOM CO.,LTD.
+ 3-35-4
+ Tamagawa
+ Chofu Tokyo 182-0025
+ JAPAN
+
+00-26-68 (hex) Nokia Danmark A/S
+002668 (base 16) Nokia Danmark A/S
+ Frederikskaj
+ Copenhagen V DK-1790
+ DENMARK
+
+00-26-69 (hex) Nokia Danmark A/S
+002669 (base 16) Nokia Danmark A/S
+ Frederikskaj
+ Copenhagen V DK-1790
+ DENMARK
+
+00-26-6A (hex) ESSENSIUM NV
+00266A (base 16) ESSENSIUM NV
+ Gaston Geenslaan 9
+ LEUVEN VL BRABANT 3001
+ BELGIUM
+
+00-26-6B (hex) SHINE UNION ENTERPRISE LIMITED
+00266B (base 16) SHINE UNION ENTERPRISE LIMITED
+ UNIT 1211, 12FL., CHEVALIER COMMERCIAL CENTER,
+ NO.8 WANG HOI ROAD, KOWLOONBAY
+ KOWLOON NIL
+ HONG KONG
+
+00-26-6C (hex) Inventec
+00266C (base 16) Inventec
+ Inventec Building, 66 Hou-Kang Street Shih-Lin District,
+ Taipei 111
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-6D (hex) MobileAccess Networks
+00266D (base 16) MobileAccess Networks
+ 8391 Old Courthouse Rd.
+ Suite 300
+ Vienna VA 22182
+ UNITED STATES
+
+00-26-6E (hex) Nissho-denki Co.,LTD.
+00266E (base 16) Nissho-denki Co.,LTD.
+ 3-7-6,chidori
+ ohta Tokyo 146-0083
+ JAPAN
+
+00-26-6F (hex) Coordiwise Technology Corp.
+00266F (base 16) Coordiwise Technology Corp.
+ 2F., No.123, Sec. 1, Lioujia 5th Rd.
+ Jhubei City, Hsinchu County 30272
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-70 (hex) Cinch Connectors
+002670 (base 16) Cinch Connectors
+ 1700 Finley Road
+ Lombard IL 60148
+ UNITED STATES
+
+00-26-71 (hex) AUTOVISION Co., Ltd
+002671 (base 16) AUTOVISION Co., Ltd
+ Shinsegae YBS Bldg. 102
+ 227-1, Yongdap-Dong
+ Seongdong-gu Seoul 133-847
+ KOREA, REPUBLIC OF
+
+00-26-72 (hex) AAMP of America
+002672 (base 16) AAMP of America
+ 13190 56th Court
+ Suite 401
+ Clearwater Florida 33760
+ UNITED STATES
+
+00-26-73 (hex) RICOH COMPANY LTD.
+002673 (base 16) RICOH COMPANY LTD.
+ 810 SHIMOIMAIZUMI
+ Ebina City KANAGAWA PREF 243-0460
+ JAPAN
+
+00-26-74 (hex) Electronic Solutions, Inc.
+002674 (base 16) Electronic Solutions, Inc.
+ 1355 Horizon Avenue
+ Lafayette CO 80026
+ UNITED STATES
+
+00-26-75 (hex) Aztech Electronics Pte Ltd
+002675 (base 16) Aztech Electronics Pte Ltd
+ 31 Ubi Road 1
+ Aztech Building
+ Singapore 408694
+ SINGAPORE
+
+00-26-76 (hex) COMMidt AS
+002676 (base 16) COMMidt AS
+ Kikregata 57-59
+ Levanger Nord-Troendelag 7600
+ NORWAY
+
+00-26-77 (hex) DEIF A/S
+002677 (base 16) DEIF A/S
+ Frisenborgvej 33
+ Skive 7800
+ DENMARK
+
+00-26-78 (hex) Logic Instrument SA
+002678 (base 16) Logic Instrument SA
+ 43, Avenue de l'Europe
+ BP 60012
+ Domont 95330
+ FRANCE
+
+00-26-79 (hex) Euphonic Technologies, Inc.
+002679 (base 16) Euphonic Technologies, Inc.
+ 2-5-10 Shin-yokohama, Kouhoku-ku
+ Yokohama 222-0033
+ JAPAN
+
+00-26-7A (hex) wuhan hongxin telecommunication technologies co.,ltd
+00267A (base 16) wuhan hongxin telecommunication technologies co.,ltd
+ No.5 Donxin Road,Wuhan East Lake High-Tech Development Zone
+ Wuhan Hubei 430073
+ CHINA
+
+00-26-7B (hex) GSI Helmholtzzentrum für Schwerionenforschung GmbH
+00267B (base 16) GSI Helmholtzzentrum für Schwerionenforschung GmbH
+ Planckstraße 1
+ Darmstadt Hessen 64291
+ GERMANY
+
+00-26-7C (hex) Metz-Werke GmbH & Co KG
+00267C (base 16) Metz-Werke GmbH & Co KG
+ Ohmstrasse 55
+ Zirndorf 90513
+ GERMANY
+
+00-26-7D (hex) A-Max Technology Macao Commercial Offshore Company Limited
+00267D (base 16) A-Max Technology Macao Commercial Offshore Company Limited
+ Avenida Da Praia Grande No. 409
+ Edificio Dos Servicos Juridicos Da China 5A
+ Macau
+ CHINA
+
+00-26-7E (hex) Parrot SA
+00267E (base 16) Parrot SA
+ 174 quai de Jemmapes
+ Paris 78100
+ FRANCE
+
+00-26-7F (hex) Zenterio AB
+00267F (base 16) Zenterio AB
+ Diskettgatan 11B
+ Linköping 58335
+ SWEDEN
+
+00-26-80 (hex) Lockie Innovation Pty Ltd
+002680 (base 16) Lockie Innovation Pty Ltd
+ Unit 24
+ 2-12 Temple Street
+ Ashwood VICTORIA 3147
+ AUSTRALIA
+
+00-26-81 (hex) Interspiro AB
+002681 (base 16) Interspiro AB
+ Box 10060
+ Lidingö 18110
+ SWEDEN
+
+00-26-82 (hex) Gemtek Technology Co., Ltd.
+002682 (base 16) Gemtek Technology Co., Ltd.
+ No.1 Jen Ai Road, Hsinchu Industrial Park,
+ Hsinchu Taiwan 303
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-83 (hex) Ajoho Enterprise Co., Ltd.
+002683 (base 16) Ajoho Enterprise Co., Ltd.
+ 1F., No.300-3, Sec. 3, Hoping W. Rd., Wan-Hua 108
+ Taipei Taiwan 108
+ TAIWAN, REPUBLIC OF CHINA
+
+00-26-84 (hex) KISAN SYSTEM
+002684 (base 16) KISAN SYSTEM
+ YUCHEON PACTOPIA 623, ANYANG7
+ ANYANG GYEONGGI 430-727
+ KOREA, REPUBLIC OF
+
+00-26-85 (hex) Digital Innovation
+002685 (base 16) Digital Innovation
+ Travbaneveien 6
+ Trondheim 7044
+ NORWAY
+
+00-26-86 (hex) Quantenna Communcations, Inc.
+002686 (base 16) Quantenna Communcations, Inc.
+ 3450 W. Warren Ave.
+ Fremont CA 94538
+ UNITED STATES
+
+00-26-87 (hex) corega K.K.
+002687 (base 16) corega K.K.
+ 1-19-20, Shinyokohama
+ Kouhoku-ku
+ Yokohama-city Kanagawa-ken 222-0033
+ JAPAN
+
+00-26-88 (hex) Juniper Networks
+002688 (base 16) Juniper Networks
+ 1194 N Mathilda Avenue
+ Sunnyvale CA 94089
+ UNITED STATES
+
+00-26-89 (hex) General Dynamics Robotic Systems
+002689 (base 16) General Dynamics Robotic Systems
+ 1231 Tech Court
+ Westminster MD 21157
+ UNITED STATES
+
00-30-00 (hex) ALLWELL TECHNOLOGY CORP.
003000 (base 16) ALLWELL TECHNOLOGY CORP.
4F, #15, LANE3, SEC.2
@@ -61428,10 +62496,11 @@ company_id Organization
Eatontown NJ 07724
UNITED STATES
-00-30-0A (hex) AZTECH SYSTEMS LTD.
-00300A (base 16) AZTECH SYSTEMS LTD.
- 31 UBI ROAD 1, AZTECH BUILDING
- SINGAPORE 408694
+00-30-0A (hex) AZTECH Electronics Pte Ltd
+00300A (base 16) AZTECH Electronics Pte Ltd
+ 31 UBI ROAD 1
+ AZTECH BUILDING
+ 408694
SINGAPORE
00-30-0B (hex) mPHASE Technologies, Inc.
@@ -61668,8 +62737,8 @@ company_id Organization
30659 Hannover
GERMANY
-00-30-2F (hex) Smiths Industries
-00302F (base 16) Smiths Industries
+00-30-2F (hex) GE Aviation System
+00302F (base 16) GE Aviation System
3290 Patterson Ave., S.E.
Grand Rapids MI 49512
UNITED STATES
@@ -62299,10 +63368,10 @@ company_id Organization
CH-8840 Einsledeln
SWITZERLAND
-00-30-93 (hex) SONNET TECHNOLOGIES, INC.
-003093 (base 16) SONNET TECHNOLOGIES, INC.
- 3390 BUFORD DRIVE - STE. #7
- BUFORD GA 30519
+00-30-93 (hex) Sonnet Technologies, Inc
+003093 (base 16) Sonnet Technologies, Inc
+ 8 Autry
+ Irvine, CA 92618
UNITED STATES
00-30-94 (hex) Cisco Systems, Inc.
@@ -63857,11 +64926,11 @@ company_id Organization
BRAZIL
BRAZIL
-00-40-84 (hex) HONEYWELL INC.
-004084 (base 16) HONEYWELL INC.
- HONEYWELL SSDC - M.S. 2300
- 3660 TECHNOLOGY DRIVE
- MINNEAPOLIS MN 55418
+00-40-84 (hex) HONEYWELL ACS
+004084 (base 16) HONEYWELL ACS
+
+ 512 Virginia Drive
+ Fort Washington PA 19034
UNITED STATES
00-40-85 (hex) SAAB INSTRUMENTS AB
@@ -65171,10 +66240,10 @@ company_id Organization
DENMARK
DENMARK
-00-50-56 (hex) VMWare, Inc.
-005056 (base 16) VMWare, Inc.
- 44 ENCINA AVENUE
- PALO ALTO CA 94301
+00-50-56 (hex) VMware, Inc.
+005056 (base 16) VMware, Inc.
+ 3401 Hillview Avenue
+ PALO ALTO CA 94304
UNITED STATES
00-50-57 (hex) BROADBAND ACCESS SYSTEMS
@@ -71108,10 +72177,11 @@ company_id Organization
EIGHT MILE PLAINS QLD 4113
AUSTRALIA
-00-A0-03 (hex) STAEFA CONTROL SYSTEM
-00A003 (base 16) STAEFA CONTROL SYSTEM
- LAUBISRUETI 50
- 8712 STAEFA
+00-A0-03 (hex) Siemens Switzerland Ltd., I B T HVP
+00A003 (base 16) Siemens Switzerland Ltd., I B T HVP
+ Building Technologies Division, International Headquarters
+ I BT HVP SYS RD EU Gubelstrasse 22
+ Zug 6301
SWITZERLAND
00-A0-04 (hex) NETPOWER, INC.
@@ -72555,10 +73625,11 @@ company_id Organization
FREEMONT CA 94539
UNITED STATES
-00-A0-EB (hex) Encore Networks
-00A0EB (base 16) Encore Networks
- 45472 Holiday Drive
- Dulles VA 20166
+00-A0-EB (hex) Encore Networks, Inc.
+00A0EB (base 16) Encore Networks, Inc.
+ 3800 Concorde Parkway,
+ Suite 1500
+ Chantilly, VA 20151
UNITED STATES
00-A0-EC (hex) TRANSMITTON LTD.
@@ -74130,10 +75201,10 @@ company_id Organization
RALEIGH NC 27609
UNITED STATES
-00-C0-B6 (hex) Adaptec, Inc.
-00C0B6 (base 16) Adaptec, Inc.
- 691 South Milpitas Boulevard
- Milpitas CA 95035
+00-C0-B6 (hex) Overland Storage, Inc.
+00C0B6 (base 16) Overland Storage, Inc.
+ 4820 Overland Avenue
+ San Diego CA 92123
UNITED STATES
00-C0-B7 (hex) AMERICAN POWER CONVERSION CORP
@@ -78522,7 +79593,7 @@ company_id Organization
08-00-46 (hex) Sony Corporation
080046 (base 16) Sony Corporation
- 5-1-2 Kitashinagawa
+ Gotenyama Tec, 5-1-2 Kitashinagawa
Shinagawa-ku
Tokyo 141-0001
JAPAN
diff --git a/netaddr/fallback.py b/netaddr/fbsocket.py
index e62abbb..79b1b60 100755..100644
--- a/netaddr/fallback.py
+++ b/netaddr/fbsocket.py
@@ -1,255 +1,254 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-A module containing pure-Python implementations of certain socket module
-constants and functions. Useful on some platforms or Python interpreters where
-they may be missing for various reasons.
-"""
-from struct import unpack as _unpack, pack as _pack
-
-AF_UNSPEC = 0
-AF_INET = 2
-AF_INET6 = 10
-
-#-----------------------------------------------------------------------------
-def inet_ntoa(packed_ip):
- """
- Convert an IP address from 32-bit packed binary format to string format.
- """
- if len(packed_ip) != 4 or not hasattr(packed_ip, 'split'):
- raise ValueError('invalid length of packed IP address string')
- return '%d.%d.%d.%d' % _unpack('4B', packed_ip)
-
-#-----------------------------------------------------------------------------
-def inet_aton(ip_string):
- """
- Convert an IP address in string format (123.45.67.89) to the 32-bit packed
- binary format used in low-level network functions.
- """
- if hasattr(ip_string, 'split'):
- invalid_addr = ValueError('illegal IP address string %r' % ip_string)
- # Support for hexadecimal and octal octets.
- tokens = []
- base = 10
- for token in ip_string.split('.'):
- if token.startswith('0x'):
- base = 16
- elif token.startswith('0') and len(token) > 1:
- base = 8
- elif token == '':
- continue
- try:
- tokens.append(int(token, base))
- except ValueError:
- raise invalid_addr
-
- # Zero fill missing octets.
- num_tokens = len(tokens)
- if num_tokens < 4:
- fill_tokens = [0] * (4 - num_tokens)
- if num_tokens > 1:
- end_token = tokens.pop()
- tokens = tokens + fill_tokens + [end_token]
- else:
- tokens = tokens + fill_tokens
-
- # Pack octets.
- if len(tokens) == 4:
- words = []
- for token in tokens:
- if (token >> 8) != 0:
- raise invalid_addr
- words.append(chr(token))
- return ''.join(words)
- else:
- raise invalid_addr
-
- raise ValueError('argument should be a string, not %s' % type(ip_string))
-
-#-----------------------------------------------------------------------------
-def _compact_ipv6_tokens(tokens):
- new_tokens = []
-
- positions = []
- within_run = False
- start_index = None
- num_tokens = 0
-
- # Discover all runs of zeros.
- for idx, token in enumerate(tokens):
- if token == '0':
- within_run = True
- if start_index is None:
- start_index = idx
- num_tokens += 1
- else:
- if num_tokens > 1:
- positions.append((num_tokens, start_index))
- within_run = False
- start_index = None
- num_tokens = 0
-
- new_tokens.append(token)
-
- # Store any position not saved before loop exit.
- if num_tokens > 1:
- positions.append((num_tokens, start_index))
-
- # Replace first longest run with an empty string.
- if len(positions) != 0:
- # Locate longest, left-most run of zeros.
- positions.sort(lambda x, y: cmp(x[1], y[1]))
- best_position = positions[0]
- for position in positions:
- if position[0] > best_position[0]:
- best_position = position
- # Replace chosen zero run.
- (length, start_idx) = best_position
- new_tokens = new_tokens[0:start_idx] + [''] + \
- new_tokens[start_idx+length:]
-
- # Add start and end blanks so join creates '::'.
- if new_tokens[0] == '':
- new_tokens.insert(0, '')
-
- if new_tokens[-1] == '':
- new_tokens.append('')
-
- return new_tokens
-
-#-----------------------------------------------------------------------------
-def inet_ntop(af, packed_ip):
- """Convert an packed IP address of the given family to string format."""
- if af == AF_INET:
- # IPv4.
- return inet_ntoa(packed_ip)
- elif af == AF_INET6:
- # IPv6.
- if len(packed_ip) != 16 or not hasattr(packed_ip, 'split'):
- raise ValueError('invalid length of packed IP address string')
-
- tokens = ['%x' % i for i in _unpack('>8H', packed_ip)]
-
- # Convert packed address to an integer value.
- words = list(_unpack('>8H', packed_ip))
- int_val = 0
- for i, num in enumerate(reversed(words)):
- word = num
- word = word << 16 * i
- int_val = int_val | word
-
- if 0xffff < int_val <= 0xffffffff or int_val >> 32 == 0xffff:
- # IPv4 compatible / mapped IPv6.
- packed_ipv4 = _pack('>2H', *[int(i, 16) for i in tokens[-2:]])
- ipv4_str = inet_ntoa(packed_ipv4)
- tokens = tokens[0:-2] + [ipv4_str]
-
- return ':'.join(_compact_ipv6_tokens(tokens))
- else:
- raise ValueError('unknown address family %d' % af)
-
-#-----------------------------------------------------------------------------
-def inet_pton(af, ip_string):
- """
- Convert an IP address from string format to a packed string suitable for
- use with low-level network functions.
- """
- if af == AF_INET:
- # IPv4.
- return inet_aton(ip_string)
- elif af == AF_INET6:
- invalid_addr = ValueError('illegal IP address string %r' % ip_string)
- # IPv6.
- values = []
-
- if not hasattr(ip_string, 'split'):
- raise invalid_addr
-
- if '::' in ip_string:
- if ip_string == '::':
- # Unspecified address.
- return '\x00'*16
- # IPv6 compact mode.
- try:
- prefix, suffix = ip_string.split('::')
- except ValueError:
- raise invalid_addr
-
- l_prefix = []
- l_suffix = []
-
- if prefix != '':
- l_prefix = prefix.split(':')
-
- if suffix != '':
- l_suffix = suffix.split(':')
-
- # IPv6 compact IPv4 compatibility mode.
- if len(l_suffix) and '.' in l_suffix[-1]:
- ipv4_str = inet_aton(l_suffix.pop())
- l_suffix.append('%x' % _unpack('>H', ipv4_str[0:2])[0])
- l_suffix.append('%x' % _unpack('>H', ipv4_str[2:4])[0])
-
- token_count = len(l_prefix) + len(l_suffix)
-
- if not 0 <= token_count <= 8 - 1:
- raise invalid_addr
-
- gap_size = 8 - ( len(l_prefix) + len(l_suffix) )
-
- values = [_pack('>H', int(i, 16)) for i in l_prefix] \
- + ['\x00\x00' for i in range(gap_size)] \
- + [_pack('>H', int(i, 16)) for i in l_suffix]
- try:
- for token in l_prefix + l_suffix:
- word = int(token, 16)
- if not 0 <= word <= 0xffff:
- raise invalid_addr
- except ValueError:
- raise invalid_addr
- else:
- # IPv6 verbose mode.
- if ':' in ip_string:
- tokens = ip_string.split(':')
-
- if '.' in ip_string:
- ipv6_prefix = tokens[:-1]
- if ipv6_prefix[:-1] != ['0', '0', '0', '0', '0']:
- raise invalid_addr
-
- if ipv6_prefix[-1].lower() not in ('0', 'ffff'):
- raise invalid_addr
-
- # IPv6 verbose IPv4 compatibility mode.
- if len(tokens) != 7:
- raise invalid_addr
-
- ipv4_str = inet_aton(tokens.pop())
- tokens.append('%x' % _unpack('>H', ipv4_str[0:2])[0])
- tokens.append('%x' % _unpack('>H', ipv4_str[2:4])[0])
-
- values = [_pack('>H', int(i, 16)) for i in tokens]
- else:
- # IPv6 verbose mode.
- if len(tokens) != 8:
- raise invalid_addr
- try:
- tokens = [int(token, 16) for token in tokens]
- for token in tokens:
- if not 0 <= token <= 0xffff:
- raise invalid_addr
-
- except ValueError:
- raise invalid_addr
-
- values = [_pack('>H', i) for i in tokens]
- else:
- raise invalid_addr
-
- return ''.join(values)
- else:
- raise ValueError('Unknown address family %d' % af)
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""contains fallback versions of some socket module constants and functions"""
+
+from struct import unpack as _unpack, pack as _pack
+
+AF_UNSPEC = 0
+AF_INET = 2
+AF_INET6 = 10
+AF_LINK = 48
+AF_EUI64 = 64
+
+#-----------------------------------------------------------------------------
+def inet_ntoa(packed_ip):
+ """
+ Convert an IP address from 32-bit packed binary format to string format.
+ """
+ if len(packed_ip) != 4 or not hasattr(packed_ip, 'split'):
+ raise ValueError('invalid length of packed IP address string')
+ return '%d.%d.%d.%d' % _unpack('4B', packed_ip)
+
+#-----------------------------------------------------------------------------
+def inet_aton(ip_string):
+ """
+ Convert an IP address in string format (123.45.67.89) to the 32-bit packed
+ binary format used in low-level network functions.
+ """
+ if hasattr(ip_string, 'split'):
+ invalid_addr = ValueError('illegal IP address string %r' % ip_string)
+ # Support for hexadecimal and octal octets.
+ tokens = []
+
+ base = 10
+ for token in ip_string.split('.'):
+ if token.startswith('0x'):
+ base = 16
+ elif token.startswith('0') and len(token) > 1:
+ base = 8
+ elif token == '':
+ continue
+ try:
+ tokens.append(int(token, base))
+ except ValueError:
+ raise invalid_addr
+
+ # Zero fill missing octets.
+ num_tokens = len(tokens)
+ if num_tokens < 4:
+ fill_tokens = [0] * (4 - num_tokens)
+ if num_tokens > 1:
+ end_token = tokens.pop()
+ tokens = tokens + fill_tokens + [end_token]
+ else:
+ tokens = tokens + fill_tokens
+
+ # Pack octets.
+ if len(tokens) == 4:
+ words = []
+ for token in tokens:
+ if (token >> 8) != 0:
+ raise invalid_addr
+ words.append(chr(token))
+ return ''.join(words)
+ else:
+ raise invalid_addr
+
+ raise ValueError('argument should be a string, not %s' % type(ip_string))
+
+#-----------------------------------------------------------------------------
+def _compact_ipv6_tokens(tokens):
+ new_tokens = []
+
+ positions = []
+ within_run = False
+ start_index = None
+ num_tokens = 0
+
+ # Discover all runs of zeros.
+ for idx, token in enumerate(tokens):
+ if token == '0':
+ within_run = True
+ if start_index is None:
+ start_index = idx
+ num_tokens += 1
+ else:
+ if num_tokens > 1:
+ positions.append((num_tokens, start_index))
+ within_run = False
+ start_index = None
+ num_tokens = 0
+
+ new_tokens.append(token)
+
+ # Store any position not saved before loop exit.
+ if num_tokens > 1:
+ positions.append((num_tokens, start_index))
+
+ # Replace first longest run with an empty string.
+ if len(positions) != 0:
+ # Locate longest, left-most run of zeros.
+ positions.sort(lambda x, y: cmp(x[1], y[1]))
+ best_position = positions[0]
+ for position in positions:
+ if position[0] > best_position[0]:
+ best_position = position
+ # Replace chosen zero run.
+ (length, start_idx) = best_position
+ new_tokens = new_tokens[0:start_idx] + [''] + \
+ new_tokens[start_idx+length:]
+
+ # Add start and end blanks so join creates '::'.
+ if new_tokens[0] == '':
+ new_tokens.insert(0, '')
+
+ if new_tokens[-1] == '':
+ new_tokens.append('')
+
+ return new_tokens
+
+#-----------------------------------------------------------------------------
+def inet_ntop(af, packed_ip):
+ """Convert an packed IP address of the given family to string format."""
+ if af == AF_INET:
+ # IPv4.
+ return inet_ntoa(packed_ip)
+ elif af == AF_INET6:
+ # IPv6.
+ if len(packed_ip) != 16 or not hasattr(packed_ip, 'split'):
+ raise ValueError('invalid length of packed IP address string')
+
+ tokens = ['%x' % i for i in _unpack('>8H', packed_ip)]
+
+ # Convert packed address to an integer value.
+ words = list(_unpack('>8H', packed_ip))
+ int_val = 0
+ for i, num in enumerate(reversed(words)):
+ word = num
+ word = word << 16 * i
+ int_val = int_val | word
+
+ if 0xffff < int_val <= 0xffffffff or int_val >> 32 == 0xffff:
+ # IPv4 compatible / mapped IPv6.
+ packed_ipv4 = _pack('>2H', *[int(i, 16) for i in tokens[-2:]])
+ ipv4_str = inet_ntoa(packed_ipv4)
+ tokens = tokens[0:-2] + [ipv4_str]
+
+ return ':'.join(_compact_ipv6_tokens(tokens))
+ else:
+ raise ValueError('unknown address family %d' % af)
+
+#-----------------------------------------------------------------------------
+def inet_pton(af, ip_string):
+ """
+ Convert an IP address from string format to a packed string suitable for
+ use with low-level network functions.
+ """
+ if af == AF_INET:
+ # IPv4.
+ return inet_aton(ip_string)
+ elif af == AF_INET6:
+ invalid_addr = ValueError('illegal IP address string %r' % ip_string)
+ # IPv6.
+ values = []
+
+ if not hasattr(ip_string, 'split'):
+ raise invalid_addr
+
+ if '::' in ip_string:
+ if ip_string == '::':
+ # Unspecified address.
+ return '\x00'*16
+ # IPv6 compact mode.
+ try:
+ prefix, suffix = ip_string.split('::')
+ except ValueError:
+ raise invalid_addr
+
+ l_prefix = []
+ l_suffix = []
+
+ if prefix != '':
+ l_prefix = prefix.split(':')
+
+ if suffix != '':
+ l_suffix = suffix.split(':')
+
+ # IPv6 compact IPv4 compatibility mode.
+ if len(l_suffix) and '.' in l_suffix[-1]:
+ ipv4_str = inet_aton(l_suffix.pop())
+ l_suffix.append('%x' % _unpack('>H', ipv4_str[0:2])[0])
+ l_suffix.append('%x' % _unpack('>H', ipv4_str[2:4])[0])
+
+ token_count = len(l_prefix) + len(l_suffix)
+
+ if not 0 <= token_count <= 8 - 1:
+ raise invalid_addr
+
+ gap_size = 8 - ( len(l_prefix) + len(l_suffix) )
+
+ values = [_pack('>H', int(i, 16)) for i in l_prefix] \
+ + ['\x00\x00' for i in range(gap_size)] \
+ + [_pack('>H', int(i, 16)) for i in l_suffix]
+ try:
+ for token in l_prefix + l_suffix:
+ word = int(token, 16)
+ if not 0 <= word <= 0xffff:
+ raise invalid_addr
+ except ValueError:
+ raise invalid_addr
+ else:
+ # IPv6 verbose mode.
+ if ':' in ip_string:
+ tokens = ip_string.split(':')
+
+ if '.' in ip_string:
+ ipv6_prefix = tokens[:-1]
+ if ipv6_prefix[:-1] != ['0', '0', '0', '0', '0']:
+ raise invalid_addr
+
+ if ipv6_prefix[-1].lower() not in ('0', 'ffff'):
+ raise invalid_addr
+
+ # IPv6 verbose IPv4 compatibility mode.
+ if len(tokens) != 7:
+ raise invalid_addr
+
+ ipv4_str = inet_aton(tokens.pop())
+ tokens.append('%x' % _unpack('>H', ipv4_str[0:2])[0])
+ tokens.append('%x' % _unpack('>H', ipv4_str[2:4])[0])
+
+ values = [_pack('>H', int(i, 16)) for i in tokens]
+ else:
+ # IPv6 verbose mode.
+ if len(tokens) != 8:
+ raise invalid_addr
+ try:
+ tokens = [int(token, 16) for token in tokens]
+ for token in tokens:
+ if not 0 <= token <= 0xffff:
+ raise invalid_addr
+
+ except ValueError:
+ raise invalid_addr
+
+ values = [_pack('>H', i) for i in tokens]
+ else:
+ raise invalid_addr
+
+ return ''.join(values)
+ else:
+ raise ValueError('Unknown address family %d' % af)
diff --git a/netaddr/interfaces/IPy.py b/netaddr/interfaces/IPy.py
deleted file mode 100755
index c951579..0000000
--- a/netaddr/interfaces/IPy.py
+++ /dev/null
@@ -1,224 +0,0 @@
-#!/usr/bin/env python
-"""
-An IPy compatible interface (facade) using netaddr internals.
-"""
-import netaddr
-import re
-
-#-----------------------------------------------------------------------------
-def parseAddress(ipstr):
- # Some workarounds here that netaddr does currently support.
- if isinstance(ipstr, (str, unicode)):
- # Detect empty strings and raise ValueError.
- if ipstr == '':
- raise ValueError('%r is not a valid IP address!' % ipstr)
-
- # Detect and convert string based hex address values.
- if len(re.findall('^0x[0-9a-fA-F]+$', ipstr)) > 0:
- int_val = int(ipstr, 16)
- for strategy in (netaddr.ST_IPV4, netaddr.ST_IPV6):
- if strategy.valid_int(int_val):
- return int_val, strategy.addr_type
-
- # Check all other forms of string addresses.
- for strategy in (netaddr.ST_IPV4, netaddr.ST_IPV6):
- if strategy.valid_str(ipstr):
- return strategy.str_to_int(ipstr), strategy.addr_type
- raise ValueError('%r is not a valid IP address!' % ipstr)
-
-#-----------------------------------------------------------------------------
-def intToIp(ip, version):
- if version == netaddr.AT_INET:
- return netaddr.ST_IPV4.int_to_str(ip)
- elif version == netaddr.AT_INET6:
- return netaddr.ST_IPV6.int_to_str(ip, compact=False, word_fmt='%04x')
- else:
- raise ValueError('unsupported version %r!' % version)
-
-#-----------------------------------------------------------------------------
-class IP(object):
- """
- A facade object implementing the same internals at IPy.IP but using
- netaddr's internals to perform all operations.
- """
- def __init__(self, data):#TODO:, ipversion=None, make_net=False):
- if isinstance(data, (str, unicode)) and '-' in data:
- first, last = data.split('-')
- iprange = netaddr.IPRange(first, last)
- if len(iprange.cidrs()) != 1:
- raise ValueError('IP range %r not on a network boundary.' \
- % data)
- self._ip = iprange[0]
- self._cidr = iprange.cidrs()[0]
- elif isinstance(data, (int, long)):
- addr_type = netaddr.AT_INET
- if data > (2 ** 32 - 1):
- # IPy assumes that an int above 2^32-1 is automatically an
- # IPv6 address. netaddr requires a constant value as well.
- addr_type = netaddr.AT_INET6
- self._ip = netaddr.IP(data, addr_type)
- self._cidr = self._ip.cidr()
- else:
- self._ip = netaddr.IP(data)
- self._cidr = self._ip.cidr(strict=False)
- self._cidr.fmt=str
-
- # If True omits prefixlen for /32 or /128 addresses, included
- # otherwise.
- self.NoPrefixForSingleIp = True
-
- # A numerical value controlling return values.
- self.WantPrefixLen = 0
-
- def broadcast(self):
- return IP(self._cidr[-1]).strCompressed()
-
- def int(self):
- return self._cidr.first
-
- def iptype(self):
- if self._ip.addr_type == netaddr.AT_INET:
- return self._ip.info()['IPv4'][0]['status'].upper()
- elif self._ip.addr_type == netaddr.AT_INET6:
- return self._ip.info()['IPv6'][0]['status'].upper()
-
- def len(self):
- return self._cidr.size()
-
- def make_net(self):
- return NotImplementedError('TODO')
-
- def net(self):
- return IP(self._cidr[0]).strCompressed()
-
- def netmask(self):
- return IP(self._cidr.netmask)
-
- def overlaps(self, other):
- if not isinstance(other, IP):
- other = IP(other)
-
- if other.ip >= self.ip and other.ip < self.ip + self.len():
- return 1
- elif self.ip >= other.ip and self.ip < other.ip + other.len():
- return -1
- else:
- return 0
-
- def prefixlen(self):
- return self._cidr.prefixlen
-
- def reverseName(self):
- return self._ip.reverse_dns()
-
- def reverseNames(self):
-
- return [netaddr.IP(ip).reverse_dns() for ip in self._cidr]
-
- def strBin(self):
- return self._ip.bin().replace('0b', '')
-
- def strCompressed(self):
- # Display prefixlen as necessary.
- if self._ip.prefixlen != self._ip.strategy.width:
- return '%s/%d' % (str(self._ip), self._ip.prefixlen)
- return str(self._ip)
-
- def strDec(self, wantprefixlen=None):
- """
- TODO - add in 'wantprefixlen' logic.
- """
- return str(int(self._ip)).replace('L', '')
-
- def strFullsize(self, wantprefixlen=None):
- """
- TODO - add in 'wantprefixlen' logic.
- """
- if self._ip.addr_type == netaddr.AT_INET6:
- # Expand IPv6 address to fullest extent.
- return netaddr.ST_IPV6.int_to_str(
- self._ip.value, compact=False, word_fmt='%04x')
- return str(self._ip)
-
- def strHex(self, wantprefixlen=None):
- """
- TODO - add in 'wantprefixlen' logic.
- """
- return hex(self._ip)
-
- def strNetmask(self):
- if self._ip.addr_type == netaddr.AT_INET:
- return self._cidr.netmask
- elif self._ip.addr_type == netaddr.AT_INET6:
- return '/%d' % self._cidr.prefixlen
-
- def strNormal(self, wantprefixlen=None):
- """
- TODO - add in 'wantprefixlen' logic.
- """
- if self._ip.addr_type == netaddr.AT_INET6:
- # Turn off IPv6 compression.
- return self._ip.strategy.int_to_str(self._ip.value, compact=False)
- return str(self._ip)
-
- def ip(self):
- return self._ip.value
-
- ip = property(ip)
-
- def version(self):
- return self._ip.addr_type
-
- def __add__(self, other):
- raise NotImplementedError('TODO')
-
- def __hash__(self):
- thehash = int(-1)
- ip = self.ip
- while ip > 0:
- thehash = thehash ^ (ip & 0x7fffffff)
- ip = ip >> 32
- thehash = thehash ^ self.prefixlen()
- return int(thehash)
-
- def __cmp__(self, other):
- if not isinstance(other, IP):
- other = IP(other)
-
- if self.prefixlen() < other.prefixlen():
- return (other.prefixlen() - self.prefixlen())
- elif self.prefixlen() > other.prefixlen():
- return (self.prefixlen() - other.prefixlen()) * -1
- else:
- if self.ip < other.ip:
- return -1
- elif self.ip > other.ip:
- return 1
- else:
- return 0
-
- def __contains__(self, other):
- if not isinstance(other, IP):
- other = IP(other)
-
- if other.ip >= self.ip and \
- other.ip < self.ip + self.len() - other.len() + 1:
- return 1
- else:
- return 0
-
- def __getitem__(self, index):
- return IP(self._cidr[index])
-
- def __len__(self):
- return self._cidr.size()
-
- def __nonzero__(self):
- return 1
-
- def __str__(self):
- return str(self._cidr)
-
- def __repr__(self):
- return "IP('%s')" % self.strCompressed()
-
diff --git a/netaddr/interfaces/TODO.txt b/netaddr/interfaces/TODO.txt
deleted file mode 100644
index 613a1a2..0000000
--- a/netaddr/interfaces/TODO.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-IPy interface for netaddr.
-
-- Implement logic for __init__(ipversion, make_net) parameters.
-
-- Implement logic to make self.WantPrefixLen and make_prefixlen=1|2|3 argument available on many methods work.
-
-- Implement logic to make self.NoPrefixForSingleIp work
diff --git a/netaddr/interfaces/__init__.py b/netaddr/interfaces/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/netaddr/interfaces/__init__.py
+++ /dev/null
diff --git a/netaddr/interfaces/test_IPy.py b/netaddr/interfaces/test_IPy.py
deleted file mode 100644
index 7488561..0000000
--- a/netaddr/interfaces/test_IPy.py
+++ /dev/null
@@ -1,845 +0,0 @@
-"""Unit test for IPy.py
-
-Further Information might be available at http://c0re.jp/c0de/IPy/
-
-Hacked 2001 by drt@un.bewaff.net
-"""
-
-# TODO: unify assert / FilIf usage
-
-import sys
-import threading
-sys.path.append('.')
-sys.path.append('..')
-
-from netaddr.interfaces import IPy
-import unittest
-import random
-
-testloops = 250
-
-class parseAddress(unittest.TestCase):
- okValues = [('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210', 338770000845734292534325025077361652240L),
-#DISABLED: *** unqualified hex strings (with no 0x) are not support by netaddr.
-#DISABLED: ('FEDCBA9876543210FEDCBA9876543210', 338770000845734292534325025077361652240L),
- ('0xFEDCBA9876543210FEDCBA9876543210', 338770000845734292534325025077361652240L),
- ('1080:0000:0000:0000:0008:0800:200C:417A', 21932261930451111902915077091070067066L),
- ('1080:0:0:0:8:800:200C:417A', 21932261930451111902915077091070067066L),
- ('1080:0::8:800:200C:417A', 21932261930451111902915077091070067066L),
- ('1080::8:800:200C:417A', 21932261930451111902915077091070067066L),
- ('FF01:0:0:0:0:0:0:43', 338958331222012082418099330867817087043L),
- ('FF01:0:0::0:0:43', 338958331222012082418099330867817087043L),
- ('FF01::43', 338958331222012082418099330867817087043L),
- ('0:0:0:0:0:0:0:1', 1L),
- ('0:0:0::0:0:1', 1L),
- ('::1', 1L),
- ('0:0:0:0:0:0:0:0', 0L),
- ('0:0:0::0:0:0', 0L),
- ('::', 0L),
- ('0:0:0:0:0:0:13.1.68.3', 218186755L),
- ('::13.1.68.3', 218186755L),
- ('0:0:0:0:0:FFFF:129.144.52.38', 281472855454758L),
- ('::FFFF:129.144.52.38', 281472855454758L),
- ('1080:0:0:0:8:800:200C:417A', 21932261930451111902915077091070067066L),
- ('1080::8:800:200C:417A', 21932261930451111902915077091070067066L),
- ('0.0.0.0', 0L),
- ('0', 0L),
- ('127.0.0.1', 2130706433L),
- ('255.255.255.255', 4294967295L),
- ('0.0.0.1', 1L),
-#DISABLED: *** netaddr.IP() uses inet_aton(). netaddr.CIDR() supports this for of behaviour.
-#DISABLED: ('1', 16777216L),
- ('213.221.113.87', 3588059479L),
- ('0000', 0L),
- ('127001', 127001L),
- ('1234576', 1234576L),
-#DISABLED: *** duplicate test value, see above ***
-#DISABLED: ('1', 16777216L),
- ('232111387', 232111387L),
-#DISABLED: ('255', 4278190080L),
- ('256', 256L),
- ('0xffffffff', 4294967295L),
- ('0x100000000', 4294967296L),
- ('0xffffffffffffffffffffffffffffffff', 0xffffffffffffffffffffffffffffffffL),
- ('0xdeadbeef', 0xdeadbeefL),
- ('0xdeadbabe', 0xdeadbabeL),
- ('0xdeadc0de', 0xdeadc0deL),
- ('0xc0decafe', 0xc0decafeL),
- ('0xc0debabe', 0xc0debabeL),
- ('0xbabec0de', 0xbabec0deL),
- ('0xcafebabe', 0xcafebabeL),
- ('0x1', 1L),
- ('0xabcdef', 11259375L)]
-
- # TODO: check for more invalid input
-
- def testKnownValues(self):
- """parsing of known values should give known results"""
- for x in self.okValues:
- (question, answer) = x
- (result, version) = IPy.parseAddress(question)
- self.assertEqual(answer, result, "%r, %r, %r" % (question, answer, result))
-
- def testVersionDistinction(self):
- """problems destinguishing IPv4 and IPv6"""
- (result, version) = IPy.parseAddress('0xffffffff')
- self.assertEqual(version, 4)
- (result, version) = IPy.parseAddress('0x100000000')
- self.assertEqual(version, 6)
-
- def testEmpty(self):
- """'' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '')
-
- def testTooBig(self):
- """'' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '0x100000000000000000000000000000000')
-
- def testLongIPv4(self):
- """'1.2.3.4.5' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1.2.3.4.5')
-
- def testNonByteIPv4(self):
- """'1.2.3.256' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1.2.3.256')
-
- def testNegativeByteIPv4(self):
- """'-1.2.3.4' and '1.2.3.-4' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '-1.2.3.4')
- self.assertRaises(ValueError, IPy.parseAddress, '1.2.3.-4')
-
- def testTripleColonIPv6(self):
- """'2001:::1' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '2001:::1')
-
- def testRepeatDoubleColonIPv6(self):
- """'2001::ABCD::1' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '2001::ABCD::1')
-
- def testDoubleColonWithEightHextetsIPv6(self):
- """'1111::2222:3333:4444:5555:6666:7777:8888' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1111::2222:3333:4444:5555:6666:7777:8888')
-
- def testBeginningColonWithEightHextetsIPv6(self):
- """':1111:2222:3333:4444:5555:6666:7777:8888' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, ':1111:2222:3333:4444:5555:6666:7777:8888')
-
- def testEndingColonWithEightHextetsIPv6(self):
- """'1111:2222:3333:4444:5555:6666:7777:8888:' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1111:2222:3333:4444:5555:6666:7777:8888:')
-
- def testNegativeHexletIPv6(self):
- """'2001:-ABCD::1' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '2001:-ABCD::1')
-
- def testTooBigHexletIPv6(self):
- """'2001:10000::1' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '2001:10000::1')
-
- def testShortAddressIPv6(self):
- """'1111:2222:3333:4444:5555:6666:7777' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1111:2222:3333:4444:5555:6666:7777')
-
- def testLongAddressIPv6(self):
- """'1111:2222:3333:4444:5555:6666:7777:8888:9999' should raise an exception"""
- self.assertRaises(ValueError, IPy.parseAddress, '1111:2222:3333:4444:5555:6666:7777:8888:9999')
-
-class _intToIP(unittest.TestCase):
- v4values = [(0x7f000001, '127.0.0.1'),
- (0x0, '0.0.0.0'),
- (0x1, '0.0.0.1'),
- (0xf, '0.0.0.15'),
- (0xff, '0.0.0.255'),
- (0xFFFFFFFFL, '255.255.255.255')]
- v6values = [(0x7f000001, '0000:0000:0000:0000:0000:0000:7f00:0001'),
- (0x0, '0000:0000:0000:0000:0000:0000:0000:0000'),
- (0x1, '0000:0000:0000:0000:0000:0000:0000:0001'),
- (0xf, '0000:0000:0000:0000:0000:0000:0000:000f'),
- (0xff, '0000:0000:0000:0000:0000:0000:0000:00ff'),
- (0xFFFFFFFFL, '0000:0000:0000:0000:0000:0000:ffff:ffff'),
- (0x100000000L, '0000:0000:0000:0000:0000:0001:0000:0000'),
- (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL, 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')]
-
- def testKnownValuesv4(self):
- """printing of known IPv4 values should give known results"""
- for x in self.v4values:
- (question, answer) = x
- result = IPy.intToIp(question, 4).lower()
- self.assertEqual(answer, result, "%r, %r, %r" % (question, answer, result))
-
- def testKnownValuesv6(self):
- """printing of known IPv6 values should give known results"""
- for x in self.v6values:
- (question, answer) = x
- result = IPy.intToIp(question, 6).lower()
- self.assertEqual(answer, result, "%r, %r, %r" % (question, answer, result))
-
- def testNegativeIPv4(self):
- """negative IPv4 Values should raise an exception"""
- self.assertRaises(ValueError, IPy.intToIp, -1, 4)
-
- def testNegativeIPv6(self):
- """negative IPv6 Values should raise an exception"""
- self.assertRaises(ValueError, IPy.intToIp, -1, 6)
-
- def testLargeIPv4(self):
- """IPv4: Values > 0xffffffff should raise an exception"""
- self.assertRaises(ValueError, IPy.intToIp, 0x100000000L, 4)
-
- def testLargeIPv6(self):
- """IPv6: Values > 0xffffffffffffffffffffffffffffffff should raise an exception"""
- self.assertRaises(ValueError, IPy.intToIp, 0x100000000000000000000000000000000L, 6)
-
- def testIllegalVersion(self):
- """IPVersion other than 4 and 6 should raise an exception"""
- self.assertRaises(ValueError, IPy.intToIp, 1, 0)
- self.assertRaises(ValueError, IPy.intToIp, 1, 1)
- self.assertRaises(ValueError, IPy.intToIp, 1, 2)
- self.assertRaises(ValueError, IPy.intToIp, 1, 3)
- self.assertRaises(ValueError, IPy.intToIp, 1, 5)
- self.assertRaises(ValueError, IPy.intToIp, 1, 7)
- self.assertRaises(ValueError, IPy.intToIp, 1, 8)
-
-class ParseAndBack(unittest.TestCase):
- def testRandomValuesv4(self):
- for i in range(testloops):
- question = long(random.randrange(0x7fffffff)) + long(random.randrange(0x7fffffff))
- self.assertEqual(IPy.parseAddress(IPy.intToIp(question, 4)), (question, 4), hex(question))
-
- def testRandomValuesv6(self):
- for i in range(testloops):
- question = ((long(random.randrange(0x7fffffff)) + long(random.randrange(0x7fffffff))) +
- ((long(random.randrange(0x7fffffff)) + long(random.randrange(0x7fffffff))) << 32) +
- ((long(random.randrange(0x7fffffff)) + long(random.randrange(0x7fffffff))) << 64) +
- ((long(random.randrange(0x7fffffff)) + long(random.randrange(0x7fffffff))) << 96))
- self.assertEqual(IPy.parseAddress(IPy.intToIp(question, 6)), (question, 6), hex(question))
-
-
-#DISABLED: *** internal interface is not supported by facade ***
-#DISABLED:class _countXBits(unittest.TestCase):
-#DISABLED: def testCount1Bits(self):
-#DISABLED: self.assertEqual(IPy._count1Bits(0), 0)
-#DISABLED: self.assertEqual(IPy._count1Bits(0xf), 4)
-#DISABLED: self.assertEqual(IPy._count1Bits(0x10), 5)
-#DISABLED: self.assertEqual(IPy._count1Bits(0xff), 8)
-#DISABLED: self.assertEqual(IPy._count1Bits(0xffff), 16)
-#DISABLED: self.assertEqual(IPy._count1Bits(0xffffffffL), 32)
-#DISABLED: self.assertEqual(IPy._count1Bits(0xffffffffffffffffffffffffffffffffL), 128)
-#DISABLED:
-#DISABLED: def testCount1Bits(self):
-#DISABLED: self.assertEqual(IPy._count0Bits(0), 0)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf0L), 4)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf00L), 8)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf000L), 12)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf0000L), 16)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf00000L), 20)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf000000L), 24)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf0000000L), 28)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xff000000L), 24)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xfff00000L), 20)
-#DISABLED: self.assertEqual(IPy._count0Bits(0x80000000L), 31)
-#DISABLED: self.assertEqual(IPy._count0Bits(0xf0000000000000000000000000000000L), 124)
-#DISABLED: self.assertEqual(IPy._count0Bits(0x80000000000000000000000000000000L), 127)
-#DISABLED:
-#DISABLED:
-#DISABLED:class _intToBin(unittest.TestCase):
-#DISABLED: knownValues = [(0, '0'), (1, '1'), (2, '10'), (3, '11'), (4, '100'), (5, '101'),
-#DISABLED: (6, '110'), (7, '111'), (8, '1000'), (9, '1001'),
-#DISABLED: (0xf, '1111'), (0xff, '11111111'),
-#DISABLED: (0xFFFFFFFFL, '11111111111111111111111111111111'),
-#DISABLED: (0x100000000L, '100000000000000000000000000000000'),
-#DISABLED: (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL, '11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'),
-#DISABLED: (0x100000000000000000000000000000000L, '100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')]
-#DISABLED:
-#DISABLED: def testKnownValues(self):
-#DISABLED: """conversion of known values values should give known results"""
-#DISABLED: for x in self.knownValues:
-#DISABLED: (question, answer) = x
-#DISABLED: result = IPy._intToBin(question)
-#DISABLED: self.assertEqual(answer, result, str(question))
-#DISABLED:
-#DISABLED: def testNegativeIPv4(self):
-#DISABLED: """negative Values should raise an exception"""
-#DISABLED: self.assertRaises(ValueError, IPy._intToBin, -1)
-#DISABLED:
-#DISABLED:class netmaskPrefixlenConv(unittest.TestCase):
-#DISABLED: known4Values = [(0xFFFFFFFFL, 32), (0xFFFFFFFEL, 31), (0xFFFFFFFCL, 30), (0xFFFFFFF8L, 29),
-#DISABLED: (0xFFFFFFF0L, 28), (0xFFFFFFE0L, 27), (0xFFFFFFC0L, 26), (0xFFFFFF80L, 25),
-#DISABLED: (0xFFFFFF00L, 24), (0xFFFFFE00L, 23), (0xFFFFFC00L, 22), (0xFFFFF800L, 21),
-#DISABLED: (0xFFFFF000L, 20), (0xFFFFE000L, 19), (0xFFFFC000L, 18), (0xFFFF8000L, 17),
-#DISABLED: (0xFFFF0000L, 16), (0xFFFE0000L, 15), (0xFFFC0000L, 14), (0xFFF80000L, 13),
-#DISABLED: (0xFFF00000L, 12), (0xFFE00000L, 11), (0xFFC00000L, 10), (0xFF800000L, 9),
-#DISABLED: (0xFF000000L, 8), (0xFE000000L, 7), (0xFC000000L, 6), (0xF8000000L, 5),
-#DISABLED: (0xF0000000L, 4), (0xE0000000L, 3), (0xC0000000L, 2), (0x80000000L, 1)]
-#DISABLED: known6Values = [(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL, 128),
-#DISABLED: (0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEL, 127),
-#DISABLED: (0xFFFFFFFFFFFFFFFFFFFFFFFF80000000L, 97),
-#DISABLED: (0xFFFFFFFFFFFFFFFFFFFFFFFF00000000L, 96),
-#DISABLED: (0xFFFFFFFFFFFFFFFFFFFFFFFE00000000L, 95),
-#DISABLED: (0xFFFFFFFFFFFFFFFF8000000000000000L, 65),
-#DISABLED: (0xFFFFFFFFFFFFFFFF0000000000000000L, 64),
-#DISABLED: (0xFFFFFFFFFFFFFFFE0000000000000000L, 63),
-#DISABLED: (0xFFFFFFFF800000000000000000000000L, 33),
-#DISABLED: (0xFFFFFFFF000000000000000000000000L, 32),
-#DISABLED: (0xFFFFFFFE000000000000000000000000L, 31),
-#DISABLED: (0xC0000000000000000000000000000000L, 2),
-#DISABLED: (0x80000000000000000000000000000000L, 1)]
-#DISABLED:
-#DISABLED: def testKnownValuesv4n2p(self):
-#DISABLED: """conversion of known values values should give known results"""
-#DISABLED: for x in self.known4Values:
-#DISABLED: (question, answer) = x
-#DISABLED: result = IPy._netmaskToPrefixlen(question)
-#DISABLED: self.assertEqual(answer, result, hex(question))
-#DISABLED:
-#DISABLED: def testKnownValuesv6n2p(self):
-#DISABLED: """conversion of known values values should give known results"""
-#DISABLED: for x in self.known6Values:
-#DISABLED: (question, answer) = x
-#DISABLED: result = IPy._netmaskToPrefixlen(question)
-#DISABLED: self.assertEqual(answer, result, hex(question))
-#DISABLED:
-#DISABLED: def testKnownValuesv4p2n(self):
-#DISABLED: """conversion of known values values should give known results"""
-#DISABLED: for x in self.known4Values:
-#DISABLED: (answer, question) = x
-#DISABLED: result = IPy._prefixlenToNetmask(question, 4)
-#DISABLED: self.assertEqual(answer, result, hex(question))
-#DISABLED:
-#DISABLED: def testKnownValuesv6p2n(self):
-#DISABLED: """conversion of known values values should give known results"""
-#DISABLED: for x in self.known6Values:
-#DISABLED: (answer, question) = x
-#DISABLED: result = IPy._prefixlenToNetmask(question, 6)
-#DISABLED: self.assertEqual(answer, result, "%d: %s != %s" % (question, hex(answer), result))
-#DISABLED:
-#DISABLED: def testInvalidv4n2p(self):
-#DISABLED: """Netmasks should be all ones in the first part and all zeros in the second part"""
-#DISABLED: self.failUnlessRaises(ValueError, IPy._netmaskToPrefixlen, 0xff00ff00L)
-#DISABLED:
-#DISABLED: def testInvalidv6n2p(self):
-#DISABLED: """Netmasks should be all ones in the first part and all zeros in the second part"""
-#DISABLED: self.failUnlessRaises(ValueError, IPy._netmaskToPrefixlen, 0xff00ff00ff00ff00ff00ff00ff00ff00L)
-#DISABLED:
-#DISABLED:
-#DISABLED:class checkChecks(unittest.TestCase):
-#DISABLED:
-#DISABLED: def testCheckNetmaskOk(self):
-#DISABLED: """Legal Netmasks should be allowed."""
-#DISABLED: self.failIf(IPy._checkNetmask(0xffffffffL, 32))
-#DISABLED: self.failIf(IPy._checkNetmask(0xffffff00L, 32))
-#DISABLED: self.failIf(IPy._checkNetmask(0xffff0000L, 32))
-#DISABLED: self.failIf(IPy._checkNetmask(0xff000000L, 32))
-#DISABLED: self.failIf(IPy._checkNetmask(0, 32))
-#DISABLED:
-#DISABLED: def testCheckNetmaskFail(self):
-#DISABLED: """Illegal Netmasks should be rejected."""
-#DISABLED: self.failUnlessRaises(ValueError, IPy._checkNetmask, 0xf0ffffffL, 32)
-#DISABLED: self.failUnlessRaises(ValueError, IPy._checkNetmask, 0xf0f0f0f0L, 32)
-#DISABLED: self.failUnlessRaises(ValueError, IPy._checkNetmask, 0xff00ff00L, 32)
-#DISABLED: self.failUnlessRaises(ValueError, IPy._checkNetmask, 0x70000001L, 32)
-#DISABLED: self.failUnlessRaises(ValueError, IPy._checkNetmask, 0xfffffffL, 32)
-#DISABLED:
-#DISABLED: def testCheckPrefixOk(self):
-#DISABLED: """Legal IP/prefix combinations should check ok."""
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0, 32, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xffffffffL, 32, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x7f000001L, 32, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x80000000L, 1, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x40000000L, 2, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x80000000L, 3, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x80000000L, 4, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xffffff00L, 24, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xffffff00L, 24, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xfffffff0L, 28, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0, 32, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0, 1, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0, 0, 4))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xffffffffffffffff0000000000000000L, 64, 6))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0L, 64, 6))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0L, 0, 6))
-#DISABLED: self.failUnless(IPy._checkPrefix(0x0L, 128, 6))
-#DISABLED: self.failUnless(IPy._checkPrefix(0xffffffffffffffffffffffffffffffffL, 128, 6))
-#DISABLED:
-#DISABLED:
-#DISABLED: def testCheckPrefixFail(self):
-#DISABLED: """Illegal Prefixes should be catched."""
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000001L, -1, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000001L, 33, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000001L, 24, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000001L, 31, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000080L, 24, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000100L, 23, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000000L, 1, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x7f000000L, 0, 4))
-#DISABLED: self.failIf(IPy._checkPrefix(0x1L, -1, 6))
-#DISABLED: self.failIf(IPy._checkPrefix(0x1L, 129, 6))
-#DISABLED: self.failIf(IPy._checkPrefix(0xffffffffffffffff0000000000000001L, 64, 6))
-#DISABLED: self.failIf(IPy._checkPrefix(0xffffffffffffffff1000000000000000L, 64, 6))
-
-
- # TODO: _checkNetaddrWorksWithPrefixlen(net, prefixlen, version):
-
-class PythonObjectBehaviour(unittest.TestCase):
- def testIfUsuableAsDictionaryKey(self):
- """IP Object should be usable as dictionary key"""
- d = {}
- d[IPy.IP('127.0.0.1')] = 1
- d[IPy.IP('2001::1')] = 1
- d[IPy.IP('127.0.0.0/24')] = 1
- d[IPy.IP('2001::/64')] = 1
-
- def testIfCanBeInteratedOver(self):
- """It should be possible to iterate over an IP Object."""
- i = 0
- for x in IPy.IP('127.0.0.0/24'):
- i += 1
- self.assertEqual(i, 256, "iteration over a /24 should yiels 256 values")
- i = 0
- for x in IPy.IP('2001::/124'):
- i += 1
- self.assertEqual(i, 16, "iteration over a /124 should yiels 16 values")
-
- def testIfComparesEqual(self):
- """nets of the same base and size should be considered equal, others not"""
- a = IPy.IP('127.0.0.0/24')
- a2 = a
- b = IPy.IP('127.0.0.0/24')
- c = IPy.IP('127.0.0.0/23')
- d = IPy.IP('127.0.0.0/22')
- e = IPy.IP('64.0.0.0/24')
- self.assertEqual(a2, a)
- self.assertEqual(a2, b)
- self.assertEqual(a, a)
- self.assertEqual(a, b)
- self.assertNotEqual(a, c)
- self.assertNotEqual(a, d)
- self.assertNotEqual(a, e)
- self.assertNotEqual(b, c)
- self.assertNotEqual(b, d)
- self.assertNotEqual(b, e)
- self.assertNotEqual(c, d)
- self.assertNotEqual(c, e)
- self.assertNotEqual(d, e)
-
- def testIfContainsInt(self):
- """__contains__() should work somewhat with ints"""
- ip = IPy.IP('127.0.0.0/28')
- for x in ip:
- self.failUnless(x.int() in ip)
- ip = IPy.IP('2001::/124')
- for x in ip:
- self.failUnless(x.int() in ip)
-
- def testIfContainsStr(self):
- """__contains__() should work somewhat with strings"""
- ip = IPy.IP('127.0.0.0/28')
- for x in ip:
- self.failUnless(x.strNormal() in ip, "%r not in %r" % (x.strNormal(), ip))
- ip = IPy.IP('2001::/124')
- for x in ip:
- self.failUnless(x.strNormal() in ip, "%r not in %r" % (x.strNormal(), ip))
-
- def testIfContainsIPobj(self):
- """__contains__() should work somewhat with IP instances"""
- ip = IPy.IP('127.0.0.0/28')
- for x in ip:
- self.failUnless(x in ip)
- ip = IPy.IP('2001::/124')
- for x in ip:
- self.failUnless(x in ip)
-
- def testActingAsArray(self):
- """An IP-object should handle indices."""
- ip = IPy.IP('127.0.0.0/24')
- self.assertEqual(ip[0], ip.net())
- self.assertEqual(ip[-1], ip.broadcast())
- self.failUnless(ip[255])
- self.failUnlessRaises(IndexError, ip.__getitem__, 256)
-
- def testStr(self):
- """string() should work somewhat with IP instances"""
- ip = IPy.IP('127.0.0.0/28')
- for x in ip:
- self.failUnless(str(x))
- ip = IPy.IP('2001::/124')
- for x in ip:
- self.failUnless(str(x))
-
- def testRepr(self):
- """repr() should work somewhat with IP instances"""
- ip = IPy.IP('127.0.0.0/28')
- for x in ip:
- self.failUnless(repr(x))
- ip = IPy.IP('2001::/124')
- for x in ip:
- self.failUnless(repr(x))
-
- def testLen(self):
- """object should have an working __len__() interface."""
- self.failUnlessEqual(len(IPy.IP('127.0.0.0/28')), 16)
- self.failUnlessEqual(len(IPy.IP('127.0.0.0/30')), 4)
- self.failUnlessEqual(len(IPy.IP('127.0.0.0/26')), 64)
- self.failUnlessEqual(len(IPy.IP('127.0.0.0/16')), 2**16)
-
- # cmp
- # IP[0xffffffff]
- # IP + IP
- # reverse
- # netmsk
- # ip
-
-class IPobject(unittest.TestCase):
- def testStrCompressed(self):
- """Compressed string Output."""
- testValues = ['127.0.0.1',
- 'dead::beef',
- 'dead:beef::',
- 'dead:beef::/48',
- 'ff00:1::',
- 'ff00:0:f000::',
- '0:0:1000::',
- '::e000:0/112',
- '::e001:0/112',
- 'dead:beef::/48',
- 'ff00:1::/64',
- 'ff00:0:f000::/64',
- '0:0:1000::/64',
- '::e000:0/112',
- '::e001:0/112',
- '::1:0:0:0:2',
- '0:1:2:3:4:5:6:7',
- '1:2:3:4:0:5:6:7',
- '1:2:3:4:5:6:7:0',
- '1:0:0:2::',
- '1:0:0:2::3',
- '1::2:0:0:3']
- for question in testValues:
- result = IPy.IP(question).strCompressed()
- self.failUnlessEqual(question, result, (question, result))
-
- def testStrBin(self):
- """Binary string Output."""
-
- testValues = [('0.0.0.0', '00000000000000000000000000000000'),
- ('0.0.0.1', '00000000000000000000000000000001'),
- ('255.255.255.255', '11111111111111111111111111111111'),
- ('128.0.0.0', '10000000000000000000000000000000'),
- ('::0', '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'),
- ('::1', '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', '11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111'),
- ('5555:5555:5555:5555:5555:5555:5555:5555', '01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101'),
- ('aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa:aaaa', '10101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010'),
- ('85.85.85.85', '01010101010101010101010101010101'),
- ('170.170.170.170', '10101010101010101010101010101010'),
- ('127.0.0.1', '01111111000000000000000000000001'),
- ('1::2:0:0:3', '00000000000000010000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000011')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strBin()
- self.failUnlessEqual(answer, result, (question, answer, result))
-
- def testStrNormal(self):
- """Normal string Output."""
- testValues = [(338770000845734292534325025077361652240L, 'fedc:ba98:7654:3210:fedc:ba98:7654:3210'),
- (21932261930451111902915077091070067066L, '1080:0:0:0:8:800:200c:417a'),
- (338958331222012082418099330867817087043L, 'ff01:0:0:0:0:0:0:43'),
- (0L, '0.0.0.0'),
- (2130706433L, '127.0.0.1'),
- (4294967295L, '255.255.255.255'),
- (1L, '0.0.0.1'),
- (3588059479L, '213.221.113.87')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strNormal(question)
- self.failUnlessEqual(answer, result, (question, result, answer))
-
- def testStrFullsize(self):
- """Normal / 0-padded string Output."""
- testValues = [(338770000845734292534325025077361652240L, 'fedc:ba98:7654:3210:fedc:ba98:7654:3210'),
- (21932261930451111902915077091070067066L, '1080:0000:0000:0000:0008:0800:200c:417a'),
- (338958331222012082418099330867817087043L, 'ff01:0000:0000:0000:0000:0000:0000:0043'),
- (0L, '0.0.0.0'),
- (2130706433L, '127.0.0.1'),
- (4294967295L, '255.255.255.255'),
- (1L, '0.0.0.1'),
- (3588059479L, '213.221.113.87')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strFullsize(question)
- self.failUnlessEqual(answer, result, (question, result, answer))
-
- def testStrHex(self):
- """Hex string Output."""
- testValues = [(338770000845734292534325025077361652240L, '0xfedcba9876543210fedcba9876543210'),
- (21932261930451111902915077091070067066L, '0x108000000000000000080800200c417a'),
- (338958331222012082418099330867817087043L, '0xff010000000000000000000000000043'),
- (0L, '0x0'),
- (1L, '0x1'),
- (4294967295l, '0xffffffff'),
- (3588059479L, '0xd5dd7157'),
- (0x12345678, '0x12345678')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strHex(question).lower()
- self.failUnlessEqual(answer, result, (question, result, answer))
-
- def testStrDec(self):
- """Decimal string Output."""
- testValues = [(338770000845734292534325025077361652240L, '338770000845734292534325025077361652240'),
- (21932261930451111902915077091070067066L, '21932261930451111902915077091070067066'),
- (338958331222012082418099330867817087043L, '338958331222012082418099330867817087043'),
- (0L, '0'),
- (1L, '1'),
- (0xFFFFFFFFL, '4294967295'),
- (0xD5DD7157L, '3588059479')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strDec(question)
- self.failUnlessEqual(answer, result, (question, result, answer))
-
- def testNet(self):
- """Returning of the Network Address"""
- self.failUnlessEqual(str(IPy.IP("127.0.0.1").net()), "127.0.0.1")
- self.failUnlessEqual(str(IPy.IP("0.0.0.0/0").net()), "0.0.0.0")
- self.failUnlessEqual(str(IPy.IP("2001:1234:5678:1234::/64").net()), "2001:1234:5678:1234::")
-
-
- def testBroadcast(self):
- """Returning of broadcast address."""
- self.failUnlessEqual(str(IPy.IP("127.0.0.1").broadcast()), "127.0.0.1")
- self.failUnlessEqual(str(IPy.IP("0.0.0.0/0").broadcast()), "255.255.255.255")
- self.failUnlessEqual(str(IPy.IP("2001:1234:5678:1234::/64").broadcast()), "2001:1234:5678:1234:ffff:ffff:ffff:ffff")
-
-
- def testStrNetmask(self):
- """StrNetmask should return netmasks"""
- self.failUnlessEqual(IPy.IP("0.0.0.0/0").strNetmask(), "0.0.0.0")
- self.failUnlessEqual(IPy.IP("0.0.0.0/32").strNetmask(), "255.255.255.255")
- self.failUnlessEqual(IPy.IP("127.0.0.0/24").strNetmask(), "255.255.255.0")
- self.failUnlessEqual(IPy.IP("2001:1234:5678:1234::/64").strNetmask(), "/64")
-
-
- def testNetmask(self):
- """Netmask should return netmasks"""
- self.failUnlessEqual(str(IPy.IP("0.0.0.0/0").netmask()), "0.0.0.0")
- self.failUnlessEqual(str(IPy.IP("0.0.0.0/32").netmask()), "255.255.255.255")
- self.failUnlessEqual(str(IPy.IP("127.0.0.0/24").netmask()), "255.255.255.0")
- self.failUnlessEqual(str(IPy.IP("2001:1234:5678:1234::/64").netmask()), "ffff:ffff:ffff:ffff:0000:0000:0000:0000")
-
- def testInt(self):
- """Prefixlen"""
- self.failUnlessEqual(IPy.IP("127.0.0.1").int(), 2130706433)
- self.failUnlessEqual(IPy.IP("0.0.0.0").int(), 0)
- self.failUnlessEqual(IPy.IP("255.255.255.255").int(), 0xffffffffL)
- self.failUnlessEqual(IPy.IP("0000:0000:0000:0000:0000:0000:0000:0000").int(), 0)
- self.failUnlessEqual(IPy.IP("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").int(), 0xffffffffffffffffffffffffffffffffL)
- self.failUnlessEqual(IPy.IP("2001:1234:5678:9abc:de00:0000:0000:0000").int(), 42540857391974671903776007410583339008L)
-
-
- def testPrefixlen(self):
- """Prefixlen"""
- self.failUnlessEqual(IPy.IP("127.0.0.1").prefixlen(), 32)
- self.failUnlessEqual(IPy.IP("::1").prefixlen(), 128)
- self.failUnlessEqual(IPy.IP("10.0.0.0/24").prefixlen(), 24)
- self.failUnlessEqual(IPy.IP("10.0.0.0-10.0.0.255").prefixlen(), 24)
- self.failUnlessEqual(IPy.IP("10.0.0.0/255.255.255.0").prefixlen(), 24)
- self.failUnlessEqual(IPy.IP("2001::/64").prefixlen(), 64)
-
-
- def testVersion(self):
- """IP-version detection should work"""
- self.failUnlessEqual(IPy.IP("0.0.0.0/0").version(), 4)
- self.failUnlessEqual(IPy.IP("::1").version(), 6)
-
- # TODO:
- #def reverseNames(self):
- #def reverseName(self):
- #def __cmp__(self, other):
- #def __add__(self, other):
- #def _printPrefix(self, want):
-
- def testOverlaps(self):
- """Overlapping Address Ranges."""
- testValues = [('192.168.0.0/23', '192.168.1.0/24', 1),
- ('192.168.0.0/23', '192.168.0.0/20', 1),
- ('192.168.0.0/23', '192.168.2.0', 0),
- ('192.168.0.0/23', '192.167.255.255', 0),
- ('192.168.0.0/23', '192.168.0.0', 1),
- ('192.168.0.0/23', '192.168.1.255', 1),
- ('192.168.1.0/24', '192.168.0.0/23', -1),
- ('127.0.0.1', '127.0.0.1', 1),
- ('127.0.0.1', '127.0.0.2', 0)]
- for (a, b, answer) in testValues:
- result = IPy.IP(a).overlaps(b)
- self.failUnlessEqual(answer, result, (a, b, result, answer))
-
- def testNetmask(self):
- """Normal string Output."""
- testValues = [(338770000845734292534325025077361652240L, '0xfedcba9876543210fedcba9876543210'),
- (21932261930451111902915077091070067066L, '0x108000000000000000080800200c417a'),
- (338958331222012082418099330867817087043L, '0xff010000000000000000000000000043'),
- (0L, '0x0'),
- (1L, '0x1'),
- (4294967295l, '0xffffffff'),
- (3588059479L, '0xd5dd7157')]
- for (question, answer) in testValues:
- result = IPy.IP(question).strHex(question).lower()
- self.failUnlessEqual(answer, result, (question, result, answer))
-
-# TODO
-#eval(repr(IPy))
-# differences between IP and IPint
-
-
-# I ported this checks to be sure that I don't have errors in my own checks.
-class NetIPChecks(unittest.TestCase):
- """Checks taken from perls Net::IP"""
- def testMisc(self):
- ip = IPy.IP('195.114.80/24')
- self.assertEqual(ip.int(), 3279048704L)
- self.assertEqual(ip.reverseName(),'80.114.195.in-addr.arpa.')
- self.assertEqual(ip.strBin(),'11000011011100100101000000000000')
- self.assertEqual(str(ip.net()),'195.114.80.0')
- self.assertEqual(str(ip),'195.114.80.0/24')
- self.assertEqual(ip.prefixlen(),24)
- self.assertEqual(ip.version(),4)
- self.assertEqual(ip.len(),256)
- self.assertEqual(IPy._intToBin(ip.netmask().int()),'11111111111111111111111100000000')
- self.assertEqual(ip.strNetmask(),'255.255.255.0')
- self.assertEqual(ip.iptype(), 'PUBLIC')
- self.assertEqual(ip.broadcast().strBin(),'11000011011100100101000011111111')
- self.assertEqual(str(ip.broadcast()),'195.114.80.255')
-
- ip = IPy.IP('202.31.4/24')
- self.assertEqual(str(ip.net()),'202.31.4.0')
-
- self.failUnlessRaises(ValueError, IPy.IP, '234.245.252.253/2')
-
- # because we ar using integer representation we don't need a special "binadd"
- ip = IPy.IP('62.33.41.9')
- ip2 = IPy.IP('0.1.0.5')
- self.assertEqual(str(IPy.IP(ip.int() + ip2.int())),'62.34.41.14')
- #$T->ok_eq ($ip->binadd($ip2)->ip(),'62.34.41.14',$ip->error());
-
- ip = IPy.IP('133.45.0/24')
- ip2 = IPy.IP('133.45.1/24')
- self.assertEqual((ip + ip2).prefixlen(),23)
-
- ip2 = IPy.IP('133.44.255.255');
- #$T->ok_eqnum ($ip->bincomp('gt',$ip2),1,$ip->error());
-
- # this is something we can't do with IPy
- #ip = IPy.IP('133.44.255.255-133.45.0.42');
- #$T->ok_eq (($ip->find_prefixes())[3],'133.45.0.40/31',$ip->error());
-
- ip = IPy.IP('201.33.128.0/22');
- ip2 = IPy.IP('201.33.129.0/24');
- #$T->ok_eqnum ($ip->overlaps($ip2),$IP_B_IN_A_OVERLAP,$ip->error());
-
- ip = IPy.IP('dead:beef:0::/48')
- self.assertEqual(str(ip.net()),'dead:beef::')
- self.assertEqual(ip.int(), 295990755014133383690938178081940045824L)
- self.assertEqual(ip.strBin(),'11011110101011011011111011101111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000')
- self.assertEqual(ip.strCompressed(),'dead:beef::/48')
- self.assertEqual(ip.prefixlen(), 48)
- self.assertEqual(ip.version(), 6)
- self.assertEqual(ip.strNetmask(),'/48')
- self.assertEqual(str(ip.netmask()),'ffff:ffff:ffff::')
- self.assertEqual(ip.iptype(),'UNASSIGNED')
- self.assertEqual(ip.reverseName(),'0.0.0.0.f.e.e.b.d.a.e.d.ip6.int.')
- self.assertEqual(str(ip.broadcast()),'dead:beef:0:ffff:ffff:ffff:ffff:ffff')
-
- ip = IPy.IP('202.31.4/24')
- self.assertEqual(str(ip.net()),'202.31.4.0')
-
- # TODO: fix this in IPy ... after rereading the RfC
- # ip = IPy.IP(':1/128');
- #$T->ok_eq ($ip->error(),'Invalid address :1 (starts with :)',$ip->error());
- #$T->ok_eqnum ($ip->errno(),109,$ip->error());
-
- ip = IPy.IP('ff00:0:f000::')
- ip2 = IPy.IP('0:0:1000::')
- self.assertEqual(IPy.IP(ip.int() + ip2.int()).strCompressed(), 'ff00:1::')
-
- ip = IPy.IP('::e000:0/112')
- ip2 = IPy.IP('::e001:0/112')
- self.assertEqual(ip.__add__(ip2).prefixlen(),111)
-
- ip2 = IPy.IP('::dfff:ffff')
- #$T->ok_eqnum ($ip->bincomp('gt',$ip2),1,$ip->error());
-
- #ip = IPy.IP('::e000:0 - ::e002:42')
- #$T->ok_eq (($ip->find_prefixes())[2],'0000:0000:0000:0000:0000:0000:e002:0040/127',$ip->error());
-
- ip = IPy.IP('ffff::/16')
- ip2 = IPy.IP('8000::/16')
- #$T->ok_eqnum ($ip->overlaps($ip2),$IP_NO_OVERLAP,$ip->error());
-
-def timeout(func, args=(), kwargs={}, timeout_duration=1, default=None):
- """
- ASPN receipe written by dustin lee to call a function with
- a timeout using threads:
- http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/473878
-
- Small patch: add setDaemon(True) to allow Python to leave whereas the
- thread is not done.
- """
- class InterruptableThread(threading.Thread):
- def __init__(self):
- threading.Thread.__init__(self)
- self.result = None
-
- def run(self):
- try:
- self.result = func(*args, **kwargs)
- except:
- self.result = default
-
- it = InterruptableThread()
- it.setDaemon(True)
- it.start()
- it.join(timeout_duration)
- if it.isAlive():
- return default
- else:
- return it.result
-
-#DISABLED: *** not sure what this test is trying to achieve ***
-#DISABLED:class RegressionTest(unittest.TestCase):
-#DISABLED: def testNulNetmask(self):
-#DISABLED: ip = timeout(IPy.IP, ["0.0.0.0/0.0.0.0"], timeout_duration=0.250, default=None)
-#DISABLED: if ip:
-#DISABLED: text = str(ip)
-#DISABLED: else:
-#DISABLED: text = "*TIMEOUT*"
-#DISABLED: self.assertEqual(text, "0.0.0.0/0")
-#DISABLED:
-#DISABLED: def testNonZeroType(self):
-#DISABLED: self.assertEqual(bool(IPy.IP("0.0.0.0/0")), True)
-
-#DISABLED: *** different text returned from IANA files ***
-#DISABLED: *** netaddr.IP.is_private() returns True for this address ***
-#DISABLED: def testPrivate169(self):
-#DISABLED: """
-#DISABLED: RFC 3330 indicates that 169.254.0.0/16 addresses are private.
-#DISABLED: They are automatically configured for links in the absence of other
-#DISABLED: information and should not be used on the internet
-#DISABLED: """
-#DISABLED: self.assertEqual(IPy.IP("169.254.191.164").iptype(), "PRIVATE")
-
- def testCheckAddrPrefixlenOn(self):
- self.assertEqual(len(IPy.IP('192.168.0.0/24')), 256)
- self.assertRaises(ValueError, IPy.IP, '192.168.1.0/42')
-#DISABLED: *** strange prefixlen behaviour checks ***
-#DISABLED: self.assertRaises(ValueError, IPy.IP, '172.30.1.0/22')
-
-#DISABLED: *** strange prefixlen behaviour checks ***
-#DISABLED: def testCheckAddrPrefixlenOff(self):
-#DISABLED: old = IPy.check_addr_prefixlen
-#DISABLED: IPy.check_addr_prefixlen = False
-#DISABLED: try:
-#DISABLED: self.assertEqual(len(IPy.IP('192.168.0.0/24')), 256)
-#DISABLED: self.assertRaises(ValueError, IPy.IP, '192.168.1.0/42')
-#DISABLED: self.assertEqual(len(IPy.IP('172.30.1.0/22')), 1024)
-#DISABLED: finally:
-#DISABLED: IPy.check_addr_prefixlen = old
-
-if __name__ == "__main__":
- unittest.main()
-
diff --git a/netaddr/ip/__init__.py b/netaddr/ip/__init__.py
index fd0eaf4..69f7ffc 100755
--- a/netaddr/ip/__init__.py
+++ b/netaddr/ip/__init__.py
@@ -1,394 +1,1259 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-Provides access to public network address information published by IANA.
-
-More details can be found at the following URLs :-
-
-Internet Assigned Numbers Authority (IANA)
-
- - http://www.iana.org/
- - http://www.iana.org/protocols/
-"""
-
-import os as _os
-import os.path as _path
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""classes and functions for dealing with IPv4 and IPv6."""
+
+import sys as _sys
import re as _re
-
-from netaddr.core import Publisher, Subscriber, PrettyPrinter
-from netaddr import AT_INET, AT_INET6
-from netaddr.address import CIDR, IPRange
-#-----------------------------------------------------------------------------
+from netaddr.core import AddrFormatError, AddrConversionError, num_bits
+from netaddr.strategy import ipv4 as _ipv4
+from netaddr.strategy import ipv6 as _ipv6
-#: Topic based lookup dictionary for IANA information.
-IANA_INFO = {
- 'IPv4' : {},
- 'IPv6' : {},
- 'multicast' : {},
-}
-
-#-----------------------------------------------------------------------------
-class LineRecordParser(Publisher):
- """
- A configurable Parser that understands how to parse line based records.
- """
- def __init__(self, fh, **kwargs):
- """
- Constructor.
-
- fh - a valid, open file handle to line based record data.
- """
- super(LineRecordParser, self).__init__()
- self.fh = fh
-
- self.__dict__.update(kwargs)
-
- # Regex used to identify start of lines of interest.
- if 're_start' not in self.__dict__:
- self.re_start = r'^.*$'
-
- # Regex used to identify line to be parsed within block of interest.
- if 're_parse_line' not in self.__dict__:
- self.re_parse_line = r'^.*$'
-
- # Regex used to identify end of lines of interest.
- if 're_stop' not in self.__dict__:
- self.re_stop = r'^.*$'
-
- # If enabled, skips blank lines after being stripped.
- if 'skip_blank_lines' not in self.__dict__:
- self.skip_blank_lines = False
-
- def parse_line(self, line):
- """
- This is the callback method invoked for every line considered valid by
- the line parser's settings. It is usually over-ridden by base classes
- to provide specific line parsing and line skipping logic.
-
- Any line can be vetoed (not passed to registered Subscriber objects)
- by simply returning None.
- """
- return line
-
- def parse(self):
- """
- Parse and normalises records, notifying registered subscribers with
- record data as it is encountered.
- """
- record = None
- section_start = False
- section_end = False
-
- for line in self.fh:
- line = line.strip()
-
- # Skip blank lines if required.
- if self.skip_blank_lines and line == '':
- continue
-
- # Entered record section.
- if not section_start and len(_re.findall(self.re_start, line)) > 0:
- section_start = True
-
- # Exited record section.
- if section_start and len(_re.findall(self.re_stop, line)) > 0:
- section_end = True
-
- # Stop parsing.
- if section_end:
- break
-
- # Is this a line of interest?
- if section_start and len(_re.findall(self.re_parse_line, line)) == 0:
- continue
-
- if section_start:
- record = self.parse_line(line)
-
- # notify subscribers of final record details.
- self.notify(record)
-
-#-----------------------------------------------------------------------------
-class IPv4Parser(LineRecordParser):
- """
- A LineRecordParser that understands how to parse and retrieve data records
- from the IANA IPv4 address space file.
-
- It can be found online here :-
-
- http://www.iana.org/assignments/ipv4-address-space
- """
- def __init__(self, fh, **kwargs):
- """
- Constructor.
-
- fh - a valid, open file handle to an OUI Registry data file.
-
- kwargs - additional parser options.
-
- """
- super(IPv4Parser, self).__init__(fh,
- re_start=r'^Prefix',
- re_parse_line=r'^\d{3}\/\d',
- re_stop=r'^Notes\s*$',
- skip_blank_lines=True,
- )
-
- self.record_widths = (
- ('prefix', 0, 8),
- ('designation', 8, 49),
- ('date', 57, 10),
- ('whois', 67, 20),
- ('status', 87, 19),
- )
-
- def parse_line(self, line):
- """
- Callback method invoked for every line considered valid by the line
- parser's settings.
-
- See base class method for more details.
- """
- record = {}
- for (key, start, width) in self.record_widths:
- value = line[start:start+width]
- record[key] = value.strip()
-
- # Strip leading zeros from octet.
- if '/' in record['prefix']:
- (octet, prefix) = record['prefix'].split('/')
- record['prefix'] = "%d/%d" % (int(octet), int(prefix))
-
- record['status'] = record['status'].capitalize()
-
- return record
-
-#-----------------------------------------------------------------------------
-class IPv6Parser(LineRecordParser):
- """
- A LineRecordParser that understands how to parse and retrieve data records
- from the IANA IPv6 address space file.
-
- It can be found online here :-
-
- http://www.iana.org/assignments/ipv6-address-space
- """
- def __init__(self, fh, **kwargs):
- """
- Constructor.
-
- fh - a valid, open file handle to an OUI Registry data file.
-
- kwargs - additional parser options.
-
- """
- super(IPv6Parser, self).__init__(fh,
- re_start=r'^IPv6 Prefix',
- re_parse_line=r'^[A-F0-9]+::\/\d+',
- re_stop=r'^Notes:\s*$',
- skip_blank_lines=True)
-
- self.record_widths = (
- ('prefix', 0, 22),
- ('allocation', 22, 24),
- ('reference', 46, 15))
-
- def parse_line(self, line):
- """
- Callback method invoked for every line considered valid by the line
- parser's settings.
-
- See base class method for more details.
- """
- record = {}
- for (key, start, width) in self.record_widths:
- value = line[start:start+width]
- record[key] = value.strip()
-
- # Remove square brackets from reference field.
- record[key] = record[key].lstrip('[')
- record[key] = record[key].rstrip(']')
- return record
-
-#-----------------------------------------------------------------------------
-class MulticastParser(LineRecordParser):
- """
- A LineParser that knows how to process the IANA IPv4 multicast address
- allocation file.
-
- It can be found online here :-
-
- http://www.iana.org/assignments/multicast-addresses
- """
- def __init__(self, fh, **kwargs):
- """
- Constructor.
-
- fh - a valid, open file handle to an OUI Registry data file.
-
- kwargs - additional parser options.
-
- """
- super(MulticastParser, self).__init__(fh,
- re_start=r'^Registry:',
- re_parse_line=r'^\d+\.\d+\.\d+\.\d+',
- re_stop=r'^Relative',
- skip_blank_lines=True)
-
- def normalise_addr(self, addr):
- """
- Removes variations from address entries found in this particular file.
- """
- if '-' in addr:
- (a1, a2) = addr.split('-')
- o1 = a1.strip().split('.')
- o2 = a2.strip().split('.')
- return "%s-%s" % ('.'.join([str(int(i)) for i in o1]),
- '.'.join([str(int(i)) for i in o2]))
- else:
- o1 = addr.strip().split('.')
- return '.'.join([str(int(i)) for i in o1])
-
- def parse_line(self, line):
- """
- Callback method invoked for every line considered valid by the line
- parser's settings.
-
- See base class method for more details.
- """
- index = line.find('[')
- if index != -1:
- line = line[0:index].strip()
- (addr, descr) = [i.strip() for i in _re.findall(
- r'^([\d.]+(?:\s*-\s*[\d.]+)?)\s+(.+)$', line)[0]]
- addr = self.normalise_addr(addr)
- descr = ' '.join(descr.split())
- descr = descr.replace('Date registered' , '').rstrip()
-
- return dict(address=addr, descr=descr)
-
#-----------------------------------------------------------------------------
-class DictUpdater(Subscriber):
+class IP(object):
"""
- Concrete Subscriber that inserts records received from a Publisher into a
- dictionary.
+ Represents an individual IP address or an IP network with subnet prefix.
+ The subnet prefix may either be an integer CIDR prefix, a netmask IP
+ address or a hostmask IP address (Cisco style ACLs).
+
+ Supports both IPv4 and IPv6.
"""
- def __init__(self, dct, topic, unique_key):
+ def __init__(self, addr, version=None):
"""
Constructor.
- dct - lookup dict or dict like object to insert records into.
+ @param addr: an IPv4 or IPv6 address with optional subnet prefix.
+ May be an IP address in representation (string) format, an integer
+ or another IP object (copy construction).
+
+ @param version: the explict IP version to use when interpreting addr.
+ """
+ self._value = None
+ self._prefixlen = None
+ self._module = None
+
+ if hasattr(addr, 'prefixlen'):
+ # Copy constructor.
+ if version is not None and version != addr._module.version:
+ raise ValueError('cannot switch IP versions using '
+ 'copy constructor!')
+ self._value = addr._value
+ self._prefixlen = addr._prefixlen
+ self._module = addr._module
+ else:
+ # Explicit IP address version.
+ if version is not None:
+ if version == 4:
+ self._module = _ipv4
+ elif version == 6:
+ self._module = _ipv6
+ else:
+ raise ValueError('unsupported IP version %r' % version)
+
+ if hasattr(addr, '__getitem__') and '/' in addr:
+ # IP address with CIDR prefix.
+ try:
+ prefix, suffix = addr.split('/')
+ except ValueError:
+ raise AddrFormatError('bad address format: %r' % addr)
+
+ self.value = prefix
+ self.prefixlen = suffix
+ else:
+ # IP address (no CIDR prefix).
+ self.value = addr
+ self.prefixlen = self._module.width
+
+ def _get_value(self):
+ return self._value
+
+ def _set_value(self, value):
+ if self._module is None:
+ # IP version is implicit, detect it from value.
+ for module in (_ipv4, _ipv6):
+ try:
+ self._value = module.str_to_int(value)
+ self._module = module
+ break
+ except AddrFormatError:
+ try:
+ if 0 <= int(value) <= module.max_int:
+ self._value = int(value)
+ self._module = module
+ break
+ except ValueError:
+ pass
+
+ if self._module is None:
+ raise AddrFormatError('failed to detect IP version: %r'
+ % value)
+ else:
+ # IP version is explicit.
+ if hasattr(value, 'upper'):
+ try:
+ self._value = self._module.str_to_int(value)
+ except AddrFormatError:
+ raise AddrFormatError('base address %r is not IPv%d'
+ % (value, self._module.version))
+ else:
+ if 0 <= int(value) <= self._module.max_int:
+ self._value = int(value)
+ else:
+ raise AddrFormatError('bad address format: %r' % value)
+
+ value = property(_get_value, _set_value, None,
+ 'a positive integer representing the value of this IP address.')
+
+ def _get_prefixlen(self):
+ return self._prefixlen
+
+ def _set_prefixlen(self, value):
+ try:
+ # Integer CIDR prefix?
+ if 0 <= int(value) <= self._module.width:
+ self._prefixlen = int(value)
+ else:
+ raise AddrFormatError('CIDR prefix /%d out of range for ' \
+ 'IPv%d!' % (int(value), self._module.version))
+ except ValueError:
+ # Netmask or hostmask (ACL) style CIDR prefix.
+ version = self._module.version
+ addr = IP(value, version)
+
+ if addr.is_netmask():
+ self._prefixlen = addr.netmask_bits()
+ elif addr.is_hostmask():
+ # prefixlen is an ACL (hostmask) address.
+ netmask = IP(addr._module.max_int ^ int(addr), version)
+ self._prefixlen = netmask.netmask_bits()
+ else:
+ # Enforce this for now unless users want it changed.
+ raise ValueError('CIDR prefix mask %r is invalid!' % addr)
+
+ prefixlen = property(_get_prefixlen, _set_prefixlen, None,
+ 'size of the bitmask used to indentify and separate the network '
+ 'identifier from the host identifier in this IP address.')
+
+ def is_unicast(self):
+ """@return: C{True} if this IP is unicast, C{False} otherwise"""
+ return not self.is_multicast()
+
+ def is_multicast(self):
+ """@return: C{True} if this IP is multicast, C{False} otherwise"""
+ if self._module == _ipv4:
+ return self in IP('224.0.0.0/4', self.version)
+ elif self._module == _ipv6:
+ return self in IP('ff00::/8', self.version)
+
+ def is_hostmask(self):
+ """
+ @return: C{True} if this address is a mask that would return a host
+ id, C{False} otherwise.
+ """
+ int_val = self._value + 1
+ return (int_val & (int_val - 1) == 0)
+
+ def is_netmask(self):
+ """
+ @return: C{True} if this addr is a mask that would return a host id,
+ C{False} otherwise.
+ """
+ int_val = (self._value ^ self._module.max_int) + 1
+ return (int_val & (int_val - 1) == 0)
+
+ def netmask_bits(self): #FIXME: replace this
+ """
+ @return: If this IP is a valid netmask, the number of non-zero
+ bits are returned, otherwise it returns the width in bits for
+ based on the IP address version, 32 for IPv4 and 128 for IPv6.
+ """
+ if not self.is_netmask():
+ return self._module.width
+
+ bits = self._module.int_to_bits(self._value)
+ mask_bits = bits.translate(
+ ''.join([chr(_) for _ in range(256)]), ':.0')
+ mask_length = len(mask_bits)
+
+ if not 0 <= mask_length <= self._module.width:
+ raise ValueError('Unexpected mask length %d for address type!' \
+ % mask_length)
+
+ return mask_length
+
+ def is_loopback(self):
+ """
+ @return: C{True} if this IP is loopback address (not for network
+ transmission), C{False} otherwise.
+ References: RFC 3330 and 4291.
+ """
+ if self.version == 4:
+ return self in IP('127.0.0.0/8')
+ elif self.version == 6:
+ return self == IP('::1')
+
+ def is_private(self):
+ """
+ @return: C{True} if this IP is for internal/private use only
+ (i.e. non-public), C{False} otherwise. Reference: RFCs 1918,
+ 3330, 4193, 3879 and 2365.
+ """
+ if self.version == 4:
+ for cidr in (IP('192.168.0.0/16'), IP('10.0.0.0/8'),
+ IP('172.16.0.0/12'), IP('192.0.2.0/24'),
+ IP('239.192.0.0/14')):
+ if self in cidr:
+ return True
+ elif self.version == 6:
+ # Please Note: FEC0::/10 has been deprecated! See RFC 3879.
+ return self in IP('fc00::/7') # ULAs - Unique Local Addresses
- topic - high-level category name of data to be processed.
+ if self.is_link_local():
+ return True
- unique_key - key name in data dict that uniquely identifies it.
+ return False
+
+ def is_link_local(self):
+ """
+ @return: C{True} if this IP is link-local address C{False} otherwise.
+ Reference: RFCs 3927 and 4291.
+ """
+ if self.version == 4:
+ return self in IP('169.254.0.0/16')
+ elif self.version == 6:
+ return self in IP('fe80::/10')
+
+ def is_reserved(self):
+ """
+ @return: C{True} if this IP is in IANA reserved range, C{False}
+ otherwise. Reference: RFCs 3330 and 3171.
"""
- self.dct = dct
- self.topic = topic
- self.unique_key = unique_key
+ if self.version == 4:
+ # Use of ipglobs here would be much more concise than CIDRs...
+ for cidr in (IP('240.0.0.0/4'), IP('234.0.0.0/7'),
+ IP('236.0.0.0/7'),
+ # 225-231.*.*.*
+ IP('225.0.0.0/8'), IP('226.0.0.0/7'),
+ IP('228.0.0.0/6'),
+ # 234-238.*.*.*
+ IP('234.0.0.0/7'), IP('236.0.0.0/7'),
+ IP('238.0.0.0/8')):
+ if self in cidr:
+ return True
+ if self.version == 6:
+ for cidr in (IP('ff00::/12'),IP('::/8'), IP('0100::/8'),
+ IP('0200::/7'), IP('0400::/6'), IP('0800::/5'),
+ IP('1000::/4'), IP('4000::/3'), IP('6000::/3'),
+ IP('8000::/3'), IP('A000::/3'), IP('C000::/3'),
+ IP('E000::/4'), IP('F000::/5'), IP('F800::/6'),
+ IP('FE00::/9')):
+ if self in cidr:
+ return True
+ return False
- def update(self, data):
+ def is_ipv4_mapped(self):
"""
- Callback function used by Publisher to notify this Subscriber about
- an update. Stores topic based information into dictionary passed to
- constructor.
+ @return: C{True} if this IP is IPv4-compatible IPv6 address, C{False}
+ otherwise.
"""
- data_id = data[self.unique_key]
+ return self.version == 6 and (self._value >> 32) == 0xffff
+
+ def is_ipv4_compat(self):
+ """
+ @return: C{True} if this IP is IPv4-mapped IPv6 address, C{False}
+ otherwise.
+ """
+ return self.version == 6 and (self._value >> 32) == 0
+
+ @property
+ def ip(self):
+ """
+ The IP address of this IP object. This is not necessarily the same as
+ the network address indicated by various CIDR prefixes or network
+ masks.
+ """
+ return IP(self._value, self.version)
+
+ @property
+ def version(self):
+ """the IP protocol version represented by this IP object."""
+ return self._module.version
+
+ @property
+ def network(self):
+ """The network address of this IP object."""
+ return IP(self._value & int(self.netmask), self.version)
+
+ @property
+ def broadcast(self):
+ """The broadcast address of this IP object"""
+ return IP(self._value | self.hostmask._value, self.version)
+
+ @property
+ def first(self):
+ """
+ The integer value of first IP address in the CIDR block for this IP
+ object.
+ """
+ return self._value & (self._module.max_int ^ self.hostmask._value)
+
+ @property
+ def last(self):
+ """
+ The integer value of last IP address in the CIDR block for this IP
+ object.
+ """
+ hostmask = (1 << (self._module.width - self._prefixlen)) - 1
+ return self._value | hostmask
+
+ @property
+ def netmask(self):
+ """The subnet mask of this IP object."""
+ return IP(self._module.max_int ^ self.hostmask._value, self.version)
+
+ @property
+ def hostmask(self):
+ """The host mask of this IP object."""
+ hostmask = (1 << (self._module.width - self._prefixlen)) - 1
+ return IP(hostmask, self.version)
+
+ @property
+ def cidr(self):
+ """
+ The CIDR network address for this IP object. This excludes any host
+ address bits that remain after applying the subnet prefix to the IP
+ address of an IP object.
+ """
+ cidr = IP(self._value & int(self.netmask), self.version)
+ cidr.prefixlen = self.prefixlen
+ return cidr
+
+ @property
+ def size(self):
+ """The number of IP addresses in this subnet."""
+ return int(self.last - self.first + 1)
+
+ def supernet(self, prefixlen=0):
+ """
+ Provides a list of supernet CIDR blocks for this IP object's subnet
+ between the size of the current prefix and (if specified) and end
+ prefix.
+
+ @param prefixlen: (optional) a CIDR prefix for the maximum supernet.
+ Default: 0 - returns all possible supernets.
+
+ @return: an tuple containing IP object supernets containing this one.
+ """
+ if not 0 <= prefixlen <= self._module.width:
+ raise ValueError('CIDR prefix /%d invalid for IPv%d!' \
+ % (prefixlen, self.version))
+
+ # Use a copy of self as we'll be editing it.
+ supernet = self.cidr
- if self.topic == 'IPv4':
- cidr = CIDR(data_id)
- self.dct[cidr] = data
- elif self.topic == 'IPv6':
- cidr = CIDR(data_id)
- self.dct[cidr] = data
- elif self.topic == 'multicast':
- iprange = None
- if '-' in data_id:
- (first, last) = data_id.split('-')
- iprange = IPRange(first, last)
+ supernets = []
+ while supernet.prefixlen > prefixlen:
+ supernet.prefixlen -= 1
+ supernets.append(supernet.cidr)
+
+ return list(reversed(supernets))
+
+ def __iadd__(self, i):
+ """
+ Increases the value of this IP object by the current size * i.
+
+ An IndexError is raised if result exceeds address range maximum.
+ """
+ new_first = int(self.network) + (self.size * i)
+
+ if (new_first + (self.size - 1)) > self._module.max_int:
+ raise IndexError('increment exceeds address boundary!')
+
+ self._value = new_first
+ return self
+
+ def __isub__(self, i):
+ """
+ Decreases the value of this IP object by the current size * i.
+
+ An IndexError is raised if result is less than zero.
+ """
+ new_first = int(self.network) - (self.size * i)
+
+ if new_first < 0:
+ raise IndexError('decrement is less than zero!')
+
+ self._value = new_first
+ return self
+
+ def __getitem__(self, index):
+ """
+ @return: The IP address(es) in this address range referenced by
+ index/slice. Slicing objects can produce large sequences so
+ generator objects are returned instead of a list. Wrapping a slice
+ with C{list()} or C{tuple()} may be required dependent on context
+ in which it is called.
+ """
+ if hasattr(index, 'indices'):
+ if self._module.version == 6:
+ #FIXME: IPv6 breaks the .indices() method on the slice object
+ #FIXME: spectacularly. We'll have to work out the start, stop
+ #FIXME: and step ourselves :-(
+ #FIXME: See PySlice_GetIndicesEx function in Python SVN
+ #FIXME: repository for implementation details :-
+ #http://svn.python.org/view/python/trunk/Objects/sliceobject.c
+ raise TypeError('slices unsupported on IPv6 objects!')
+
+ (start, stop, step) = index.indices(self.size)
+ start_ip = IP(self.first + start, self.version)
+ end_ip = IP(self.first + stop, self.version)
+ return iter_iprange(start_ip, end_ip, step)
+ else:
+ try:
+ index = int(index)
+ if (- self.size) <= index < 0:
+ # negative index.
+ return IP(self.last + index + 1, self.version)
+ elif 0 <= index <= (self.size - 1):
+ # Positive index or zero index.
+ return IP(self.first + index, self.version)
+ else:
+ raise IndexError('index out range for address range size!')
+ except ValueError:
+ raise TypeError('unsupported index type %r!' % index)
+
+ def __len__(self):
+ """
+ @return: The number of IP addresses in this subnet. Raises IndexError
+ if size > sys.maxint (a Python limitation). Use the .size()
+ property for subnets of any size.
+ """
+ size = self.size
+ if size > _sys.maxint:
+ # Use .size() method in this class instead as len() will b0rk!
+ raise IndexError("range contains greater than %d (sys.maxint)" \
+ "addresses! Use the .size() method instead.")
+ return size
+
+ def __contains__(self, other):
+ """
+ @param other: an IP address (any format supported by IP.__init__).
+
+ @return: C{True} if a given IP address/ranges falls within the
+ boundary of this IP address/range, C{False} otherwise.
+ """
+ other = IP(other, self.version)
+ return other.first >= self.first and other.last <= self.last
+
+ def __iter__(self):
+ """
+ @return: An iterator object providing access to all network addresses
+ within this range.
+ """
+ start_ip = IP(self.first, self.version)
+ end_ip = IP(self.last+1, self.version)
+ return iter_iprange(start_ip, end_ip)
+
+ def __hash__(self):
+ """
+ @return: A hash value uniquely indentifying this IP object. It is
+ based on the subnet of this IP object, *not* its IP address value.
+ """
+ return hash((self.version, self.first, self.last))
+
+ def __eq__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{True} if the boundary of this IP's subnet match that
+ of other, C{False} otherwise.
+ """
+ try:
+ return (self.version, self.first, self.last) == \
+ (other.version, other.first, other.last)
+ except AttributeError:
+ return False
+
+ def __ne__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{False} if the boundary of this IP's subnet match that
+ of other, C{True} otherwise.
+ """
+ try:
+ return (self.version, self.first, self.last) != \
+ (other.version, other.first, other.last)
+ except AttributeError:
+ return True
+
+ def __lt__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{True} if the boundary of this IP's subnet are less than
+ other, C{False} otherwise.
+ """
+ try:
+ # A sort key is essentially a CIDR prefixlen value.
+ # Required as IPRange (and subclasses other than CIDR) do not
+ # calculate it.
+ self_sort_key = self._module.width - num_bits(self.size)
+ other_sort_key = other._module.width - num_bits(other.size)
+ return (self.version, self.first, self_sort_key) < \
+ (other.version, other.first, other_sort_key)
+ except AttributeError:
+ return False
+
+ def __le__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{True} if the boundary of this IP's subnet are less than or
+ equal to other, C{False} otherwise.
+ """
+ try:
+ # A sort key is essentially a CIDR prefixlen value.
+ # Required as IPRange (and subclasses other than CIDR) do not
+ # calculate it.
+ self_sort_key = self._module.width - num_bits(self.size)
+ other_sort_key = other._module.width - num_bits(other.size)
+ return (self.version, self.first, self_sort_key) <= \
+ (other.version, other.first, other_sort_key)
+ except AttributeError:
+ return False
+
+ def __gt__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{True} if the boundary of this IP's subnet are greater
+ than other, C{False} otherwise.
+ """
+ try:
+ # A sort key is essentially a CIDR prefixlen value.
+ # Required as IPRange (and subclasses other than CIDR) do not
+ # calculate it.
+ self_sort_key = self._module.width - num_bits(self.size)
+ other_sort_key = other._module.width - num_bits(other.size)
+ return (self.version, self.first, self_sort_key) > \
+ (other.version, other.first, other_sort_key)
+ except AttributeError:
+ return False
+
+ def __ge__(self, other):
+ """
+ @param other: an IP address object of the same version as C{self}.
+
+ @return: C{True} if the boundary of this IP's subnet are greater than
+ or equal than other, C{False} otherwise.
+ """
+ try:
+ # A sort key is essentially a CIDR prefixlen value.
+ # Required as IPRange (and subclasses other than CIDR) do not
+ # calculate it.
+ self_sort_key = self._module.width - num_bits(self.size)
+ other_sort_key = other._module.width - num_bits(other.size)
+ return (self.version, self.first, self_sort_key) >= \
+ (other.version, other.first, other_sort_key)
+ except AttributeError:
+ return False
+
+ def __int__(self):
+ """@return: value of this address as an unsigned integer"""
+ return self._value
+
+ def __long__(self):
+ """@return: value of this address as an unsigned integer"""
+ return self._value
+
+ def __hex__(self):
+ """@return: hexadecimal string representation of this IP address."""
+ return hex(self._value).rstrip('L').lower()
+
+ def __str__(self):
+ """@return: IP address in representational format"""
+ addr = self._module.int_to_str(self._value)
+ if self.prefixlen != self._module.width:
+ return "%s/%s" % (addr, self.prefixlen)
+ return addr
+
+ def __repr__(self):
+ """@return: Python statement to create equivalent IP object"""
+ return "IP('%s')" % self
+
+ def bits(self, word_sep=None):
+ """
+ @param word_sep: (optional) the separator to insert between words.
+ Default: None - use default separator for address type.
+
+ @return: human-readable binary digit string of this address"""
+ return self._module.int_to_bits(self._value, word_sep)
+
+ def packed(self):
+ """@return: binary packed string of this address"""
+ return self._module.int_to_packed(self._value)
+
+ def bin(self):
+ """
+ @return: standard Python binary representation of this address. A back
+ port of the format provided by the builtin bin() type available in
+ Python 2.6.x and higher."""
+ return self._module.int_to_bin(self._value)
+
+ def reverse_dns(self):
+ """@return: The reverse DNS lookup string for this IP address"""
+ return self._module.int_to_arpa(self._value)
+
+ def ipv4(self):
+ """
+ @return: A new IPv4 address numerically equivalent to this one.
+ An object copy is returned if this object is already IPv4. If
+ this object is IPv6 and its value is compatible with IPv4, a new IPv4
+ L{IP} object is returned.
+
+ Raises an L{AddrConversionError} is IPv6 address cannot be converted.
+ """
+ ip = None
+
+ if self.version == 4:
+ ip = IP(self._value, 4)
+ ip.prefixlen = self.prefixlen
+ elif self.version == 6:
+ if 0 <= self._value <= _ipv4.max_int:
+ ip = IP(self._value, 4)
+ ip.prefixlen = self.prefixlen - 96
+ elif _ipv4.max_int <= self._value <= 0xffffffffffff:
+ ip = IP(self._value - 0xffff00000000, 4)
+ ip.prefixlen = self.prefixlen - 96
else:
- iprange = IPRange(data_id, data_id)
- self.dct[iprange] = data
+ raise AddrConversionError('IPv6 address %s unsuitable for ' \
+ 'conversion to IPv4!' % self)
+ return ip
+
+ def ipv6(self, ipv4_compatible=False):
+ """
+ B{Please Note:} the IPv4-Mapped IPv6 address format is now considered
+ deprecated. Reference: RFC 4291
+
+ @param ipv4_compatible: If C{True} returns an IPv4-Mapped address
+ (::ffff:x.x.x.x), an IPv4-Compatible (::x.x.x.x) address
+ otherwise. Default: False (IPv4-Mapped).
+
+ @return: A new L{IP} version 6 object that is numerically equivalent
+ this address. If this object is already IPv6 then a copy of this
+ object is returned. If this object is IPv4, a new version 6 L{IP}
+ object is returned.
+ """
+ ip = None
+
+ if self.version == 6:
+ ip = IP(self._value, 6)
+ ip.prefixlen = self.prefixlen
+ elif self.version == 4:
+ ip = IP(self._value, 6)
+ if ipv4_compatible:
+ # IPv4-Compatible IPv6 address
+ ip = IP(self._value, 6)
+ else:
+ # IPv4-Mapped IPv6 address
+ ip = IP(0xffff00000000 + self._value, 6)
+ ip.prefixlen = self.prefixlen + 96
+
+ return ip
+
+ def previous(self, step=1):
+ """
+ @param step: the number of IP subnets between this IP object and the
+ expected subnet. Default is 1 (the previous IP subnet).
+
+ @return: The adjacent subnet that precedes this IP object.
+ """
+ ip_copy = IP('%s/%d' % (self.network, self.prefixlen), self.version)
+ ip_copy -= step
+ return ip_copy
+
+ def next(self, step=1):
+ """
+ @param step: the number of IP subnets between this IP object and the
+ expected subnet. Default is 1 (the next IP subnet).
+
+ @return: The adjacent subnet that succeeds this IP object.
+ """
+ ip_copy = IP('%s/%d' % (self.network, self.prefixlen), self.version)
+ ip_copy += step
+ return ip_copy
+
+ def subnet(self, prefixlen, count=None, fmt=None):
+ """
+ A generator divides up and returns smaller IP subnets of the current
+ IP subnet based on a new smaller CIDR prefix (block size).
+
+ @param prefixlen: a CIDR prefix indicate size of subnets to create.
+
+ @param count: (optional) number of consecutive IP subnets to be
+ returned.
+
+ @return: an iterator (as lists could potentially be very large)
+ containing IP subnets based on this IP object's subnet.
+ """
+ if not 0 <= self.prefixlen <= self._module.width:
+ raise ValueError('CIDR prefix /%d invalid for IPv%d!' \
+ % (prefixlen, self.version))
+
+ if not self.prefixlen <= prefixlen:
+ # Don't return anything.
+ raise StopIteration
+
+ # Calculate number of subnets to be returned.
+ width = self._module.width
+ max_subnets = 2 ** (width - self.prefixlen) / 2 ** (width - prefixlen)
+
+ if count is None:
+ count = max_subnets
+
+ if not 1 <= count <= max_subnets:
+ raise ValueError('count outside of current IP subnet boundary!')
+
+ base_subnet = self._module.int_to_str(self.first)
+
+ for i in xrange(count):
+ subnet = IP('%s/%d' % (base_subnet, prefixlen), self.version)
+ subnet.value += (subnet.size * i)
+ subnet.prefixlen = prefixlen
+ yield subnet
+
+ def iter_hosts(self):
+ """
+ @return: An iterator that provides all IP addresses that can be
+ assigned to hosts within the range of this IP object's subnet.
+ - for IPv4, the network and broadcast addresses are always
+ excluded from any yielded list. Therefore, any subnet that
+ contains less than 4 IP addresses yields an empty list.
+ - for IPv6, only the unspecified address '::' is excluded
+ from any yielded IP addresses.
+ """
+ if self.version == 4:
+ # IPv4 logic.
+ if self.size >= 4:
+ return iter_iprange(IP(self.first+1, self.version),
+ IP(self.last, self.version))
+ else:
+ return iter([])
+ else:
+ # IPv6 logic.
+ if self.first == 0:
+ if self.size != 1:
+ # Don't return '::'.
+ return iter_iprange(IP(self.first+1, self.version),
+ IP(self.last+1, self.version))
+ else:
+ return iter([])
+ else:
+ return iter(self)
+
+ def info(self):
+ """
+ @return: A record dict containing IANA registration details for this
+ IP address if available, None otherwise.
+ """
+ # This import is placed here for efficiency. If you don't call this
+ # method, you don't take the (small), one time, import start up
+ # penalty.
+ from netaddr.ip.iana import query
+ return query(self)
+
+#-----------------------------------------------------------------------------
+def iter_iprange(start_ip, stop_ip, step=1):
+ """
+ An xrange work-alike generator for IP addresses. It produces sequences
+ based on start and stop IP address values, in intervals of step size.
+
+ @param start_ip: start IP address (any format supported by IP.__init__).
+
+ @param stop_ip: end IP address (any format supported by IP.__init__).
+
+ @param step: (optional) size of step between IP addresses.
+ (Default: 1)
+
+ @return: an iterator yielding one or more IP objects.
+ """
+ start_ip = IP(start_ip)
+ stop_ip = IP(stop_ip)
+
+ if start_ip.version != stop_ip.version:
+ raise TypeError('start and stop IP versions do not match!')
+ version = start_ip.version
+
+ step = int(step)
+ if step == 0:
+ raise ValueError('step argument cannot be zero')
+
+ # We don't need objects from here, just integers.
+ start = int(start_ip)
+ stop = int(stop_ip)
+
+ negative_step = False
+
+ if step < 0:
+ negative_step = True
+
+ index = start - step
+ while True:
+ index += step
+ if negative_step:
+ if not index > stop:
+ return
+ else:
+ if not index < stop:
+ return
+ yield IP(index, version)
+
+
+#-----------------------------------------------------------------------------
+def iter_unique_ips(*args):
+ """
+ @param args: A list of IP addresses and subnets passed in as arguments.
+
+ @return: A generator that flattens out IP subnets, yielding unique
+ individual IP addresses (no duplicates).
+ """
+ for cidr in cidr_merge(args):
+ for ip in cidr:
+ yield ip
+
+#-----------------------------------------------------------------------------
+def cidr_abbrev_to_verbose(abbrev_cidr):
+ """
+ A function that converts abbreviated IPv4 CIDRs to their more verbose
+ equivalent.
+
+ @param abbrev_cidr: an abbreviated CIDR.
+
+ Uses the old-style classful IP address rules to decide on a default
+ subnet prefix if one is not explicitly provided.
+
+ Only supports IPv4 addresses.
+
+ Examples ::
+
+ 10 - 10.0.0.0/8
+ 10/16 - 10.0.0.0/16
+ 128 - 128.0.0.0/16
+ 128/8 - 128.0.0.0/8
+ 192.168 - 192.168.0.0/16
+
+ @return: A verbose CIDR from an abbreviated CIDR or old-style classful
+ network address, The original value if it was not recognised as a
+ supported abbreviation.
+ """
+ # Internal function that returns a prefix value based on the old IPv4
+ # classful network scheme that has been superseded (almost) by CIDR.
+ def classful_prefix(octet):
+ octet = int(octet)
+ if not 0 <= octet <= 255:
+ raise IndexError('Invalid octet: %r!' % octet)
+ if 0 <= octet <= 127: # Legacy class 'A' classification.
+ return 8
+ elif 128 <= octet <= 191: # Legacy class 'B' classification.
+ return 16
+ elif 192 <= octet <= 223: # Legacy class 'C' classification.
+ return 24
+ elif octet == 224: # Multicast address range.
+ return 4
+ elif 225 <= octet <= 239: # Reserved.
+ return 8
+ return 32 # Default.
+
+ start = ''
+ tokens = []
+ prefix = None
+
+ if isinstance(abbrev_cidr, (str, unicode)):
+ if ':' in abbrev_cidr:
+ return abbrev_cidr
+ try:
+ # Single octet partial integer or string address.
+ i = int(abbrev_cidr)
+ tokens = [str(i), '0', '0', '0']
+ return "%s%s/%s" % (start, '.'.join(tokens), classful_prefix(i))
+
+ except ValueError:
+ # Multi octet partial string address with optional prefix.
+ part_addr = abbrev_cidr
+ tokens = []
+
+ if part_addr == '':
+ # Not a recognisable format.
+ return abbrev_cidr
+
+ if '/' in part_addr:
+ (part_addr, prefix) = part_addr.split('/', 1)
+
+ # Check prefix for validity.
+ if prefix is not None:
+ try:
+ if not 0 <= int(prefix) <= 32:
+ return abbrev_cidr
+ except ValueError:
+ return abbrev_cidr
+
+ if '.' in part_addr:
+ tokens = part_addr.split('.')
+ else:
+ tokens = [part_addr]
+
+ if 1 <= len(tokens) < 4:
+ for i in range(4 - len(tokens)):
+ tokens.append('0')
+ elif len(tokens) == 4:
+ if prefix is None:
+ # Non-partial addresses without a prefix.
+ prefix = 32
+ else:
+ # Not a recognisable format.
+ return abbrev_cidr
+
+ if prefix is None:
+ try:
+ prefix = classful_prefix(tokens[0])
+ except ValueError:
+ return abbrev_cidr
+
+ return "%s%s/%s" % (start, '.'.join(tokens), prefix)
+
+ except TypeError:
+ pass
+ except IndexError:
+ pass
+
+ # Not a recognisable format.
+ return abbrev_cidr
#-----------------------------------------------------------------------------
-def load_iana_info():
+def cidr_merge(ip_addrs):
"""
- Parse and load internal IANA data lookups with the latest information from
- data files.
+ A function that accepts an iterable sequence of IP addresses and subnets
+ returning the smallest possible list of the largest possible IP addresses
+ and subnets.
+
+ It does this by merging any adjacent subnets where possible and
+ removing any addresses or subnets contained within those found in the list
+ after any merges have taken place.
+
+ @param ip_addrs: an iterable sequence of IP addresses and subnets.
+
+ @return: a summarized list of IP objects.
"""
- PATH = _path.dirname(__file__)
+ if not hasattr(ip_addrs, '__iter__'):
+ raise ValueError('A sequence or iterable is expected!')
+
+ # Start off using set as we'll remove any duplicates at the start.
+ ipv4_bit_cidrs = set()
+ ipv6_bit_cidrs = set()
+
+ # Convert IP addresses and subnets into their CIDR bit strings.
+ for ip in ip_addrs:
+ cidr = IP(ip)
+ bits = cidr.network.bits(word_sep='')[0:cidr.prefixlen]
- ipv4 = IPv4Parser(open(_path.join(PATH, 'ipv4-address-space')))
- ipv4.attach(DictUpdater(IANA_INFO['IPv4'], 'IPv4', 'prefix'))
- ipv4.parse()
+ if cidr.version == 4:
+ ipv4_bit_cidrs.add(bits)
+ else:
+ ipv6_bit_cidrs.add(bits)
- ipv6 = IPv6Parser(open(_path.join(PATH, 'ipv6-address-space')))
- ipv6.attach(DictUpdater(IANA_INFO['IPv6'], 'IPv6', 'prefix'))
- ipv6.parse()
+ # Merge binary CIDR addresses where possible.
+ def _reduce_bit_cidrs(cidrs):
+ new_cidrs = []
- mcast = MulticastParser(open(_path.join(PATH, 'multicast-addresses')))
- mcast.attach(DictUpdater(IANA_INFO['multicast'], 'multicast', 'address'))
- mcast.parse()
+ cidrs.sort()
+
+ # Multiple passes are required to obtain precise results.
+ while 1:
+ finished = True
+ while len(cidrs) > 0:
+ if len(new_cidrs) == 0:
+ new_cidrs.append(cidrs.pop(0))
+ if len(cidrs) == 0:
+ break
+ # lhs and rhs are same size and adjacent.
+ (new_cidr, subs) = _re.subn(r'^([01]+)0 \1[1]$',
+ r'\1', '%s %s' % (new_cidrs[-1], cidrs[0]))
+ if subs:
+ # merge lhs with rhs.
+ new_cidrs[-1] = new_cidr
+ cidrs.pop(0)
+ finished = False
+ else:
+ # lhs contains rhs.
+ (new_cidr, subs) = _re.subn(r'^([01]+) \1[10]+$',
+ r'\1', '%s %s' % (new_cidrs[-1], cidrs[0]))
+ if subs:
+ # keep lhs, discard rhs.
+ new_cidrs[-1] = new_cidr
+ cidrs.pop(0)
+ finished = False
+ else:
+ # no matches - accept rhs.
+ new_cidrs.append(cidrs.pop(0))
+ if finished:
+ break
+ else:
+ # still seeing matches, reset.
+ cidrs = new_cidrs
+ new_cidrs = []
+
+ return new_cidrs
+
+ new_cidrs = []
+
+ def _bits_to_cidr(bits, module):
+ if _re.match('^[01]+$', bits) is None:
+ raise ValueError('%r is an invalid bit string!' % bits)
+
+ num_bits = len(bits)
+
+ if bits == '':
+ return IP(module.int_to_str(0), module.version)
+ else:
+ bits = bits + '0' * (module.width - num_bits)
+ ip = module.int_to_str(module.bits_to_int(bits))
+ return IP('%s/%d' % (ip, num_bits), module.version)
+
+ # Reduce and format lists of reduced CIDRs.
+ for bits in _reduce_bit_cidrs(list(ipv4_bit_cidrs)):
+ new_cidrs.append(_bits_to_cidr(bits, _ipv4))
+
+ for bits in _reduce_bit_cidrs(list(ipv6_bit_cidrs)):
+ new_cidrs.append(_bits_to_cidr(bits, _ipv6))
+
+ return new_cidrs
#-----------------------------------------------------------------------------
-def query(ip_addr):
+def cidr_exclude(target, exclude):
"""
- Returns informational data specific to this IP address.
+ Removes an exclude IP object from a target IP object.
+
+ @param target: the target IP object.
+
+ @param exclude: the IP object to be removed from target.
+
+ @return: list of remaining IP objects after exclusion has been performed.
"""
- info = {}
+ cidrs = []
+
+ target = IP(target)
+ exclude = IP(exclude)
+
+ if exclude.last < target.first:
+ # Exclude subnet's upper bound address less than target
+ # subnet's lower bound.
+ return [target.cidr]
+ elif target.last < exclude.first:
+ # Exclude subnet's lower bound address greater than target
+ # subnet's upper bound.
+ return [target.cidr]
+
+ new_prefixlen = target.prefixlen + 1
+
+ if new_prefixlen <= target._module.width:
+ i_lower = target.first
+ i_upper = target.first + (2 ** (target._module.width - new_prefixlen))
+
+ lower = IP('%s/%d' % (target._module.int_to_str(i_lower),
+ new_prefixlen))
+ upper = IP('%s/%d' % (target._module.int_to_str(i_upper),
+ new_prefixlen))
+
+ while exclude.prefixlen >= new_prefixlen:
+ if exclude in lower:
+ matched = i_lower
+ unmatched = i_upper
+ elif exclude in upper:
+ matched = i_upper
+ unmatched = i_lower
+ else:
+ # Exclude subnet not within target subnet.
+ cidrs.append(target.cidr)
+ break
- if ip_addr.addr_type == AT_INET:
- for cidr, record in IANA_INFO['IPv4'].items():
- if ip_addr in cidr:
- info.setdefault('IPv4', [])
- info['IPv4'].append(record)
+ ip = IP('%s/%d' % (target._module.int_to_str(unmatched),
+ new_prefixlen))
- if ip_addr.is_multicast():
- for iprange, record in IANA_INFO['multicast'].items():
- if ip_addr in iprange:
- info.setdefault('Multicast', [])
- info['Multicast'].append(record)
+ cidrs.append(ip)
- elif ip_addr.addr_type == AT_INET6:
- for cidr, record in IANA_INFO['IPv6'].items():
- if ip_addr in cidr:
- info.setdefault('IPv6', [])
- info['IPv6'].append(record)
+ new_prefixlen += 1
- return info
+ if new_prefixlen > target._module.width:
+ break
+
+ i_lower = matched
+ i_upper = matched + (2 ** (target._module.width - new_prefixlen))
+
+ lower = IP('%s/%d' % (target._module.int_to_str(i_lower),
+ new_prefixlen))
+ upper = IP('%s/%d' % (target._module.int_to_str(i_upper),
+ new_prefixlen))
+
+ cidrs.sort()
+
+ return cidrs
#-----------------------------------------------------------------------------
-def get_latest_files():
- """Download the latest files from IANA"""
- import urllib2
-
- urls = [
- 'http://www.iana.org/assignments/ipv4-address-space',
- 'http://www.iana.org/assignments/ipv6-address-space',
- 'http://www.iana.org/assignments/multicast-addresses',
- ]
-
- for url in urls:
- print 'downloading latest copy of %s' % url
- request = urllib2.Request(url)
- response = urllib2.urlopen(request)
- save_path = _path.dirname(__file__)
- basename = _os.path.basename(response.geturl().rstrip('/'))
- filename = _path.join(save_path, basename)
- fh = open(filename, 'wb')
- fh.write(response.read())
- fh.close()
+def spanning_cidr(ip_addrs):
+ """
+ Function that accepts a sequence of IP addresses and subnets returning
+ a single (CIDR) subnet that is large enough to span the lower and upper
+ bound IPs with a possible overlap on either end.
+
+ @param ip_addrs: sequence of IP addresses and subnets.
+
+ @return: a single spanning IP subnet.
+ """
+ sorted_ips = sorted([IP(ip) for ip in ip_addrs])
+
+ if not len(sorted_ips) > 1:
+ raise ValueError('IP sequence must contain at least 2 elements!')
+ lowest_ip = sorted_ips[0]
+ highest_ip = sorted_ips[-1]
+
+ if lowest_ip.version != highest_ip.version:
+ raise TypeError('IP sequence cannot contain both IPv4 and IPv6!')
+
+ ip = highest_ip.cidr
+
+ while ip.prefixlen > 0:
+ if highest_ip in ip and lowest_ip not in ip:
+ ip.prefixlen -= 1
+ else:
+ break
+
+ return ip.cidr
+
+#-----------------------------------------------------------------------------
+def iprange_to_cidrs(start, end):
+ """
+ A function that accepts an arbitrary start and end IP address or subnet
+ and returns a list of CIDR subnets that fit exactly between the boundaries
+ of the two with no overlap.
+
+ @param start: the start IP address or subnet.
+
+ @param end: the end IP address or subnet.
+
+ @return: a list of one or more IP addresses and subnets.
+ """
+ cidr_list = []
+
+ start = IP(start)
+ end = IP(end)
+
+ iprange = [start.first, end.last]
+
+ # Get spanning CIDR covering both addresses.
+ cidr_span = spanning_cidr([start, end])
+
+ if cidr_span.first == iprange[0] and cidr_span.last == iprange[-1]:
+ # Spanning CIDR matches start and end exactly.
+ cidr_list = [cidr_span]
+ elif cidr_span.last == iprange[-1]:
+ # Spanning CIDR matches end exactly.
+ ip = IP(start)
+ first_int_val = int(ip)
+ ip -= 1
+ cidr_remainder = cidr_exclude(cidr_span, ip)
+
+ first_found = False
+ for cidr in cidr_remainder:
+ if cidr.first == first_int_val:
+ first_found = True
+ if first_found:
+ cidr_list.append(cidr)
+ elif cidr_span.first == iprange[0]:
+ # Spanning CIDR matches start exactly.
+ ip = IP(end)
+ last_int_val = int(ip)
+ ip += 1
+ cidr_remainder = cidr_exclude(cidr_span, ip)
+
+ last_found = False
+ for cidr in cidr_remainder:
+ cidr_list.append(cidr)
+ if cidr.last == last_int_val:
+ break
+ elif cidr_span.first <= iprange[0] and cidr_span.last >= iprange[-1]:
+ # Spanning CIDR overlaps start and end.
+ ip = IP(start)
+ first_int_val = int(ip)
+ ip -= 1
+ cidr_remainder = cidr_exclude(cidr_span, ip)
+
+ # Fix start.
+ first_found = False
+ for cidr in cidr_remainder:
+ if cidr.first == first_int_val:
+ first_found = True
+ if first_found:
+ cidr_list.append(cidr)
+
+ # Fix end.
+ ip = IP(end)
+ last_int_val = int(ip)
+ ip += 1
+ cidr_remainder = cidr_exclude(cidr_list.pop(), ip)
+
+ last_found = False
+ for cidr in cidr_remainder:
+ cidr_list.append(cidr)
+ if cidr.last == last_int_val:
+ break
+
+ return cidr_list
+
+#-----------------------------------------------------------------------------
+def within_iprange(ip, start, end):
+ """
+ A function that accepts two arbitrary IP addresses that form a boundary
+ IP range and a target IP object. It checks to see if the IP object falls
+ within the boundary of start and end addresses.
+
+ @param ip: an IP object to be tested against IP range.
+
+ @param start: the start IP address or subnet.
+
+ @param end: the end IP address or subnet.
+
+ @return: True if ip falls with the bounds of iprange, False otherwise.
+ """
+ ip = IP(ip)
+ start = IP(start)
+ end = IP(end)
+
+ if start.last > end.first:
+ raise ValueError('bad IP range, start IP is greater than end IP!')
+
+ if start.first <= ip.value <= end.last:
+ return True
+
+ return False
#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- # Generate indices when module is executed as a script.
- get_latest_files()
+def cidr_gaps(cidrs, supernet=None):
+ """
+ A function that accepts a list of CIDR subnets and IP addresses detecting
+ and returning the gaps between each one.
+
+ @param cidrs: A sequence CIDR subnets or IP addresses.
-# On module import, read IANA data files and populate lookups dict.
-load_iana_info()
+ @param supernet: An optional supernet CIDR. If it contains all IPs and
+ CIDRs in cidrs suquence, it will return any gaps on either side as
+ well.
+
+ @return: A list of cidrs that fill the gaps between each CIDR subnet
+ and or IP address.
+ """
+ raise NotImplementedError('TODO')
diff --git a/netaddr/ip/iana.py b/netaddr/ip/iana.py
new file mode 100755
index 0000000..9521e91
--- /dev/null
+++ b/netaddr/ip/iana.py
@@ -0,0 +1,413 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+#
+# DISCLAIMER
+#
+# netaddr is not sponsored nor endorsed by IANA.
+#
+# Use of data from IANA (Internet Assigned Numbers Authority) is subject to
+# copyright and is provided with prior written permission.
+#
+# IANA data files included with netaddr are not modified in any way but are
+# parsed and made available to end users through an API.
+#
+# See README file and source code for URLs to latest copies of the relevant
+# files.
+#
+#-----------------------------------------------------------------------------
+"""
+Provides access to public network address information published by IANA.
+
+More details can be found at the following URLs :-
+
+ - IANA Home Page - U{http://www.iana.org/}
+ - IEEE Protocols Information Home Page - U{http://www.iana.org/protocols/}
+"""
+
+import os as _os
+import os.path as _path
+import re as _re
+
+from netaddr.core import Publisher, Subscriber, PrettyPrinter
+from netaddr.ip import IP, cidr_abbrev_to_verbose, within_iprange
+
+#-----------------------------------------------------------------------------
+
+#: Topic based lookup dictionary for IANA information.
+IANA_INFO = {
+ 'IPv4' : {},
+ 'IPv6' : {},
+ 'multicast' : {},
+}
+
+#-----------------------------------------------------------------------------
+class LineRecordParser(Publisher):
+ """
+ A configurable Parser that understands how to parse line based records.
+ """
+ def __init__(self, fh, **kwargs):
+ """
+ Constructor.
+
+ fh - a valid, open file handle to line based record data.
+ """
+ super(LineRecordParser, self).__init__()
+ self.fh = fh
+
+ self.__dict__.update(kwargs)
+
+ # Regex used to identify start of lines of interest.
+ if 're_start' not in self.__dict__:
+ self.re_start = r'^.*$'
+
+ # Regex used to identify line to be parsed within block of interest.
+ if 're_parse_line' not in self.__dict__:
+ self.re_parse_line = r'^.*$'
+
+ # Regex used to identify end of lines of interest.
+ if 're_stop' not in self.__dict__:
+ self.re_stop = r'^.*$'
+
+ # If enabled, skips blank lines after being stripped.
+ if 'skip_blank_lines' not in self.__dict__:
+ self.skip_blank_lines = False
+
+ def parse_line(self, line):
+ """
+ This is the callback method invoked for every line considered valid by
+ the line parser's settings. It is usually over-ridden by base classes
+ to provide specific line parsing and line skipping logic.
+
+ Any line can be vetoed (not passed to registered Subscriber objects)
+ by simply returning None.
+ """
+ return line
+
+ def parse(self):
+ """
+ Parse and normalises records, notifying registered subscribers with
+ record data as it is encountered.
+ """
+ record = None
+ section_start = False
+ section_end = False
+
+ for line in self.fh:
+ line = line.strip()
+
+ # Skip blank lines if required.
+ if self.skip_blank_lines and line == '':
+ continue
+
+ # Entered record section.
+ if not section_start and len(_re.findall(self.re_start, line)) > 0:
+ section_start = True
+
+ # Exited record section.
+ if section_start and len(_re.findall(self.re_stop, line)) > 0:
+ section_end = True
+
+ # Stop parsing.
+ if section_end:
+ break
+
+ # Is this a line of interest?
+ if section_start and len(_re.findall(self.re_parse_line, line)) == 0:
+ continue
+
+ if section_start:
+ record = self.parse_line(line)
+
+ # notify subscribers of final record details.
+ self.notify(record)
+
+#-----------------------------------------------------------------------------
+class IPv4Parser(LineRecordParser):
+ """
+ A LineRecordParser that understands how to parse and retrieve data records
+ from the IANA IPv4 address space file.
+
+ It can be found online here :-
+
+ - U{http://www.iana.org/assignments/ipv4-address-space}
+ """
+ def __init__(self, fh, **kwargs):
+ """
+ Constructor.
+
+ fh - a valid, open file handle to an OUI Registry data file.
+
+ kwargs - additional parser options.
+
+ """
+ super(IPv4Parser, self).__init__(fh,
+ re_start=r'^Prefix',
+ re_parse_line=r'^\d{3}\/\d',
+ re_stop=r'^Notes\s*$',
+ skip_blank_lines=True,
+ )
+
+ self.record_widths = (
+ ('prefix', 0, 8),
+ ('designation', 8, 49),
+ ('date', 57, 10),
+ ('whois', 67, 20),
+ ('status', 87, 19),
+ )
+
+ def parse_line(self, line):
+ """
+ Callback method invoked for every line considered valid by the line
+ parser's settings.
+
+ See base class method for more details.
+ """
+ record = {}
+ for (key, start, width) in self.record_widths:
+ value = line[start:start+width]
+ record[key] = value.strip()
+
+ # Strip leading zeros from octet.
+ if '/' in record['prefix']:
+ (octet, prefix) = record['prefix'].split('/')
+ record['prefix'] = "%d/%d" % (int(octet), int(prefix))
+
+ record['status'] = record['status'].capitalize()
+
+ return record
+
+#-----------------------------------------------------------------------------
+class IPv6Parser(LineRecordParser):
+ """
+ A LineRecordParser that understands how to parse and retrieve data records
+ from the IANA IPv6 address space file.
+
+ It can be found online here :-
+
+ - U{http://www.iana.org/assignments/ipv6-address-space}
+ """
+ def __init__(self, fh, **kwargs):
+ """
+ Constructor.
+
+ fh - a valid, open file handle to an OUI Registry data file.
+
+ kwargs - additional parser options.
+
+ """
+ super(IPv6Parser, self).__init__(fh,
+ re_start=r'^IPv6 Prefix',
+ re_parse_line=r'^[A-F0-9]+::\/\d+',
+ re_stop=r'^Notes:\s*$',
+ skip_blank_lines=True)
+
+ self.record_widths = (
+ ('prefix', 0, 22),
+ ('allocation', 22, 24),
+ ('reference', 46, 15))
+
+ def parse_line(self, line):
+ """
+ Callback method invoked for every line considered valid by the line
+ parser's settings.
+
+ See base class method for more details.
+ """
+ record = {}
+ for (key, start, width) in self.record_widths:
+ value = line[start:start+width]
+ record[key] = value.strip()
+
+ # Remove square brackets from reference field.
+ record[key] = record[key].lstrip('[')
+ record[key] = record[key].rstrip(']')
+ return record
+
+#-----------------------------------------------------------------------------
+class MulticastParser(LineRecordParser):
+ """
+ A LineParser that knows how to process the IANA IPv4 multicast address
+ allocation file.
+
+ It can be found online here :-
+
+ - U{http://www.iana.org/assignments/multicast-addresses}
+ """
+ def __init__(self, fh, **kwargs):
+ """
+ Constructor.
+
+ fh - a valid, open file handle to an OUI Registry data file.
+
+ kwargs - additional parser options.
+
+ """
+ super(MulticastParser, self).__init__(fh,
+ re_start=r'^Registry:',
+ re_parse_line=r'^\d+\.\d+\.\d+\.\d+',
+ re_stop=r'^Relative',
+ skip_blank_lines=True)
+
+ def normalise_addr(self, addr):
+ """
+ Removes variations from address entries found in this particular file.
+ """
+ if '-' in addr:
+ (a1, a2) = addr.split('-')
+ o1 = a1.strip().split('.')
+ o2 = a2.strip().split('.')
+ return "%s-%s" % ('.'.join([str(int(i)) for i in o1]),
+ '.'.join([str(int(i)) for i in o2]))
+ else:
+ o1 = addr.strip().split('.')
+ return '.'.join([str(int(i)) for i in o1])
+
+ def parse_line(self, line):
+ """
+ Callback method invoked for every line considered valid by the line
+ parser's settings.
+
+ See base class method for more details.
+ """
+ index = line.find('[')
+ if index != -1:
+ line = line[0:index].strip()
+ (addr, descr) = [i.strip() for i in _re.findall(
+ r'^([\d.]+(?:\s*-\s*[\d.]+)?)\s+(.+)$', line)[0]]
+ addr = self.normalise_addr(addr)
+ descr = ' '.join(descr.split())
+ descr = descr.replace('Date registered' , '').rstrip()
+
+ return dict(address=addr, descr=descr)
+
+#-----------------------------------------------------------------------------
+class DictUpdater(Subscriber):
+ """
+ Concrete Subscriber that inserts records received from a Publisher into a
+ dictionary.
+ """
+ def __init__(self, dct, topic, unique_key):
+ """
+ Constructor.
+
+ dct - lookup dict or dict like object to insert records into.
+
+ topic - high-level category name of data to be processed.
+
+ unique_key - key name in data dict that uniquely identifies it.
+ """
+ self.dct = dct
+ self.topic = topic
+ self.unique_key = unique_key
+
+ def update(self, data):
+ """
+ Callback function used by Publisher to notify this Subscriber about
+ an update. Stores topic based information into dictionary passed to
+ constructor.
+ """
+ data_id = data[self.unique_key]
+
+ if self.topic == 'IPv4':
+ cidr = IP(cidr_abbrev_to_verbose(data_id))
+ self.dct[cidr] = data
+ elif self.topic == 'IPv6':
+ cidr = IP(cidr_abbrev_to_verbose(data_id))
+ self.dct[cidr] = data
+ elif self.topic == 'multicast':
+ iprange = None
+ if '-' in data_id:
+ (first, last) = data_id.split('-')
+ iprange = (IP(cidr_abbrev_to_verbose(first)),
+ IP(cidr_abbrev_to_verbose(last)))
+ else:
+ iprange = IP(cidr_abbrev_to_verbose(data_id))
+ self.dct[iprange] = data
+
+#-----------------------------------------------------------------------------
+def load_iana_info():
+ """
+ Parse and load internal IANA data lookups with the latest information from
+ data files.
+ """
+ PATH = _path.dirname(__file__)
+
+ ipv4 = IPv4Parser(open(_path.join(PATH, 'ipv4-address-space')))
+ ipv4.attach(DictUpdater(IANA_INFO['IPv4'], 'IPv4', 'prefix'))
+ ipv4.parse()
+
+ ipv6 = IPv6Parser(open(_path.join(PATH, 'ipv6-address-space')))
+ ipv6.attach(DictUpdater(IANA_INFO['IPv6'], 'IPv6', 'prefix'))
+ ipv6.parse()
+
+ mcast = MulticastParser(open(_path.join(PATH, 'multicast-addresses')))
+ mcast.attach(DictUpdater(IANA_INFO['multicast'], 'multicast', 'address'))
+ mcast.parse()
+
+#-----------------------------------------------------------------------------
+def query(ip_addr):
+ """
+ Returns informational data specific to this IP address.
+ """
+ info = {}
+
+ def within_bounds(ip, ip_range):
+ if hasattr(ip_range, 'value'):
+ return ip in ip_range
+ else:
+ return within_iprange(ip, ip_range[0], ip_range[-1])
+
+ if ip_addr.version == 4:
+ for cidr, record in IANA_INFO['IPv4'].items():
+ if within_bounds(ip_addr, cidr):
+ info.setdefault('IPv4', [])
+ info['IPv4'].append(record)
+
+ if ip_addr.is_multicast():
+ for iprange, record in IANA_INFO['multicast'].items():
+ if within_bounds(ip_addr, iprange):
+ info.setdefault('Multicast', [])
+ info['Multicast'].append(record)
+
+ elif ip_addr.version == 6:
+ for cidr, record in IANA_INFO['IPv6'].items():
+ if within_bounds(ip_addr, cidr):
+ info.setdefault('IPv6', [])
+ info['IPv6'].append(record)
+
+ return info
+
+#-----------------------------------------------------------------------------
+def get_latest_files():
+ """Download the latest files from IANA"""
+ import urllib2
+
+ urls = [
+ 'http://www.iana.org/assignments/ipv4-address-space',
+ 'http://www.iana.org/assignments/ipv6-address-space',
+ 'http://www.iana.org/assignments/multicast-addresses',
+ ]
+
+ for url in urls:
+ print 'downloading latest copy of %s' % url
+ request = urllib2.Request(url)
+ response = urllib2.urlopen(request)
+ save_path = _path.dirname(__file__)
+ basename = _os.path.basename(response.geturl().rstrip('/'))
+ filename = _path.join(save_path, basename)
+ fh = open(filename, 'wb')
+ fh.write(response.read())
+ fh.close()
+
+
+#-----------------------------------------------------------------------------
+if __name__ == '__main__':
+ # Generate indices when module is executed as a script.
+ get_latest_files()
+
+# On module import, read IANA data files and populate lookups dict.
+load_iana_info()
diff --git a/netaddr/ipglob.py b/netaddr/ipglob.py
new file mode 100644
index 0000000..017e271
--- /dev/null
+++ b/netaddr/ipglob.py
@@ -0,0 +1,223 @@
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+Utility functions for dealing with wildcard or glob-style IP address ranges.
+
+Individual octets can be represented using the following shortcuts :
+
+ 1. C{*} - the asterisk octet (represents values 0 through 255)
+ 2. C{'x-y'} - the hyphenated octet (represents values x through y)
+
+A few basic rules also apply :
+
+ 1. x must always be greater than y, therefore :
+
+ - x can only be 0 through 254
+ - y can only be 1 through 255
+
+ 2. only one hyphenated octet per IP glob is allowed
+ 3. only asterisks are permitted after a hyphenated octet
+
+Example IP globs ::
+
+ '192.0.2.1' # a single address
+ '192.0.2.0-31' # 32 addresses
+ '192.0.2.*' # 256 addresses
+ '192.0.2-3.*' # 512 addresses
+ '192.0-1.*.*' # 131,072 addresses
+ '*.*.*.*' # the whole IPv4 address space
+
+Aside
+=====
+ I{IP glob ranges are not directly equivalent to CIDR blocks. They can
+ represent address ranges that do not fall on strict bit mask boundaries.
+ They are suitable for use in configuration files, being more obvious and
+ readable than their CIDR counterparts, especially for admins and end users
+ with little or no networking knowledge or experience.}
+
+ I{All CIDR addresses can always be represented as IP globs but the reverse
+ is not always true.}
+"""
+
+from netaddr.core import AddrFormatError, AddrConversionError
+from netaddr.ip import IP, iprange_to_cidrs
+
+#-----------------------------------------------------------------------------
+def valid_glob(ipglob):
+ """
+ @param ipglob: An IP address range in a glob-style format.
+
+ @return: C{True} if IP range glob is valid, C{False} otherwise.
+ """
+ #TODO: Add support for abbreviated ipglobs.
+ #TODO: e.g. 192.0.*.* == 192.0.*
+ #TODO: *.*.*.* == *
+ #TODO: Add strict flag to enable verbose ipglob checking.
+ if not hasattr(ipglob, 'split'):
+ return False
+
+ seen_hyphen = False
+ seen_asterisk = False
+
+ octets = ipglob.split('.')
+
+ if len(octets) != 4:
+ return False
+
+ for octet in octets:
+ if '-' in octet:
+ if seen_hyphen:
+ return False
+ seen_hyphen = True
+ if seen_asterisk:
+ # Asterisks cannot precede hyphenated octets.
+ return False
+ (octet1, octet2) = [int(i) for i in octet.split('-')]
+ if octet1 >= octet2:
+ return False
+ if not 0 <= octet1 <= 254:
+ return False
+ if not 1 <= octet2 <= 255:
+ return False
+ elif octet == '*':
+ seen_asterisk = True
+ else:
+ if seen_hyphen is True:
+ return False
+ if seen_asterisk is True:
+ return False
+ if not 0 <= int(octet) <= 255:
+ return False
+
+ return True
+
+#-----------------------------------------------------------------------------
+def glob_to_iprange(ipglob):
+ """
+ A function that accepts a glob-style IP range and returns the component
+ lower and upper bound IP address.
+
+ @param ipglob: an IP address range in a glob-style format.
+
+ @return: a tuple contain lower and upper bound IP objects.
+ """
+ if not valid_glob(ipglob):
+ raise AddrFormatError('not a recognised IP glob range: %r!' % ipglob)
+
+ start_tokens = []
+ end_tokens = []
+
+ for octet in ipglob.split('.'):
+ if '-' in octet:
+ tokens = octet.split('-')
+ start_tokens.append(tokens[0])
+ end_tokens.append(tokens[1])
+ elif octet == '*':
+ start_tokens.append('0')
+ end_tokens.append('255')
+ else:
+ start_tokens.append(octet)
+ end_tokens.append(octet)
+
+ return IP('.'.join(start_tokens)), IP('.'.join(end_tokens))
+
+#-----------------------------------------------------------------------------
+def iprange_to_globs(start, end):
+ """
+ A function that accepts an arbitrary start and end IP address or subnet
+ and returns one or more glob-style IP ranges.
+
+ @param start: the start IP address or subnet.
+
+ @param end: the end IP address or subnet.
+
+ @return: a list containing one or more IP globs.
+ """
+ start = IP(start)
+ end = IP(end)
+
+ if start.version != 4 and end.version != 4:
+ raise AddrConversionError('IP glob ranges only support IPv4!')
+
+ def _iprange_to_glob(lb, ub):
+ # Internal function to process individual IP globs.
+ t1 = [int(_) for _ in str(lb).split('.')]
+ t2 = [int(_) for _ in str(ub).split('.')]
+
+ tokens = []
+
+ seen_hyphen = False
+ seen_asterisk = False
+
+ for i in range(4):
+ if t1[i] == t2[i]:
+ # A normal octet.
+ tokens.append(str(t1[i]))
+ elif (t1[i] == 0) and (t2[i] == 255):
+ # An asterisk octet.
+ tokens.append('*')
+ seen_asterisk = True
+ else:
+ # Create a hyphenated octet - only one allowed per IP glob.
+ if not seen_asterisk:
+ if not seen_hyphen:
+ tokens.append('%s-%s' % (t1[i], t2[i]))
+ seen_hyphen = True
+ else:
+ raise AddrConversionError('only 1 hyphenated octet' \
+ ' per IP glob allowed!')
+ else:
+ raise AddrConversionError("asterisks are not allowed' \
+ ' before hyphenated octets!")
+
+ return '.'.join(tokens)
+
+ globs = []
+
+ try:
+ # IP range can be represented by a single glob.
+ ipglob = _iprange_to_glob(start, end)
+ globs.append(ipglob)
+ except AddrConversionError:
+ # Break IP range up into CIDRs before conversion to globs.
+ #
+ #TODO: this is still not completely optimised but is good enough
+ #TODO: for the moment.
+ #
+ for cidr in iprange_to_cidrs(start, end):
+ ipglob = _iprange_to_glob(cidr[0], cidr[-1])
+ globs.append(ipglob)
+
+ return globs
+
+#-----------------------------------------------------------------------------
+def glob_to_cidrs(ipglob):
+ """
+ A function that accepts a glob-style IP range and returns a list of one or more IP CIDRs that exactly matches it.
+
+ @param ipglob: an IP address range in a glob-style format.
+
+ @return: a list of one or more IP objects.
+ """
+ return iprange_to_cidrs(*glob_to_iprange(ipglob))
+
+#-----------------------------------------------------------------------------
+def cidr_to_glob(cidr):
+ """
+ A function that accepts an IP subnet in a glob-style format and returns
+ a list of CIDR subnets that exactly matches the specified glob.
+
+ @param cidr: an IP object CIDR subnet.
+
+ @return: a list of one or more IP addresses and subnets.
+ """
+ ip = IP(cidr)
+ globs = iprange_to_globs(ip[0], ip[-1])
+ if len(globs) != 1:
+ # There should only ever be a one to one mapping between a CIDR and
+ # an IP glob range.
+ raise AddrConversionError('bad CIDR to IP glob conversion!')
+ return globs[0]
diff --git a/netaddr/misc.py b/netaddr/misc.py
deleted file mode 100755
index 51d5d7c..0000000
--- a/netaddr/misc.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-Miscellaneous functions and classes. Do not rely on anything in here as it is
-liable to change, move or be deleted with each release.
-"""
-import pprint
-
-from netaddr import CIDR, IPGlob
-
-#-----------------------------------------------------------------------------
-def ipv4_cidr_prefixes():
- """
- Returns a recordset (list of dicts) of host/network breakdown for IPv4
- using all of the various CIDR prefixes.
- """
- table = []
- prefix = 32
- while prefix >= 0:
- cidr = CIDR('0.0.0.0/%d' % prefix)
- table.append(dict(prefix=str(cidr), hosts=cidr.size(),
- networks=2 ** cidr.prefixlen))
- prefix -= 1
- return table
-
-#-----------------------------------------------------------------------------
-def ipv6_cidr_prefixes():
- """
- Returns a recordset (list of dicts) of host/network breakdown for IPv6
- using all of the various CIDR prefixes.
- """
- table = []
- prefix = 128
- while prefix >= 0:
- cidr = CIDR('::/%d' % prefix)
- table.append(dict(prefix=str(cidr), hosts=cidr.size(),
- networks=2 ** cidr.prefixlen))
- prefix -= 1
- return table
-
-#-----------------------------------------------------------------------------
-def print_ipv4_cidr_prefixes():
- """
- Prints a table to stdout of host/network breakdown for IPv4 using CIDR
- notation.
- """
- print '%-10s %-15s %-15s' % ('Prefix', 'Hosts', 'Networks')
- print '-'*10, '-'*15, '-'*15
- for record in ipv4_cidr_prefixes():
- print '%(prefix)-10s %(hosts)15s %(networks)15s' % record
-
-#-----------------------------------------------------------------------------
-def print_ipv6_cidr_prefixes():
- """
- Prints a table to stdout of host/network breakdown for IPv6 using CIDR
- notation.
- """
- print '%-10s %-40s %-40s' % ('Prefix', 'Hosts', 'Networks')
- print '-'*10, '-'*40, '-'*40
- for record in ipv6_cidr_prefixes():
- print '%(prefix)-10s %(hosts)40s %(networks)40s' % record
-
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- import pprint
- #pprint.pprint(ipv4_cidr_prefixes())
- print_ipv4_cidr_prefixes()
- #pprint.pprint(ipv6_cidr_prefixes())
- print_ipv6_cidr_prefixes()
-
diff --git a/netaddr/strategy.py b/netaddr/strategy.py
deleted file mode 100755
index cdaa348..0000000
--- a/netaddr/strategy.py
+++ /dev/null
@@ -1,845 +0,0 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-network address conversion logic, constants and shared strategy objects.
-"""
-import struct as _struct
-import re as _re
-from netaddr.util import BYTES_TO_BITS as _BYTES_TO_BITS
-
-# Check whether we need to use fallback code or not.
-try:
- import socket as _socket
- # Check for a common bug on Windows and some other socket modules.
- _socket.inet_aton('255.255.255.255')
- from socket import inet_aton as _inet_aton, \
- inet_ntoa as _inet_ntoa, \
- AF_INET as _AF_INET
-except:
- from netaddr.fallback import inet_aton as _inet_aton, \
- inet_ntoa as _inet_ntoa, \
- AF_INET as _AF_INET
-try:
- import socket as _socket
- # These might all generate exceptions on different platforms.
- if not _socket.has_ipv6:
- raise Exception('IPv6 disabled')
- _socket.inet_pton
- _socket.AF_INET6
- from socket import inet_pton as _inet_pton, \
- inet_ntop as _inet_ntop, \
- AF_INET6 as _AF_INET6
-except:
- from netaddr.fallback import inet_pton as _inet_pton, \
- inet_ntop as _inet_ntop, \
- AF_INET6 as _AF_INET6
-
-from netaddr import BIG_ENDIAN_PLATFORM, AT_UNSPEC, AT_INET, AT_INET6, \
- AT_LINK, AT_EUI64, AT_NAMES, AddrFormatError
-
-#-----------------------------------------------------------------------------
-class AddrStrategy(object):
- """Basic support for common operations performed on each address type"""
-
- #: Lookup table for struct module format strings.
- STRUCT_FORMATS = {
- 8 : 'B', # unsigned char
- 16 : 'H', # unsigned short
- 32 : 'I', # unsigned int
- }
-
- def __init__(self, width, word_size, word_sep, word_fmt='%x',
- addr_type=AT_UNSPEC, word_base=16):
- """
- Constructor.
-
- @param width: size of address in bits.
- (e.g. 32 - IPv4, 48 - MAC, 128 - IPv6)
-
- @param word_size: size of each word.
- (e.g. 8 - octets, 16 - hextets)
-
- @param word_sep: separator between each word.
- (e.g. '.' - IPv4, ':' - IPv6, '-' - EUI-48)
-
- @param word_fmt: format string for each word.
- (Default: '%x')
-
- @param addr_type: address type.
- (Default: AT_UNSPEC)
-
- @param word_base: number base used to convert each word using int().
- (Default: 16)
- """
-
- self.width = width
- self.max_int = 2 ** width - 1
- self.word_size = word_size
- self.num_words = width / word_size
- self.max_word = 2 ** word_size - 1
- self.word_sep = word_sep
- self.word_fmt = word_fmt
- self.word_base = word_base
- self.addr_type = addr_type
-
- try:
- self.name = AT_NAMES[addr_type]
- except KeyError:
- self.name = AT_NAMES[AT_UNSPEC]
-
- def __repr__(self):
- """@return: executable Python string to recreate equivalent object"""
- return "%s(%r, %r, %r, %r, %r, %r)" % (self.__class__.__name__,
- self.width, self.word_size, self.word_sep, self.addr_type,
- self.word_base)
-
- #-------------------------------------------------------------------------
- # Binary methods.
- #-------------------------------------------------------------------------
-
- def valid_bits(self, bits):
- """
- @param bits: A network address in readable binary form.
-
- @return: C{True} if network address is valid for this address type,
- C{False} otherwise.
- """
- if not isinstance(bits, (str, unicode)):
- return False
-
- bits = bits.replace(self.word_sep, '')
-
- if len(bits) != self.width:
- return False
-
- try:
- if 0 <= int(bits, 2) <= self.max_int:
- return True
- except ValueError:
- return False
- return False
-
- def bits_to_int(self, bits):
- """
- @param bits: A network address in readable binary form.
-
- @return: An unsigned integer that is equivalent to value represented
- by network address in readable binary form.
- """
- if not self.valid_bits(bits):
- raise ValueError('%r is not a valid binary form string for ' \
- 'address type!' % bits)
-
- return int(bits.replace(self.word_sep, ''), 2)
-
- #-------------------------------------------------------------------------
- # Integer methods.
- #-------------------------------------------------------------------------
-
- def valid_int(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: C{True} if integer falls within the boundaries of this
- address type, C{False} otherwise.
- """
- if not isinstance(int_val, (int, long)):
- return False
-
- return 0 <= int_val <= self.max_int
-
- def int_to_str(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: A network address in string form that is equivalent to value
- represented by an unsigned integer.
- """
- words = self.int_to_words(int_val)
- tokens = [self.word_fmt % i for i in words]
- addr = self.word_sep.join(tokens)
-
- return addr
-
- def int_to_bits(self, int_val, word_sep=None):
- """
- @param int_val: An unsigned integer.
-
- @param word_sep: (optional) the separator to insert between words.
- Default: None - use default separator for address type.
-
- @return: A network address in readable binary form that is equivalent
- to value represented by an unsigned integer.
- """
- bit_words = []
-
- for word in self.int_to_words(int_val):
- bits = []
- while word:
- bits.append(_BYTES_TO_BITS[word&255])
- word >>= 8
- bits.reverse()
- bit_str = ''.join(bits) or '0'*self.word_size
- bits = ('0'*self.word_size+bit_str)[-self.word_size:]
- bit_words.append(bits)
-
- if word_sep is not None:
- # Custom separator.
- if not hasattr(word_sep, 'join'):
- raise ValueError('Word separator must be a string!')
- return word_sep.join(bit_words)
-
- # Default separator.
- return self.word_sep.join(bit_words)
-
- def int_to_bin(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: A network address in standard binary representation format
- that is equivalent to integer address value. Essentially a back
- port of the bin() builtin in Python 2.6.x and higher.
- """
- bit_words = []
-
- for word in self.int_to_words(int_val):
- bits = []
- while word:
- bits.append(_BYTES_TO_BITS[word&255])
- word >>= 8
- bits.reverse()
- bit_str = ''.join(bits) or '0'*self.word_size
- bits = ('0'*self.word_size+bit_str)[-self.word_size:]
- bit_words.append(bits)
-
- return '0b' + ''.join(bit_words)
-
- def int_to_words(self, int_val, num_words=None, word_size=None):
- """
- @param int_val: An unsigned integer to be divided up into words.
-
- @param num_words: (optional) number of words expected in return value
- tuple. Uses address type default if not specified.
-
- @param word_size: (optional) size/width of individual words (in bits).
- Uses address type default if not specified.
- """
- if not self.valid_int(int_val):
- raise IndexError('integer %r is out of bounds!' % hex(int_val))
-
- # Set defaults for optional args.
- if num_words is None:
- num_words = self.num_words
- if word_size is None:
- word_size = self.word_size
-
- max_word_size = 2 ** word_size - 1
-
- words = []
- for _ in range(num_words):
- word = int_val & max_word_size
- words.append(int(word))
- int_val >>= word_size
-
- return tuple(reversed(words))
-
- def int_to_packed(self, int_val):
- """
- @param int_val: the integer to be packed.
-
- @return: a packed string that is equivalent to value represented by an
- unsigned integer.
- """
-
- words = self.int_to_words(int_val, self.num_words, self.word_size)
-
- try:
- fmt = '>%d%s' % (self.num_words, AddrStrategy.STRUCT_FORMATS[
- self.word_size])
- except KeyError:
- raise ValueError('unsupported word size: %d!' % self.word_size)
-
- return _struct.pack(fmt, *words)
-
-
- #-------------------------------------------------------------------------
- # Packed string methods.
- #-------------------------------------------------------------------------
-
- def packed_to_int(self, packed_int):
- """
- @param packed_int: a packed string containing an unsigned integer.
- It is assumed that the string is packed in network byte order.
-
- @return: An unsigned integer equivalent to value of network address
- represented by packed binary string.
- """
- try:
- fmt = '>%d%s' % (self.num_words, AddrStrategy.STRUCT_FORMATS[
- self.word_size])
- except KeyError:
- raise ValueError('unsupported word size: %d!' % self.word_size)
-
- words = list(_struct.unpack(fmt, packed_int))
-
- int_val = 0
- for i, num in enumerate(reversed(words)):
- word = num
- word = word << self.word_size * i
- int_val = int_val | word
-
- return int_val
-
- #-------------------------------------------------------------------------
- # String methods.
- #-------------------------------------------------------------------------
-
- def valid_str(self, addr):
- """
- @param addr: A network address in string form.
-
- @return: C{True} if network address in string form is valid for this
- address type, C{False} otherwise.
- """
- if not isinstance(addr, (str, unicode)):
- return False
-
- tokens = addr.split(self.word_sep)
- if len(tokens) != self.num_words:
- return False
-
- try:
- for token in tokens:
- if not 0 <= int(token, self.word_base) <= \
- self.max_word:
- return False
- except TypeError:
- return False
- except ValueError:
- return False
- return True
-
- def str_to_int(self, addr):
- """
- @param addr: A network address in string form.
-
- @return: An unsigned integer equivalent to value represented by network
- address in string form.
- """
- if not self.valid_str(addr):
- raise ValueError('%r is not a recognised string representation' \
- ' of this address type!' % addr)
-
- tokens = addr.split(self.word_sep)
- words = [ int(token, self.word_base) for token in tokens ]
-
- return self.words_to_int(words)
-
- #-------------------------------------------------------------------------
- # Word list methods.
- #-------------------------------------------------------------------------
-
- def valid_words(self, words):
- """
- @param words: A sequence containing integer word values.
-
- @return: C{True} if word sequence is valid for this address type,
- C{False} otherwise.
- """
- if not hasattr(words, '__iter__'):
- return False
-
- if len(words) != self.num_words:
- return False
-
- for i in words:
- if not isinstance(i, (int, long)):
- return False
-
- if not 0 <= i <= self.max_word:
- return False
- return True
-
- def words_to_int(self, words):
- """
- @param words: A list or tuple containing integer word values.
-
- @return: An unsigned integer that is equivalent to value represented
- by word sequence.
- """
- if not self.valid_words(words):
- raise ValueError('%r is not a valid word list!' % words)
-
- int_val = 0
- for i, num in enumerate(reversed(words)):
- word = num
- word = word << self.word_size * i
- int_val = int_val | word
-
- return int_val
-
-#-----------------------------------------------------------------------------
-class IPv4Strategy(AddrStrategy):
- """An L{AddrStrategy} for IPv4 address processing."""
- def __init__(self):
- """Constructor."""
- super(IPv4Strategy, self).__init__(width=32, word_size=8,
- word_fmt='%d', word_sep='.', addr_type=AT_INET, word_base=10)
-
- def valid_str(self, addr):
- """
- @param addr: An IP address in presentation (string) format.
-
- @return: C{True} if network address in string form is valid for this
- address type, C{False} otherwise.
- """
- if addr == '':
- raise AddrFormatError('Empty strings are not supported!')
-
- try:
- _inet_aton(addr)
- except:
- return False
- return True
-
- def str_to_int(self, addr):
- """
- @param addr: An IPv4 dotted decimal address in string form.
-
- @return: An unsigned integer that is equivalent to value represented
- by the IPv4 dotted decimal address string.
- """
- if addr == '':
- raise AddrFormatError('Empty strings are not supported!')
- try:
- return _struct.unpack('>I', _inet_aton(addr))[0]
- except:
- raise AddrFormatError('%r is not a valid IPv4 address string!' \
- % addr)
-
- def int_to_str(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: An IPv4 dotted decimal address string that is equivalent to
- value represented by a 32 bit unsigned integer.
- """
- if self.valid_int(int_val):
- return _inet_ntoa(_struct.pack('>I', int_val))
- else:
- raise ValueError('%r is not a valid 32-bit unsigned integer!' \
- % int_val)
-
- def int_to_words(self, int_val, num_words=None, word_size=None):
- """
- @param int_val: An unsigned integer.
-
- @param num_words: (unused) *** interface compatibility only ***
-
- @param word_size: (unused) *** interface compatibility only ***
-
- @return: An integer word (octet) sequence that is equivalent to value
- represented by an unsigned integer.
- """
- if not self.valid_int(int_val):
- raise ValueError('%r is not a valid integer value supported ' \
- 'by this address type!' % int_val)
- return _struct.unpack('4B', _struct.pack('>I', int_val))
-
- def words_to_int(self, octets):
- """
- @param octets: A list or tuple containing integer octets.
-
- @return: An unsigned integer that is equivalent to value represented
- by word (octet) sequence.
- """
- if not self.valid_words(octets):
- raise ValueError('%r is not a valid octet list for an IPv4 ' \
- 'address!' % octets)
- return _struct.unpack('>I', _struct.pack('4B', *octets))[0]
-
- def int_to_arpa(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: The reverse DNS lookup for an IPv4 address in network byte
- order integer form.
- """
- words = ["%d" % i for i in self.int_to_words(int_val)]
- words.reverse()
- words.extend(['in-addr', 'arpa', ''])
- return '.'.join(words)
-
-#-----------------------------------------------------------------------------
-class IPv6Strategy(AddrStrategy):
- """
- An L{AddrStrategy} for IPv6 address processing.
-
- Implements the operations that can be performed on an IPv6 network address
- in accordance with RFC 4291.
- """
- def __init__(self):
- """Constructor."""
- super(IPv6Strategy, self).__init__(addr_type=AT_INET6,
- width=128, word_size=16, word_fmt='%x', word_sep=':')
-
- def valid_str(self, addr):
- """
- @param addr: An IPv6 address in string form.
-
- @return: C{True} if IPv6 network address string is valid, C{False}
- otherwise.
- """
- if addr == '':
- raise AddrFormatError('Empty strings are not supported!')
-
- try:
- _inet_pton(_AF_INET6, addr)
- except _socket.error:
- return False
- except TypeError:
- return False
- except ValueError:
- return False
- return True
-
- def str_to_int(self, addr):
- """
- @param addr: An IPv6 address in string form.
-
- @return: The equivalent unsigned integer for a given IPv6 address.
- """
- if addr == '':
- raise AddrFormatError('Empty strings are not supported!')
- try:
- packed_int = _inet_pton(_AF_INET6, addr)
- return self.packed_to_int(packed_int)
- except Exception, e:
- raise AddrFormatError('%r is not a valid IPv6 address string!' \
- % addr)
-
- def int_to_str(self, int_val, compact=True, word_fmt=None):
- """
- @param int_val: An unsigned integer.
-
- @param compact: (optional) A boolean flag indicating if compact
- formatting should be used. If True, this method uses the '::'
- string to represent the first adjacent group of words with a value
- of zero. Default: True
-
- @param word_fmt: (optional) The Python format string used to override
- formatting for each word. Only applies when compact is False.
-
- @return: The IPv6 string form equal to the unsigned integer provided.
- """
- try:
- packed_int = self.int_to_packed(int_val)
- if compact:
- # Default return value.
- return _inet_ntop(_AF_INET6, packed_int)
- else:
- # Custom return value.
- if word_fmt is None:
- word_fmt = self.word_fmt
- words = list(_struct.unpack('>8H', packed_int))
- tokens = [word_fmt % word for word in words]
- return self.word_sep.join(tokens)
- except Exception, e:
- raise ValueError('%r is not a valid 128-bit unsigned integer!' \
- % int_val)
-
- def int_to_packed(self, int_val):
- """
- @param int_val: the integer to be packed.
-
- @return: a packed string that is equivalent to value represented by an
- unsigned integer (in network byte order).
- """
- # Here we've over-ridden the normal values to get the fastest
- # possible conversion speeds. Still quite slow versus IPv4 speed ups.
- num_words = 4
- word_size = 32
-
- words = self.int_to_words(int_val, num_words, word_size)
-
- try:
- fmt = '>%d%s'% (num_words, AddrStrategy.STRUCT_FORMATS[word_size])
- except KeyError:
- raise ValueError('unsupported word size: %d!' % word_size)
-
- return _struct.pack(fmt, *words)
-
- def packed_to_int(self, packed_int):
- """
- @param packed_int: a packed string containing an unsigned integer.
- It is assumed that string is packed in network byte order.
-
- @return: An unsigned integer that is equivalent to value of network
- address represented by packed binary string.
- """
- # Here we've over-ridden the normal values to get the fastest
- # conversion speeds. Still quite slow versus IPv4 speed ups.
- num_words = 4
- word_size = 32
-
- try:
- fmt = '>%d%s'% (num_words, AddrStrategy.STRUCT_FORMATS[word_size])
- except KeyError:
- raise ValueError('unsupported word size: %d!' % word_size)
-
- words = list(_struct.unpack(fmt, packed_int))
-
- int_val = 0
- for i, num in enumerate(reversed(words)):
- word = num
- word = word << word_size * i
- int_val = int_val | word
-
- return int_val
-
- def int_to_arpa(self, int_val):
- """
- @param int_val: An unsigned integer.
-
- @return: The reverse DNS lookup for an IPv6 address in network byte
- order integer form.
- """
- addr = self.int_to_str(int_val, compact=False, word_fmt='%.4x')
- tokens = list(addr.replace(':', ''))
- tokens.reverse()
- # We won't support ip6.int here - see RFC 3152 for details.
- tokens = tokens + ['ip6', 'arpa', '']
- return '.'.join(tokens)
-
-#-----------------------------------------------------------------------------
-# MAC address 'dialect' objects.
-#-----------------------------------------------------------------------------
-
-class mac_eui48(object):
- """IEEE EUI-48 MAC address style (Same as Windows)"""
- addr_type = AT_LINK
- width = 48
- max_int = 2 ** width - 1
- word_size = 8
- num_words = width / word_size
- max_word = 2 ** word_size - 1
- word_sep = '-'
- word_fmt = '%.2X'
- word_base = 16
-
- def update(self, obj):
- obj.max_word = self.max_word
- obj.num_words = self.num_words
- obj.word_base = self.word_base
- obj.word_fmt = self.word_fmt
- obj.word_sep = self.word_sep
- obj.word_size = self.word_size
-
-class mac_unix(mac_eui48):
- """UNIX MAC address style."""
- word_size = 8
- num_words = mac_eui48.width / word_size
- word_sep = ':'
- word_fmt = '%x'
- word_base = 16
-
-class mac_cisco(mac_eui48):
- """Bare MAC address style (no delimiters)."""
- word_size = 16
- num_words = mac_eui48.width / word_size
- word_sep = ':'
- word_fmt = '%.4x'
- word_base = 16
-
-class mac_bare(mac_eui48):
- """Bare MAC address style (no delimiters)."""
- word_size = 48
- num_words = mac_eui48.width / word_size
- word_sep = ''
- word_fmt = '%.12X'
- word_base = 16
-
-class mac_pgsql(mac_eui48):
- """PostgreSQL MAC address style (2x 24 bit words)."""
- word_size = 24
- num_words = mac_eui48.width / word_size
- word_sep = ':'
- word_fmt = '%.6x'
- word_base = 16
-
-#-----------------------------------------------------------------------------
-class EUI48Strategy(AddrStrategy):
- """
- Implements the operations that can be performed on an IEEE 48-bit EUI
- (Extended Unique Identifer) a.k.a. a MAC (Media Access Control) layer 2
- address.
-
- Supports all common (and some less common MAC string formats including
- Cisco's 'triple hextet' format and also bare MACs that contain no
- delimiters.
- """
- # Regular expression to match the numerous different MAC formats.
- RE_MAC_FORMATS = (
- # 2 bytes x 6 (UNIX, Windows, EUI-48)
- '^' + ':'.join(['([0-9A-F]{1,2})'] * 6) + '$',
- '^' + '-'.join(['([0-9A-F]{1,2})'] * 6) + '$',
-
- # 4 bytes x 3 (Cisco)
- '^' + ':'.join(['([0-9A-F]{1,4})'] * 3) + '$',
- '^' + '-'.join(['([0-9A-F]{1,4})'] * 3) + '$',
-
- # 6 bytes x 2 (PostgreSQL)
- '^' + '-'.join(['([0-9A-F]{5,6})'] * 2) + '$',
- '^' + ':'.join(['([0-9A-F]{5,6})'] * 2) + '$',
-
- # 12 bytes (bare, no delimiters)
- '^(' + ''.join(['[0-9A-F]'] * 12) + ')$',
- '^(' + ''.join(['[0-9A-F]'] * 11) + ')$',
- )
- # For efficiency, replace each string regexp with its compiled
- # equivalent.
- RE_MAC_FORMATS = [_re.compile(_, _re.IGNORECASE) for _ in RE_MAC_FORMATS]
-
- def __init__(self, word_fmt='%.2X', word_sep='-'):
- """
- Constructor.
-
- @param word_sep: separator between each word.
- (Default: '-')
-
- @param word_fmt: format string for each hextet.
- (Default: '%02x')
- """
- super(self.__class__, self).__init__(addr_type=AT_LINK, width=48,
- word_size=8, word_fmt=word_fmt, word_sep=word_sep)
-
- def change_dialect(self, dialect):
- dialect().update(self)
-
- def reset(self):
- """
- Resets the internal state of this strategy to safe default values.
- """
- # These are the settings for EUI-48 specific formatting.
- self.width = 48
- self.max_int = 2 ** self.width - 1
- self.word_size = 8
- self.num_words = self.width / self.word_size
- self.max_word = 2 ** self.word_size - 1
- self.word_sep = '-'
- self.word_fmt = '%.2X'
- self.word_base = 16
- self.addr_type = AT_LINK
-
- def valid_str(self, addr):
- """
- @param addr: An EUI-48 or MAC address in string form.
-
- @return: C{True} if MAC address string is valid, C{False} otherwise.
- """
- if not isinstance(addr, (str, unicode)):
- return False
-
- for regexp in EUI48Strategy.RE_MAC_FORMATS:
- match_result = regexp.findall(addr)
- if len(match_result) != 0:
- return True
- return False
-
- def str_to_int(self, addr):
- """
- @param addr: An EUI-48 or MAC address in string form.
-
- @return: An unsigned integer that is equivalent to value represented
- by EUI-48/MAC string address.
- """
- words = []
- if isinstance(addr, (str, unicode)):
- found_match = False
- for regexp in EUI48Strategy.RE_MAC_FORMATS:
- match_result = regexp.findall(addr)
- if len(match_result) != 0:
- found_match = True
- if isinstance(match_result[0], tuple):
- words = match_result[0]
- else:
- words = (match_result[0],)
- break
- if not found_match:
- raise AddrFormatError('%r is not a supported MAC format!' \
- % addr)
- else:
- raise TypeError('%r is not str() or unicode()!' % addr)
-
- int_val = None
-
- if len(words) == 6:
- # 2 bytes x 6 (UNIX, Windows, EUI-48)
- int_val = int(''.join(['%.2x' % int(w, 16) for w in words]), 16)
- elif len(words) == 3:
- # 4 bytes x 3 (Cisco)
- int_val = int(''.join(['%.4x' % int(w, 16) for w in words]), 16)
- elif len(words) == 2:
- # 6 bytes x 2 (PostgreSQL)
- int_val = int(''.join(['%.6x' % int(w, 16) for w in words]), 16)
- elif len(words) == 1:
- # 12 bytes (bare, no delimiters)
- int_val = int('%012x' % int(words[0], 16), 16)
- else:
- raise AddrFormatError('unexpected word count in MAC address %r!' \
- % addr)
-
- return int_val
-
- def int_to_str(self, int_val, word_sep=None, word_fmt=None):
- """
- @param int_val: An unsigned integer.
-
- @param word_sep: (optional) The separator used between words in an
- address string.
-
- @param word_fmt: (optional) A Python format string used to format
- each word of address.
-
- @return: A MAC address in string form that is equivalent to value
- represented by an unsigned integer.
- """
- _word_sep = self.word_sep
- if word_sep is not None:
- _word_sep = word_sep
-
- _word_fmt = self.word_fmt
- if word_fmt is not None:
- _word_fmt = word_fmt
-
- words = self.int_to_words(int_val)
- tokens = [_word_fmt % i for i in words]
- addr = _word_sep.join(tokens)
-
- return addr
-
-#-----------------------------------------------------------------------------
-# Shared strategy objects for supported address types.
-#-----------------------------------------------------------------------------
-
-#: A shared strategy object supporting all operations on IPv4 addresses.
-ST_IPV4 = IPv4Strategy()
-
-#: A shared strategy object supporting all operations on IPv6 addresses.
-ST_IPV6 = IPv6Strategy()
-
-#: A shared strategy object supporting all operations on EUI-48/MAC addresses.
-ST_EUI48 = EUI48Strategy()
-
-#: A shared strategy object supporting all operations on EUI-64 addresses.
-ST_EUI64 = AddrStrategy(addr_type=AT_EUI64, width=64, word_size=8, \
- word_fmt='%.2X', word_sep='-')
-
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- pass
-
diff --git a/netaddr/strategy/__init__.py b/netaddr/strategy/__init__.py
new file mode 100755
index 0000000..0d16a80
--- /dev/null
+++ b/netaddr/strategy/__init__.py
@@ -0,0 +1,277 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+Shared logic for various address types.
+"""
+import re as _re
+
+#-----------------------------------------------------------------------------
+def bytes_to_bits():
+ """
+ @return: A 256 element list containing 8-bit binary digit strings. The
+ list index value is equivalent to its bit string value.
+ """
+ lookup = []
+ bits_per_byte = range(7, -1, -1)
+ for num in range(256):
+ bits = 8 * [None]
+ for i in bits_per_byte:
+ bits[i] = '01'[num & 1]
+ num >>= 1
+ lookup.append(''.join(bits))
+ return lookup
+
+#: A lookup table of 8-bit integer values to their binary digit bit strings.
+BYTES_TO_BITS = bytes_to_bits()
+
+#-----------------------------------------------------------------------------
+def valid_words(words, word_size, num_words):
+ """
+ @param words: A sequence of unsigned integer word values.
+
+ @param word_size: Width (in bits) of each unsigned integer word value.
+
+ @param num_words: Number of unsigned integer words expected.
+
+ @return: C{True} if word sequence is valid for this address type,
+ C{False} otherwise.
+ """
+ if not hasattr(words, '__iter__'):
+ return False
+
+ if len(words) != num_words:
+ return False
+
+ max_word = 2 ** word_size - 1
+
+ for i in words:
+ if not 0 <= i <= max_word:
+ return False
+
+ return True
+
+#-----------------------------------------------------------------------------
+def int_to_words(int_val, word_size, num_words):
+ """
+ @param int_val: Unsigned integer to be divided into words of equal size.
+
+ @param word_size: Width (in bits) of each unsigned integer word value.
+
+ @param num_words: Number of unsigned integer words expected.
+
+ @return: A tuple contain unsigned integer word values split according
+ to provided arguments.
+ """
+ max_int = 2 ** (num_words * word_size) - 1
+
+ if not 0 <= int_val <= max_int:
+ raise IndexError('integer out of bounds: %r!' % hex(int_val))
+
+ max_word = 2 ** word_size - 1
+
+ words = []
+ for _ in range(num_words):
+ word = int_val & max_word
+ words.append(int(word))
+ int_val >>= word_size
+
+ return tuple(reversed(words))
+
+#-----------------------------------------------------------------------------
+def words_to_int(words, word_size, num_words):
+ """
+ @param words: A sequence of unsigned integer word values.
+
+ @param word_size: Width (in bits) of each unsigned integer word value.
+
+ @param num_words: Number of unsigned integer words expected.
+
+ @return: An unsigned integer that is equivalent to value represented
+ by word sequence.
+ """
+ if not valid_words(words, word_size, num_words):
+ raise ValueError('invalid integer word sequence: %r!' % words)
+
+ int_val = 0
+ for i, num in enumerate(reversed(words)):
+ word = num
+ word = word << word_size * i
+ int_val = int_val | word
+
+ return int_val
+
+#-----------------------------------------------------------------------------
+def valid_bits(bits, width, word_sep=''):
+ """
+ @param bits: A network address in a delimited binary string format.
+
+ @param width: Maximum width (in bits) of a network address (excluding
+ delimiters).
+
+ @param word_sep: (optional) character or string used to delimit word
+ groups (default: '', no separator).
+
+ @return: C{True} if network address is valid, C{False} otherwise.
+ """
+ if not hasattr(bits, 'replace'):
+ return False
+
+ if word_sep != '':
+ bits = bits.replace(word_sep, '')
+
+ if len(bits) != width:
+ return False
+
+ max_int = 2 ** width - 1
+
+ try:
+ if 0 <= int(bits, 2) <= max_int:
+ return True
+ except ValueError:
+ pass
+
+ return False
+
+#-----------------------------------------------------------------------------
+def bits_to_int(bits, width, word_sep=''):
+ """
+ @param bits: A network address in a delimited binary string format.
+
+ @param width: Maximum width (in bits) of a network address (excluding
+ delimiters).
+
+ @param word_sep: (optional) character or string used to delimit word
+ groups (default: '', no separator).
+
+ @return: An unsigned integer that is equivalent to value represented
+ by network address in readable binary form.
+ """
+ if not valid_bits(bits, width, word_sep):
+ raise ValueError('invalid readable binary string: %r!' % bits)
+
+ if word_sep != '':
+ bits = bits.replace(word_sep, '')
+
+ return int(bits, 2)
+
+#-----------------------------------------------------------------------------
+def int_to_bits(int_val, word_size, num_words, word_sep=''):
+ """
+ @param int_val: An unsigned integer.
+
+ @param word_size: Width (in bits) of each unsigned integer word value.
+
+ @param num_words: Number of unsigned integer words expected.
+
+ @param word_sep: (optional) character or string used to delimit word
+ groups (default: '', no separator).
+
+ @return: A network address in a delimited binary string format that is
+ equivalent in value to unsigned integer.
+ """
+ bit_words = []
+
+ for word in int_to_words(int_val, word_size, num_words):
+ bits = []
+ while word:
+ bits.append(BYTES_TO_BITS[word & 255])
+ word >>= 8
+ bits.reverse()
+ bit_str = ''.join(bits) or '0' * word_size
+ bits = ('0' * word_size + bit_str)[-word_size:]
+ bit_words.append(bits)
+
+ if word_sep is not '':
+ # Check custom separator.
+ if not hasattr(word_sep, 'join'):
+ raise ValueError('word separator is not a string: %r!' % word_sep)
+
+ return word_sep.join(bit_words)
+
+#-----------------------------------------------------------------------------
+def valid_bin(bin_val, width):
+ """
+ @param bin_val: A network address in Python's binary representation format
+ ('0bxxx').
+
+ @param width: Maximum width (in bits) of a network address (excluding
+ delimiters).
+
+ @return: C{True} if network address is valid, C{False} otherwise.
+ """
+ if not hasattr(bin_val, 'startswith'):
+ return False
+
+ if not bin_val.startswith('0b'):
+ return False
+
+ bin_val = bin_val.replace('0b', '')
+
+ if len(bin_val) > width:
+ return False
+
+ max_int = 2 ** width - 1
+
+ try:
+ if 0 <= int(bin_val, 2) <= max_int:
+ return True
+ except ValueError:
+ pass
+
+ return False
+
+#-----------------------------------------------------------------------------
+def int_to_bin(int_val, width):
+ """
+ @param int_val: An unsigned integer.
+
+ @param width: Maximum allowed width (in bits) of a unsigned integer.
+
+ @return: Equivalent string value in Python's binary representation format
+ ('0bxxx').
+ """
+ bin_tokens = []
+
+ try:
+ # Python 2.6.x and upwards.
+ bin_val = bin(int_val)
+ except NameError:
+ # Python 2.4.x and 2.5.x
+ i = int_val
+ while i > 0:
+ word = i & 0xff
+ bin_tokens.append(BYTES_TO_BITS[word])
+ i >>= 8
+
+ bin_tokens.reverse()
+ bin_val = '0b' + _re.sub(r'^[0]+([01]+)$', r'\1', ''.join(bin_tokens))
+
+ if len(bin_val[2:]) > width:
+ raise IndexError('binary string out of bounds: %s!' % bin_val)
+
+ return bin_val
+
+#-----------------------------------------------------------------------------
+def bin_to_int(bin_val, width):
+ """
+ @param bin_val: A string containing an unsigned integer in Python's binary
+ representation format ('0bxxx').
+
+ @param width: Maximum allowed width (in bits) of a unsigned integer.
+
+ @return: An unsigned integer that is equivalent to value represented
+ by Python binary string format.
+ """
+ if not valid_bin(bin_val, width):
+ raise ValueError('not a valid Python binary string: %r!' % bin_val)
+
+ return int(bin_val.replace('0b', ''), 2)
+
+if __name__ == '__main__':
+ i = 0x100000000
+ print hex(i)
+ print int_to_bin(i, 32)
diff --git a/netaddr/strategy/eui48.py b/netaddr/strategy/eui48.py
new file mode 100755
index 0000000..bf878f0
--- /dev/null
+++ b/netaddr/strategy/eui48.py
@@ -0,0 +1,293 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+IEEE 48-bit EUI (MAC address) logic.
+
+Supports numerous MAC string formats including Cisco's triple hextet as well
+as bare MACs containing no delimiters.
+"""
+import struct as _struct
+import re as _re
+
+# Check whether we need to use fallback code or not.
+try:
+ from socket import AF_LINK
+except ImportError:
+ AF_LINK = 48
+
+from netaddr.core import AddrFormatError
+from netaddr.strategy import BYTES_TO_BITS as _BYTES_TO_BITS, \
+ valid_words as _valid_words, \
+ int_to_words as _int_to_words, \
+ words_to_int as _words_to_int, \
+ valid_bits as _valid_bits, \
+ bits_to_int as _bits_to_int, \
+ int_to_bits as _int_to_bits, \
+ valid_bin as _valid_bin, \
+ int_to_bin as _int_to_bin, \
+ bin_to_int as _bin_to_int
+
+#: The width (in bits) of this address type.
+width = 48
+
+#: The AF_* constant value of this address type.
+family = AF_LINK
+
+#: A friendly string name address type.
+family_name = 'MAC'
+
+#: The version of this address type.
+version = 48
+
+#: The maximum integer value that can be represented by this address type.
+max_int = 2 ** width - 1
+
+#-----------------------------------------------------------------------------
+# Dialect classes.
+#-----------------------------------------------------------------------------
+
+class mac_eui48(object):
+ """standard IEEE EUI-48 dialect"""
+ #: The individual word size (in bits) of this address type.
+ word_size = 8
+
+ #: The number of words in this address type.
+ num_words = width / word_size
+
+ #: The maximum integer value for an individual word in this address type.
+ max_word = 2 ** word_size - 1
+
+ #: The separator character used between each word.
+ word_sep = '-'
+
+ #: The format string to be used when converting words to string values.
+ word_fmt = '%.2X'
+
+ #: The number base to be used when interpreting word values as integers.
+ word_base = 16
+
+class mac_unix(mac_eui48):
+ """UNIX-style MAC address dialect."""
+ word_size = 8
+ num_words = width / word_size
+ word_sep = ':'
+ word_fmt = '%x'
+ word_base = 16
+
+class mac_cisco(mac_eui48):
+ """Cisco 'triple hextet' MAC address dialect."""
+ word_size = 16
+ num_words = width / word_size
+ word_sep = '.'
+ word_fmt = '%.4x'
+ word_base = 16
+
+class mac_bare(mac_eui48):
+ """Bare MAC address dialect (no delimiters)."""
+ word_size = 48
+ num_words = width / word_size
+ word_sep = ''
+ word_fmt = '%.12X'
+ word_base = 16
+
+class mac_pgsql(mac_eui48):
+ """PostgreSQL-style MAC address dialect (2 x 24-bit words)."""
+ word_size = 24
+ num_words = width / word_size
+ word_sep = ':'
+ word_fmt = '%.6x'
+ word_base = 16
+
+#: The default dialect to be used when not specified by the user.
+DEFAULT_DIALECT = mac_eui48
+
+#-----------------------------------------------------------------------------
+#: Regular expressions to match all supported MAC address formats.
+RE_MAC_FORMATS = (
+ # 2 bytes x 6 (UNIX, Windows, EUI-48)
+ '^' + ':'.join(['([0-9A-F]{1,2})'] * 6) + '$',
+ '^' + '-'.join(['([0-9A-F]{1,2})'] * 6) + '$',
+
+ # 4 bytes x 3 (Cisco)
+ '^' + ':'.join(['([0-9A-F]{1,4})'] * 3) + '$',
+ '^' + '-'.join(['([0-9A-F]{1,4})'] * 3) + '$',
+ '^' + '\.'.join(['([0-9A-F]{1,4})'] * 3) + '$',
+
+ # 6 bytes x 2 (PostgreSQL)
+ '^' + '-'.join(['([0-9A-F]{5,6})'] * 2) + '$',
+ '^' + ':'.join(['([0-9A-F]{5,6})'] * 2) + '$',
+
+ # 12 bytes (bare, no delimiters)
+ '^(' + ''.join(['[0-9A-F]'] * 12) + ')$',
+ '^(' + ''.join(['[0-9A-F]'] * 11) + ')$',
+)
+# For efficiency, each string regexp converted in place to its compiled
+# counterpart.
+RE_MAC_FORMATS = [_re.compile(_, _re.IGNORECASE) for _ in RE_MAC_FORMATS]
+
+#-----------------------------------------------------------------------------
+def valid_str(addr):
+ """
+ @param addr: An IEEE EUI-48 (MAC) address in string form.
+
+ @return: C{True} if MAC address string is valid, C{False} otherwise.
+ """
+ for regexp in RE_MAC_FORMATS:
+ try:
+ match_result = regexp.findall(addr)
+ if len(match_result) != 0:
+ return True
+ except TypeError:
+ pass
+
+ return False
+
+#-----------------------------------------------------------------------------
+def str_to_int(addr):
+ """
+ @param addr: An IEEE EUI-48 (MAC) address in string form.
+
+ @return: An unsigned integer that is equivalent to value represented
+ by EUI-48/MAC string address formatted according to the dialect
+ settings.
+ """
+ words = []
+ if hasattr(addr, 'upper'):
+ found_match = False
+ for regexp in RE_MAC_FORMATS:
+ match_result = regexp.findall(addr)
+ if len(match_result) != 0:
+ found_match = True
+ if isinstance(match_result[0], tuple):
+ words = match_result[0]
+ else:
+ words = (match_result[0],)
+ break
+ if not found_match:
+ raise AddrFormatError('%r is not a supported MAC format!' % addr)
+ else:
+ raise TypeError('%r is not str() or unicode()!' % addr)
+
+ int_val = None
+
+ if len(words) == 6:
+ # 2 bytes x 6 (UNIX, Windows, EUI-48)
+ int_val = int(''.join(['%.2x' % int(w, 16) for w in words]), 16)
+ elif len(words) == 3:
+ # 4 bytes x 3 (Cisco)
+ int_val = int(''.join(['%.4x' % int(w, 16) for w in words]), 16)
+ elif len(words) == 2:
+ # 6 bytes x 2 (PostgreSQL)
+ int_val = int(''.join(['%.6x' % int(w, 16) for w in words]), 16)
+ elif len(words) == 1:
+ # 12 bytes (bare, no delimiters)
+ int_val = int('%012x' % int(words[0], 16), 16)
+ else:
+ raise AddrFormatError('unexpected word count in MAC address %r!' \
+ % addr)
+
+ return int_val
+
+#-----------------------------------------------------------------------------
+def int_to_str(int_val, dialect=None):
+ """
+ @param int_val: An unsigned integer.
+
+ @param dialect: (optional) a Python class defining formatting options.
+
+ @return: An IEEE EUI-48 (MAC) address string that is equivalent to
+ unsigned integer formatted according to the dialect settings.
+ """
+ if dialect is None:
+ dialect = mac_eui48
+
+ words = int_to_words(int_val, dialect)
+ tokens = [dialect.word_fmt % i for i in words]
+ addr = dialect.word_sep.join(tokens)
+
+ return addr
+
+#-----------------------------------------------------------------------------
+def int_to_packed(int_val):
+ """
+ @param int_val: the integer to be packed.
+
+ @return: a packed string that is equivalent to value represented by an
+ unsigned integer.
+ """
+ words = int_to_words(int_val)
+ return _struct.pack('>6B', *words)
+
+#-----------------------------------------------------------------------------
+def packed_to_int(packed_int):
+ """
+ @param packed_int: a packed string containing an unsigned integer.
+ It is assumed that string is packed in network byte order.
+
+ @return: An unsigned integer equivalent to value of network address
+ represented by packed binary string.
+ """
+ words = list(_struct.unpack('>6B', packed_int))
+
+ int_val = 0
+ for i, num in enumerate(reversed(words)):
+ word = num
+ word = word << 8 * i
+ int_val = int_val | word
+
+ return int_val
+
+#-----------------------------------------------------------------------------
+def valid_words(words, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _valid_words(words, dialect.word_size, dialect.num_words)
+
+#-----------------------------------------------------------------------------
+def int_to_words(int_val, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _int_to_words(int_val, dialect.word_size, dialect.num_words)
+
+#-----------------------------------------------------------------------------
+def words_to_int(words, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _words_to_int(words, dialect.word_size, dialect.num_words)
+
+#-----------------------------------------------------------------------------
+def valid_bits(bits, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _valid_bits(bits, width, dialect.word_sep)
+
+#-----------------------------------------------------------------------------
+def bits_to_int(bits, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _bits_to_int(bits, width, dialect.word_sep)
+
+#-----------------------------------------------------------------------------
+def int_to_bits(int_val, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _int_to_bits(int_val, dialect.word_size, dialect.num_words,
+ dialect.word_sep)
+
+#-----------------------------------------------------------------------------
+def valid_bin(bin_val, dialect=None):
+ if dialect is None:
+ dialect = DEFAULT_DIALECT
+ return _valid_bin(bin_val, width)
+
+#-----------------------------------------------------------------------------
+def int_to_bin(int_val):
+ return _int_to_bin(int_val, width)
+
+#-----------------------------------------------------------------------------
+def bin_to_int(bin_val):
+ return _bin_to_int(bin_val, width)
diff --git a/netaddr/strategy/eui64.py b/netaddr/strategy/eui64.py
new file mode 100755
index 0000000..e563089
--- /dev/null
+++ b/netaddr/strategy/eui64.py
@@ -0,0 +1,185 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+IEEE 64-bit EUI (Extended Unique Indentifier) logic.
+"""
+import struct as _struct
+import re as _re
+
+# This is a fake constant that doesn't really exist. Here for completeness.
+AF_EUI64 = 64
+
+from netaddr.core import AddrFormatError
+from netaddr.strategy import BYTES_TO_BITS as _BYTES_TO_BITS, \
+ valid_words as _valid_words, \
+ int_to_words as _int_to_words, \
+ words_to_int as _words_to_int, \
+ valid_bits as _valid_bits, \
+ bits_to_int as _bits_to_int, \
+ int_to_bits as _int_to_bits, \
+ valid_bin as _valid_bin, \
+ int_to_bin as _int_to_bin, \
+ bin_to_int as _bin_to_int
+
+#: The width (in bits) of this address type.
+width = 64
+
+#: The individual word size (in bits) of this address type.
+word_size = 8
+
+#: The format string to be used when converting words to string values.
+word_fmt = '%.2X'
+
+#: The separator character used between each word.
+word_sep = '-'
+
+#: The AF_* constant value of this address type.
+family = AF_EUI64
+
+#: A friendly string name address type.
+family_name = 'EUI-64'
+
+#: The version of this address type.
+version = 64
+
+#: The number base to be used when interpreting word values as integers.
+word_base = 16
+
+#: The maximum integer value that can be represented by this address type.
+max_int = 2 ** width - 1
+
+#: The number of words in this address type.
+num_words = width / word_size
+
+#: The maximum integer value for an individual word in this address type.
+max_word = 2 ** word_size - 1
+
+#: Compiled regular expression for detecting value EUI-64 identifiers.
+RE_EUI64_FORMAT = _re.compile('^' + '-'.join(['([0-9A-F]{1,2})'] * 8) + '$',
+ _re.IGNORECASE)
+
+#-----------------------------------------------------------------------------
+def valid_str(addr):
+ """
+ @param addr: An IEEE EUI-64 indentifier in string form.
+
+ @return: C{True} if EUI-64 indentifier is valid, C{False} otherwise.
+ """
+ try:
+ match_result = RE_EUI64_FORMAT.findall(addr)
+ if len(match_result) != 0:
+ return True
+ except TypeError:
+ pass
+
+ return False
+
+#-----------------------------------------------------------------------------
+def str_to_int(addr):
+ """
+ @param addr: An IEEE EUI-64 indentifier in string form.
+
+ @return: An unsigned integer that is equivalent to value represented
+ by EUI-64 string identifier.
+ """
+ words = []
+
+ try:
+ match_result = RE_EUI64_FORMAT.findall(addr)
+ if not match_result:
+ raise TypeError
+ except TypeError:
+ raise AddrFormatError('invalid IEEE EUI-64 identifier: %r!' % addr)
+
+ words = match_result[0]
+
+ if len(words) != num_words:
+ raise AddrFormatError('bad word count for EUI-64 identifier: %r!' \
+ % addr)
+
+ return int(''.join(['%.2x' % int(w, 16) for w in words]), 16)
+
+#-----------------------------------------------------------------------------
+def int_to_str(int_val, dialect=None):
+ """
+ @param int_val: An unsigned integer.
+
+ @param dialect: (optional) a Python class defining formatting options
+ (Please Note - not currently in use).
+
+ @return: An IEEE EUI-64 identifier that is equivalent to unsigned integer.
+ """
+ words = int_to_words(int_val)
+ tokens = [word_fmt % i for i in words]
+ addr = word_sep.join(tokens)
+ return addr
+
+#-----------------------------------------------------------------------------
+def int_to_packed(int_val):
+ """
+ @param int_val: the integer to be packed.
+
+ @return: a packed string that is equivalent to value represented by an
+ unsigned integer.
+ """
+ words = int_to_words(int_val)
+ return _struct.pack('>8B', *words)
+
+#-----------------------------------------------------------------------------
+def packed_to_int(packed_int):
+ """
+ @param packed_int: a packed string containing an unsigned integer.
+ It is assumed that string is packed in network byte order.
+
+ @return: An unsigned integer equivalent to value of network address
+ represented by packed binary string.
+ """
+ words = list(_struct.unpack('>8B', packed_int))
+
+ int_val = 0
+ for i, num in enumerate(reversed(words)):
+ word = num
+ word = word << 8 * i
+ int_val = int_val | word
+
+ return int_val
+
+#-----------------------------------------------------------------------------
+def valid_words(words, dialect=None):
+ return _valid_words(words, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def int_to_words(int_val, dialect=None):
+ return _int_to_words(int_val, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def words_to_int(words, dialect=None):
+ return _words_to_int(words, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def valid_bits(bits, dialect=None):
+ return _valid_bits(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def bits_to_int(bits, dialect=None):
+ return _bits_to_int(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def int_to_bits(int_val, dialect=None):
+ return _int_to_bits(int_val, word_size, num_words, word_sep)
+
+#-----------------------------------------------------------------------------
+def valid_bin(bin_val):
+ return _valid_bin(bin_val, width)
+
+#-----------------------------------------------------------------------------
+def int_to_bin(int_val):
+ return _int_to_bin(int_val, width)
+
+#-----------------------------------------------------------------------------
+def bin_to_int(bin_val):
+ return _bin_to_int(bin_val, width)
diff --git a/netaddr/strategy/ipv4.py b/netaddr/strategy/ipv4.py
new file mode 100755
index 0000000..d196980
--- /dev/null
+++ b/netaddr/strategy/ipv4.py
@@ -0,0 +1,207 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+IPv4 address logic.
+"""
+import struct as _struct
+
+OPT_IMPORTS = False
+
+# Check whether we need to use fallback code or not.
+try:
+ import socket as _socket
+ # Check for a common bug on Windows and socket modules on some other
+ # platforms.
+ _socket.inet_aton('255.255.255.255')
+ from _socket import inet_aton as _inet_aton, \
+ inet_ntoa as _inet_ntoa, \
+ AF_INET
+ OPT_IMPORTS = True
+except:
+ from netaddr.fbsocket import inet_aton as _inet_aton, \
+ inet_ntoa as _inet_ntoa, \
+ AF_INET
+
+from netaddr.core import AddrFormatError
+from netaddr.strategy import BYTES_TO_BITS as _BYTES_TO_BITS, \
+ valid_words as _valid_words, \
+ valid_bits as _valid_bits, \
+ bits_to_int as _bits_to_int, \
+ int_to_bits as _int_to_bits, \
+ valid_bin as _valid_bin, \
+ int_to_bin as _int_to_bin, \
+ bin_to_int as _bin_to_int
+
+#: The width (in bits) of this address type.
+width = 32
+
+#: The individual word size (in bits) of this address type.
+word_size = 8
+
+#: The format string to be used when converting words to string values.
+word_fmt = '%d'
+
+#: The separator character used between each word.
+word_sep = '.'
+
+#: The AF_* constant value of this address type.
+family = AF_INET
+
+#: A friendly string name address type.
+family_name = 'IPv4'
+
+#: The version of this address type.
+version = 4
+
+#: The number base to be used when interpreting word values as integers.
+word_base = 10
+
+#: The maximum integer value that can be represented by this address type.
+max_int = 2 ** width - 1
+
+#: The number of words in this address type.
+num_words = width / word_size
+
+#: The maximum integer value for an individual word in this address type.
+max_word = 2 ** word_size - 1
+
+#-----------------------------------------------------------------------------
+def valid_str(addr):
+ """
+ @param addr: An IPv4 address in presentation (string) format.
+
+ @return: C{True} if IPv4 address is valid, C{False} otherwise.
+ """
+ if addr == '':
+ raise AddrFormatError('Empty strings are not supported!')
+
+ try:
+ _inet_aton(addr)
+ except:
+ return False
+ return True
+
+#-----------------------------------------------------------------------------
+def str_to_int(addr):
+ """
+ @param addr: An IPv4 dotted decimal address in string form.
+
+ @return: The equivalent unsigned integer for a given IPv4 address.
+ """
+ if addr == '':
+ raise AddrFormatError('Empty strings are not supported!')
+ try:
+ return _struct.unpack('>I', _inet_aton(addr))[0]
+ except:
+ raise AddrFormatError('%r is not a valid IPv4 address string!' \
+ % addr)
+
+#-----------------------------------------------------------------------------
+def int_to_str(int_val):
+ """
+ @param int_val: An unsigned integer.
+
+ @return: The IPv4 presentation (string) format address equivalent to the
+ unsigned integer provided.
+ """
+ if 0 <= int_val <= max_int:
+ return _inet_ntoa(_struct.pack('>I', int_val))
+ else:
+ raise ValueError('%r is not a valid 32-bit unsigned integer!' \
+ % int_val)
+
+#-----------------------------------------------------------------------------
+def int_to_arpa(int_val):
+ """
+ @param int_val: An unsigned integer.
+
+ @return: The reverse DNS lookup for an IPv4 address in network byte
+ order integer form.
+ """
+ words = ["%d" % i for i in int_to_words(int_val)]
+ words.reverse()
+ words.extend(['in-addr', 'arpa', ''])
+ return '.'.join(words)
+
+#-----------------------------------------------------------------------------
+def int_to_packed(int_val):
+ """
+ @param int_val: the integer to be packed.
+
+ @return: a packed string that is equivalent to value represented by an
+ unsigned integer.
+ """
+ words = int_to_words(int_val)
+ return _struct.pack('>4B', *words)
+
+#-----------------------------------------------------------------------------
+def packed_to_int(packed_int):
+ """
+ @param packed_int: a packed string containing an unsigned integer.
+ It is assumed that string is packed in network byte order.
+
+ @return: An unsigned integer equivalent to value of network address
+ represented by packed binary string.
+ """
+ words = list(_struct.unpack('>4B', packed_int))
+ return _struct.unpack('>I', _struct.pack('4B', *words))[0]
+
+#-----------------------------------------------------------------------------
+def valid_words(words):
+ return _valid_words(words, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def int_to_words(int_val):
+ """
+ @param int_val: An unsigned integer.
+
+ @return: An integer word (octet) sequence that is equivalent to value
+ represented by an unsigned integer.
+ """
+ if not 0 <= int_val <= max_int:
+ raise ValueError('%r is not a valid integer value supported ' \
+ 'by this address type!' % int_val)
+ return _struct.unpack('4B', _struct.pack('>I', int_val))
+
+#-----------------------------------------------------------------------------
+def words_to_int(words):
+ """
+ @param words: A list or tuple containing integer octets.
+
+ @return: An unsigned integer that is equivalent to value represented
+ by word (octet) sequence.
+ """
+ if not valid_words(words):
+ raise ValueError('%r is not a valid octet list for an IPv4 ' \
+ 'address!' % words)
+ return _struct.unpack('>I', _struct.pack('4B', *words))[0]
+
+#-----------------------------------------------------------------------------
+def valid_bits(bits):
+ return _valid_bits(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def bits_to_int(bits):
+ return _bits_to_int(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def int_to_bits(int_val, word_sep=None):
+ if word_sep is None:
+ word_sep = globals()['word_sep']
+ return _int_to_bits(int_val, word_size, num_words, word_sep)
+
+#-----------------------------------------------------------------------------
+def valid_bin(bin_val):
+ return _valid_bin(bin_val, width)
+
+#-----------------------------------------------------------------------------
+def int_to_bin(int_val):
+ return _int_to_bin(int_val, width)
+
+#-----------------------------------------------------------------------------
+def bin_to_int(bin_val):
+ return _bin_to_int(bin_val, width)
diff --git a/netaddr/strategy/ipv6.py b/netaddr/strategy/ipv6.py
new file mode 100755
index 0000000..a94dade
--- /dev/null
+++ b/netaddr/strategy/ipv6.py
@@ -0,0 +1,226 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+"""
+IPv6 address logic.
+"""
+import struct as _struct
+
+OPT_IMPORTS = False
+
+# Check whether we need to use fallback code or not.
+try:
+ import socket as _socket
+ # These might all generate exceptions on different platforms.
+ if not _socket.has_ipv6:
+ raise Exception('IPv6 disabled')
+ _socket.inet_pton
+ _socket.AF_INET6
+ from _socket import inet_pton as _inet_pton, \
+ inet_ntop as _inet_ntop, \
+ AF_INET6
+ OPT_IMPORTS = True
+except:
+ from netaddr.fbsocket import inet_pton as _inet_pton, \
+ inet_ntop as _inet_ntop, \
+ AF_INET6
+
+from netaddr.core import AddrFormatError
+from netaddr.strategy import BYTES_TO_BITS as _BYTES_TO_BITS, \
+ valid_words as _valid_words, \
+ int_to_words as _int_to_words, \
+ words_to_int as _words_to_int, \
+ valid_bits as _valid_bits, \
+ bits_to_int as _bits_to_int, \
+ int_to_bits as _int_to_bits, \
+ valid_bin as _valid_bin, \
+ int_to_bin as _int_to_bin, \
+ bin_to_int as _bin_to_int
+
+#: The width (in bits) of this address type.
+width = 128
+
+#: The individual word size (in bits) of this address type.
+word_size = 16
+
+#: The format string to be used when converting words to string values.
+word_fmt = '%x'
+
+#: The separator character used between each word.
+word_sep = ':'
+
+#: The AF_* constant value of this address type.
+family = AF_INET6
+
+#: A friendly string name address type.
+family_name = 'IPv6'
+
+#: The version of this address type.
+version = 6
+
+#: The number base to be used when interpreting word values as integers.
+word_base = 16
+
+#: The maximum integer value that can be represented by this address type.
+max_int = 2 ** width - 1
+
+#: The number of words in this address type.
+num_words = width / word_size
+
+#: The maximum integer value for an individual word in this address type.
+max_word = 2 ** word_size - 1
+
+#-----------------------------------------------------------------------------
+def valid_str(addr):
+ """
+ @param addr: An IPv6 address in presentation (string) format.
+
+ @return: C{True} if IPv6 address is valid, C{False} otherwise.
+ """
+ if addr == '':
+ raise AddrFormatError('Empty strings are not supported!')
+
+ try:
+ _inet_pton(AF_INET6, addr)
+ except:
+ return False
+ return True
+
+#-----------------------------------------------------------------------------
+def str_to_int(addr):
+ """
+ @param addr: An IPv6 address in string form.
+
+ @return: The equivalent unsigned integer for a given IPv6 address.
+ """
+ if addr == '':
+ raise AddrFormatError('Empty strings are not supported!')
+ try:
+ packed_int = _inet_pton(AF_INET6, addr)
+ return packed_to_int(packed_int)
+ except Exception, e:
+ raise AddrFormatError('%r is not a valid IPv6 address string!' \
+ % addr)
+
+#-----------------------------------------------------------------------------
+def int_to_str(int_val, compact=True, word_fmt=None):
+ """
+ @param int_val: An unsigned integer.
+
+ @param compact: (optional) A boolean flag indicating if compact
+ formatting should be used. If True, this method uses the '::'
+ string to represent the first adjacent group of words with a value
+ of zero. Default: True
+
+ @param word_fmt: (optional) The Python format string used to override
+ formatting for each word. Please Note: this option only applies when
+ compact is False.
+
+ @return: The IPv6 presentation (string) format address equivalent to the
+ unsigned integer provided.
+ """
+ try:
+ packed_int = int_to_packed(int_val)
+ if compact:
+ # Default return value.
+ return _inet_ntop(AF_INET6, packed_int)
+ else:
+ # Custom return value.
+ if word_fmt is None:
+ word_fmt = globals()['word_fmt']
+ words = list(_struct.unpack('>8H', packed_int))
+ tokens = [word_fmt % word for word in words]
+ return word_sep.join(tokens)
+ except Exception, e:
+ raise ValueError('%r is not a valid 128-bit unsigned integer!' \
+ % int_val)
+
+#-----------------------------------------------------------------------------
+def int_to_arpa(int_val):
+ """
+ @param int_val: An unsigned integer.
+
+ @return: The reverse DNS lookup for an IPv6 address in network byte
+ order integer form.
+ """
+ addr = int_to_str(int_val, compact=False, word_fmt='%.4x')
+ tokens = list(addr.replace(':', ''))
+ tokens.reverse()
+ # We won't support ip6.int here - see RFC 3152 for details.
+ tokens = tokens + ['ip6', 'arpa', '']
+ return '.'.join(tokens)
+
+#-----------------------------------------------------------------------------
+def int_to_packed(int_val):
+ """
+ @param int_val: the integer to be packed.
+
+ @return: a packed string that is equivalent to value represented by an
+ unsigned integer.
+ """
+ words = int_to_words(int_val, 4, 32)
+ return _struct.pack('>4I', *words)
+
+#-----------------------------------------------------------------------------
+def packed_to_int(packed_int):
+ """
+ @param packed_int: a packed string containing an unsigned integer.
+ It is assumed that string is packed in network byte order.
+
+ @return: An unsigned integer equivalent to value of network address
+ represented by packed binary string.
+ """
+ words = list(_struct.unpack('>4I', packed_int))
+
+ int_val = 0
+ for i, num in enumerate(reversed(words)):
+ word = num
+ word = word << 32 * i
+ int_val = int_val | word
+
+ return int_val
+
+#-----------------------------------------------------------------------------
+def valid_words(words):
+ return _valid_words(words, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def int_to_words(int_val, num_words=None, word_size=None):
+ if num_words is None:
+ num_words = globals()['num_words']
+ if word_size is None:
+ word_size = globals()['word_size']
+ return _int_to_words(int_val, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def words_to_int(words):
+ return _words_to_int(words, word_size, num_words)
+
+#-----------------------------------------------------------------------------
+def valid_bits(bits):
+ return _valid_bits(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def bits_to_int(bits):
+ return _bits_to_int(bits, width, word_sep)
+
+#-----------------------------------------------------------------------------
+def int_to_bits(int_val, word_sep=None):
+ if word_sep is None:
+ word_sep = globals()['word_sep']
+ return _int_to_bits(int_val, word_size, num_words, word_sep)
+
+#-----------------------------------------------------------------------------
+def valid_bin(bin_val):
+ return _valid_bin(bin_val, width)
+
+#-----------------------------------------------------------------------------
+def int_to_bin(int_val):
+ return _int_to_bin(int_val, width)
+
+#-----------------------------------------------------------------------------
+def bin_to_int(bin_val):
+ return _bin_to_int(bin_val, width)
diff --git a/netaddr/tests/.coverage b/netaddr/tests/.coverage
new file mode 100644
index 0000000..e4a21ff
--- /dev/null
+++ b/netaddr/tests/.coverage
Binary files differ
diff --git a/netaddr/tests/coverage.py b/netaddr/tests/coverage.py
new file mode 100755
index 0000000..148e573
--- /dev/null
+++ b/netaddr/tests/coverage.py
@@ -0,0 +1,1163 @@
+#!/usr/bin/python
+#
+# Perforce Defect Tracking Integration Project
+# <http://www.ravenbrook.com/project/p4dti/>
+#
+# COVERAGE.PY -- COVERAGE TESTING
+#
+# Gareth Rees, Ravenbrook Limited, 2001-12-04
+# Ned Batchelder, 2004-12-12
+# http://nedbatchelder.com/code/modules/coverage.html
+#
+#
+# 1. INTRODUCTION
+#
+# This module provides coverage testing for Python code.
+#
+# The intended readership is all Python developers.
+#
+# This document is not confidential.
+#
+# See [GDR 2001-12-04a] for the command-line interface, programmatic
+# interface and limitations. See [GDR 2001-12-04b] for requirements and
+# design.
+
+r"""Usage:
+
+coverage.py -x [-p] MODULE.py [ARG1 ARG2 ...]
+ Execute module, passing the given command-line arguments, collecting
+ coverage data. With the -p option, write to a temporary file containing
+ the machine name and process ID.
+
+coverage.py -e
+ Erase collected coverage data.
+
+coverage.py -c
+ Collect data from multiple coverage files (as created by -p option above)
+ and store it into a single file representing the union of the coverage.
+
+coverage.py -r [-m] [-o dir1,dir2,...] FILE1 FILE2 ...
+ Report on the statement coverage for the given files. With the -m
+ option, show line numbers of the statements that weren't executed.
+
+coverage.py -a [-d dir] [-o dir1,dir2,...] FILE1 FILE2 ...
+ Make annotated copies of the given files, marking statements that
+ are executed with > and statements that are missed with !. With
+ the -d option, make the copies in that directory. Without the -d
+ option, make each copy in the same directory as the original.
+
+-o dir,dir2,...
+ Omit reporting or annotating files when their filename path starts with
+ a directory listed in the omit list.
+ e.g. python coverage.py -i -r -o c:\python23,lib\enthought\traits
+
+Coverage data is saved in the file .coverage by default. Set the
+COVERAGE_FILE environment variable to save it somewhere else."""
+
+__version__ = "2.85.20080914" # see detailed history at the end of this file.
+
+import compiler
+import compiler.visitor
+import glob
+import os
+import re
+import string
+import symbol
+import sys
+import threading
+import token
+import types
+import zipimport
+from socket import gethostname
+
+# Python version compatibility
+try:
+ strclass = basestring # new to 2.3
+except:
+ strclass = str
+
+# 2. IMPLEMENTATION
+#
+# This uses the "singleton" pattern.
+#
+# The word "morf" means a module object (from which the source file can
+# be deduced by suitable manipulation of the __file__ attribute) or a
+# filename.
+#
+# When we generate a coverage report we have to canonicalize every
+# filename in the coverage dictionary just in case it refers to the
+# module we are reporting on. It seems a shame to throw away this
+# information so the data in the coverage dictionary is transferred to
+# the 'cexecuted' dictionary under the canonical filenames.
+#
+# The coverage dictionary is called "c" and the trace function "t". The
+# reason for these short names is that Python looks up variables by name
+# at runtime and so execution time depends on the length of variables!
+# In the bottleneck of this application it's appropriate to abbreviate
+# names to increase speed.
+
+class StatementFindingAstVisitor(compiler.visitor.ASTVisitor):
+ """ A visitor for a parsed Abstract Syntax Tree which finds executable
+ statements.
+ """
+ def __init__(self, statements, excluded, suite_spots):
+ compiler.visitor.ASTVisitor.__init__(self)
+ self.statements = statements
+ self.excluded = excluded
+ self.suite_spots = suite_spots
+ self.excluding_suite = 0
+
+ def doRecursive(self, node):
+ for n in node.getChildNodes():
+ self.dispatch(n)
+
+ visitStmt = visitModule = doRecursive
+
+ def doCode(self, node):
+ if hasattr(node, 'decorators') and node.decorators:
+ self.dispatch(node.decorators)
+ self.recordAndDispatch(node.code)
+ else:
+ self.doSuite(node, node.code)
+
+ visitFunction = visitClass = doCode
+
+ def getFirstLine(self, node):
+ # Find the first line in the tree node.
+ lineno = node.lineno
+ for n in node.getChildNodes():
+ f = self.getFirstLine(n)
+ if lineno and f:
+ lineno = min(lineno, f)
+ else:
+ lineno = lineno or f
+ return lineno
+
+ def getLastLine(self, node):
+ # Find the first line in the tree node.
+ lineno = node.lineno
+ for n in node.getChildNodes():
+ lineno = max(lineno, self.getLastLine(n))
+ return lineno
+
+ def doStatement(self, node):
+ self.recordLine(self.getFirstLine(node))
+
+ visitAssert = visitAssign = visitAssTuple = visitPrint = \
+ visitPrintnl = visitRaise = visitSubscript = visitDecorators = \
+ doStatement
+
+ def visitPass(self, node):
+ # Pass statements have weird interactions with docstrings. If this
+ # pass statement is part of one of those pairs, claim that the statement
+ # is on the later of the two lines.
+ l = node.lineno
+ if l:
+ lines = self.suite_spots.get(l, [l,l])
+ self.statements[lines[1]] = 1
+
+ def visitDiscard(self, node):
+ # Discard nodes are statements that execute an expression, but then
+ # discard the results. This includes function calls, so we can't
+ # ignore them all. But if the expression is a constant, the statement
+ # won't be "executed", so don't count it now.
+ if node.expr.__class__.__name__ != 'Const':
+ self.doStatement(node)
+
+ def recordNodeLine(self, node):
+ # Stmt nodes often have None, but shouldn't claim the first line of
+ # their children (because the first child might be an ignorable line
+ # like "global a").
+ if node.__class__.__name__ != 'Stmt':
+ return self.recordLine(self.getFirstLine(node))
+ else:
+ return 0
+
+ def recordLine(self, lineno):
+ # Returns a bool, whether the line is included or excluded.
+ if lineno:
+ # Multi-line tests introducing suites have to get charged to their
+ # keyword.
+ if lineno in self.suite_spots:
+ lineno = self.suite_spots[lineno][0]
+ # If we're inside an excluded suite, record that this line was
+ # excluded.
+ if self.excluding_suite:
+ self.excluded[lineno] = 1
+ return 0
+ # If this line is excluded, or suite_spots maps this line to
+ # another line that is exlcuded, then we're excluded.
+ elif self.excluded.has_key(lineno) or \
+ self.suite_spots.has_key(lineno) and \
+ self.excluded.has_key(self.suite_spots[lineno][1]):
+ return 0
+ # Otherwise, this is an executable line.
+ else:
+ self.statements[lineno] = 1
+ return 1
+ return 0
+
+ default = recordNodeLine
+
+ def recordAndDispatch(self, node):
+ self.recordNodeLine(node)
+ self.dispatch(node)
+
+ def doSuite(self, intro, body, exclude=0):
+ exsuite = self.excluding_suite
+ if exclude or (intro and not self.recordNodeLine(intro)):
+ self.excluding_suite = 1
+ self.recordAndDispatch(body)
+ self.excluding_suite = exsuite
+
+ def doPlainWordSuite(self, prevsuite, suite):
+ # Finding the exclude lines for else's is tricky, because they aren't
+ # present in the compiler parse tree. Look at the previous suite,
+ # and find its last line. If any line between there and the else's
+ # first line are excluded, then we exclude the else.
+ lastprev = self.getLastLine(prevsuite)
+ firstelse = self.getFirstLine(suite)
+ for l in range(lastprev+1, firstelse):
+ if self.suite_spots.has_key(l):
+ self.doSuite(None, suite, exclude=self.excluded.has_key(l))
+ break
+ else:
+ self.doSuite(None, suite)
+
+ def doElse(self, prevsuite, node):
+ if node.else_:
+ self.doPlainWordSuite(prevsuite, node.else_)
+
+ def visitFor(self, node):
+ self.doSuite(node, node.body)
+ self.doElse(node.body, node)
+
+ visitWhile = visitFor
+
+ def visitIf(self, node):
+ # The first test has to be handled separately from the rest.
+ # The first test is credited to the line with the "if", but the others
+ # are credited to the line with the test for the elif.
+ self.doSuite(node, node.tests[0][1])
+ for t, n in node.tests[1:]:
+ self.doSuite(t, n)
+ self.doElse(node.tests[-1][1], node)
+
+ def visitTryExcept(self, node):
+ self.doSuite(node, node.body)
+ for i in range(len(node.handlers)):
+ a, b, h = node.handlers[i]
+ if not a:
+ # It's a plain "except:". Find the previous suite.
+ if i > 0:
+ prev = node.handlers[i-1][2]
+ else:
+ prev = node.body
+ self.doPlainWordSuite(prev, h)
+ else:
+ self.doSuite(a, h)
+ self.doElse(node.handlers[-1][2], node)
+
+ def visitTryFinally(self, node):
+ self.doSuite(node, node.body)
+ self.doPlainWordSuite(node.body, node.final)
+
+ def visitWith(self, node):
+ self.doSuite(node, node.body)
+
+ def visitGlobal(self, node):
+ # "global" statements don't execute like others (they don't call the
+ # trace function), so don't record their line numbers.
+ pass
+
+the_coverage = None
+
+class CoverageException(Exception):
+ pass
+
+class coverage:
+ # Name of the cache file (unless environment variable is set).
+ cache_default = ".coverage"
+
+ # Environment variable naming the cache file.
+ cache_env = "COVERAGE_FILE"
+
+ # A dictionary with an entry for (Python source file name, line number
+ # in that file) if that line has been executed.
+ c = {}
+
+ # A map from canonical Python source file name to a dictionary in
+ # which there's an entry for each line number that has been
+ # executed.
+ cexecuted = {}
+
+ # Cache of results of calling the analysis2() method, so that you can
+ # specify both -r and -a without doing double work.
+ analysis_cache = {}
+
+ # Cache of results of calling the canonical_filename() method, to
+ # avoid duplicating work.
+ canonical_filename_cache = {}
+
+ def __init__(self):
+ global the_coverage
+ if the_coverage:
+ raise CoverageException("Only one coverage object allowed.")
+ self.usecache = 1
+ self.cache = None
+ self.parallel_mode = False
+ self.exclude_re = ''
+ self.nesting = 0
+ self.cstack = []
+ self.xstack = []
+ self.relative_dir = self.abs_file(os.curdir)+os.sep
+ self.exclude('# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]')
+
+ # t(f, x, y). This method is passed to sys.settrace as a trace function.
+ # See [van Rossum 2001-07-20b, 9.2] for an explanation of sys.settrace and
+ # the arguments and return value of the trace function.
+ # See [van Rossum 2001-07-20a, 3.2] for a description of frame and code
+ # objects.
+
+ def t(self, f, w, unused): #pragma: no cover
+ if w == 'line':
+ self.c[(f.f_code.co_filename, f.f_lineno)] = 1
+ #-for c in self.cstack:
+ #- c[(f.f_code.co_filename, f.f_lineno)] = 1
+ return self.t
+
+ def help(self, error=None): #pragma: no cover
+ if error:
+ print error
+ print
+ print __doc__
+ sys.exit(1)
+
+ def command_line(self, argv, help_fn=None):
+ import getopt
+ help_fn = help_fn or self.help
+ settings = {}
+ optmap = {
+ '-a': 'annotate',
+ '-c': 'collect',
+ '-d:': 'directory=',
+ '-e': 'erase',
+ '-h': 'help',
+ '-i': 'ignore-errors',
+ '-m': 'show-missing',
+ '-p': 'parallel-mode',
+ '-r': 'report',
+ '-x': 'execute',
+ '-o:': 'omit=',
+ }
+ short_opts = string.join(map(lambda o: o[1:], optmap.keys()), '')
+ long_opts = optmap.values()
+ options, args = getopt.getopt(argv, short_opts, long_opts)
+ for o, a in options:
+ if optmap.has_key(o):
+ settings[optmap[o]] = 1
+ elif optmap.has_key(o + ':'):
+ settings[optmap[o + ':']] = a
+ elif o[2:] in long_opts:
+ settings[o[2:]] = 1
+ elif o[2:] + '=' in long_opts:
+ settings[o[2:]+'='] = a
+ else: #pragma: no cover
+ pass # Can't get here, because getopt won't return anything unknown.
+
+ if settings.get('help'):
+ help_fn()
+
+ for i in ['erase', 'execute']:
+ for j in ['annotate', 'report', 'collect']:
+ if settings.get(i) and settings.get(j):
+ help_fn("You can't specify the '%s' and '%s' "
+ "options at the same time." % (i, j))
+
+ args_needed = (settings.get('execute')
+ or settings.get('annotate')
+ or settings.get('report'))
+ action = (settings.get('erase')
+ or settings.get('collect')
+ or args_needed)
+ if not action:
+ help_fn("You must specify at least one of -e, -x, -c, -r, or -a.")
+ if not args_needed and args:
+ help_fn("Unexpected arguments: %s" % " ".join(args))
+
+ self.parallel_mode = settings.get('parallel-mode')
+ self.get_ready()
+
+ if settings.get('erase'):
+ self.erase()
+ if settings.get('execute'):
+ if not args:
+ help_fn("Nothing to do.")
+ sys.argv = args
+ self.start()
+ import __main__
+ sys.path[0] = os.path.dirname(sys.argv[0])
+ execfile(sys.argv[0], __main__.__dict__)
+ if settings.get('collect'):
+ self.collect()
+ if not args:
+ args = self.cexecuted.keys()
+
+ ignore_errors = settings.get('ignore-errors')
+ show_missing = settings.get('show-missing')
+ directory = settings.get('directory=')
+
+ omit = settings.get('omit=')
+ if omit is not None:
+ omit = [self.abs_file(p) for p in omit.split(',')]
+ else:
+ omit = []
+
+ if settings.get('report'):
+ self.report(args, show_missing, ignore_errors, omit_prefixes=omit)
+ if settings.get('annotate'):
+ self.annotate(args, directory, ignore_errors, omit_prefixes=omit)
+
+ def use_cache(self, usecache, cache_file=None):
+ self.usecache = usecache
+ if cache_file and not self.cache:
+ self.cache_default = cache_file
+
+ def get_ready(self, parallel_mode=False):
+ if self.usecache and not self.cache:
+ self.cache = os.environ.get(self.cache_env, self.cache_default)
+ if self.parallel_mode:
+ self.cache += "." + gethostname() + "." + str(os.getpid())
+ self.restore()
+ self.analysis_cache = {}
+
+ def start(self, parallel_mode=False):
+ self.get_ready()
+ if self.nesting == 0: #pragma: no cover
+ sys.settrace(self.t)
+ if hasattr(threading, 'settrace'):
+ threading.settrace(self.t)
+ self.nesting += 1
+
+ def stop(self):
+ self.nesting -= 1
+ if self.nesting == 0: #pragma: no cover
+ sys.settrace(None)
+ if hasattr(threading, 'settrace'):
+ threading.settrace(None)
+
+ def erase(self):
+ self.get_ready()
+ self.c = {}
+ self.analysis_cache = {}
+ self.cexecuted = {}
+ if self.cache and os.path.exists(self.cache):
+ os.remove(self.cache)
+
+ def exclude(self, re):
+ if self.exclude_re:
+ self.exclude_re += "|"
+ self.exclude_re += "(" + re + ")"
+
+ def begin_recursive(self):
+ self.cstack.append(self.c)
+ self.xstack.append(self.exclude_re)
+
+ def end_recursive(self):
+ self.c = self.cstack.pop()
+ self.exclude_re = self.xstack.pop()
+
+ # save(). Save coverage data to the coverage cache.
+
+ def save(self):
+ if self.usecache and self.cache:
+ self.canonicalize_filenames()
+ cache = open(self.cache, 'wb')
+ import marshal
+ marshal.dump(self.cexecuted, cache)
+ cache.close()
+
+ # restore(). Restore coverage data from the coverage cache (if it exists).
+
+ def restore(self):
+ self.c = {}
+ self.cexecuted = {}
+ assert self.usecache
+ if os.path.exists(self.cache):
+ self.cexecuted = self.restore_file(self.cache)
+
+ def restore_file(self, file_name):
+ try:
+ cache = open(file_name, 'rb')
+ import marshal
+ cexecuted = marshal.load(cache)
+ cache.close()
+ if isinstance(cexecuted, types.DictType):
+ return cexecuted
+ else:
+ return {}
+ except:
+ return {}
+
+ # collect(). Collect data in multiple files produced by parallel mode
+
+ def collect(self):
+ cache_dir, local = os.path.split(self.cache)
+ for f in os.listdir(cache_dir or '.'):
+ if not f.startswith(local):
+ continue
+
+ full_path = os.path.join(cache_dir, f)
+ cexecuted = self.restore_file(full_path)
+ self.merge_data(cexecuted)
+
+ def merge_data(self, new_data):
+ for file_name, file_data in new_data.items():
+ if self.cexecuted.has_key(file_name):
+ self.merge_file_data(self.cexecuted[file_name], file_data)
+ else:
+ self.cexecuted[file_name] = file_data
+
+ def merge_file_data(self, cache_data, new_data):
+ for line_number in new_data.keys():
+ if not cache_data.has_key(line_number):
+ cache_data[line_number] = new_data[line_number]
+
+ def abs_file(self, filename):
+ """ Helper function to turn a filename into an absolute normalized
+ filename.
+ """
+ return os.path.normcase(os.path.abspath(os.path.realpath(filename)))
+
+ def get_zip_data(self, filename):
+ """ Get data from `filename` if it is a zip file path, or return None
+ if it is not.
+ """
+ markers = ['.zip'+os.sep, '.egg'+os.sep]
+ for marker in markers:
+ if marker in filename:
+ parts = filename.split(marker)
+ try:
+ zi = zipimport.zipimporter(parts[0]+marker[:-1])
+ except zipimport.ZipImportError:
+ continue
+ try:
+ data = zi.get_data(parts[1])
+ except IOError:
+ continue
+ return data
+ return None
+
+ # canonical_filename(filename). Return a canonical filename for the
+ # file (that is, an absolute path with no redundant components and
+ # normalized case). See [GDR 2001-12-04b, 3.3].
+
+ def canonical_filename(self, filename):
+ if not self.canonical_filename_cache.has_key(filename):
+ f = filename
+ if os.path.isabs(f) and not os.path.exists(f):
+ if not self.get_zip_data(f):
+ f = os.path.basename(f)
+ if not os.path.isabs(f):
+ for path in [os.curdir] + sys.path:
+ g = os.path.join(path, f)
+ if os.path.exists(g):
+ f = g
+ break
+ cf = self.abs_file(f)
+ self.canonical_filename_cache[filename] = cf
+ return self.canonical_filename_cache[filename]
+
+ # canonicalize_filenames(). Copy results from "c" to "cexecuted",
+ # canonicalizing filenames on the way. Clear the "c" map.
+
+ def canonicalize_filenames(self):
+ for filename, lineno in self.c.keys():
+ if filename == '<string>':
+ # Can't do anything useful with exec'd strings, so skip them.
+ continue
+ f = self.canonical_filename(filename)
+ if not self.cexecuted.has_key(f):
+ self.cexecuted[f] = {}
+ self.cexecuted[f][lineno] = 1
+ self.c = {}
+
+ # morf_filename(morf). Return the filename for a module or file.
+
+ def morf_filename(self, morf):
+ if hasattr(morf, '__file__'):
+ f = morf.__file__
+ else:
+ f = morf
+ return self.canonical_filename(f)
+
+ # analyze_morf(morf). Analyze the module or filename passed as
+ # the argument. If the source code can't be found, raise an error.
+ # Otherwise, return a tuple of (1) the canonical filename of the
+ # source code for the module, (2) a list of lines of statements
+ # in the source code, (3) a list of lines of excluded statements,
+ # and (4), a map of line numbers to multi-line line number ranges, for
+ # statements that cross lines.
+
+ def analyze_morf(self, morf):
+ if self.analysis_cache.has_key(morf):
+ return self.analysis_cache[morf]
+ filename = self.morf_filename(morf)
+ ext = os.path.splitext(filename)[1]
+ source, sourcef = None, None
+ if ext == '.pyc':
+ if not os.path.exists(filename[:-1]):
+ source = self.get_zip_data(filename[:-1])
+ if not source:
+ raise CoverageException(
+ "No source for compiled code '%s'." % filename
+ )
+ filename = filename[:-1]
+ if not source:
+ sourcef = open(filename, 'rU')
+ source = sourcef.read()
+ try:
+ lines, excluded_lines, line_map = self.find_executable_statements(
+ source, exclude=self.exclude_re
+ )
+ except SyntaxError, synerr:
+ raise CoverageException(
+ "Couldn't parse '%s' as Python source: '%s' at line %d" %
+ (filename, synerr.msg, synerr.lineno)
+ )
+ if sourcef:
+ sourcef.close()
+ result = filename, lines, excluded_lines, line_map
+ self.analysis_cache[morf] = result
+ return result
+
+ def first_line_of_tree(self, tree):
+ while True:
+ if len(tree) == 3 and type(tree[2]) == type(1):
+ return tree[2]
+ tree = tree[1]
+
+ def last_line_of_tree(self, tree):
+ while True:
+ if len(tree) == 3 and type(tree[2]) == type(1):
+ return tree[2]
+ tree = tree[-1]
+
+ def find_docstring_pass_pair(self, tree, spots):
+ for i in range(1, len(tree)):
+ if self.is_string_constant(tree[i]) and self.is_pass_stmt(tree[i+1]):
+ first_line = self.first_line_of_tree(tree[i])
+ last_line = self.last_line_of_tree(tree[i+1])
+ self.record_multiline(spots, first_line, last_line)
+
+ def is_string_constant(self, tree):
+ try:
+ return tree[0] == symbol.stmt and tree[1][1][1][0] == symbol.expr_stmt
+ except:
+ return False
+
+ def is_pass_stmt(self, tree):
+ try:
+ return tree[0] == symbol.stmt and tree[1][1][1][0] == symbol.pass_stmt
+ except:
+ return False
+
+ def record_multiline(self, spots, i, j):
+ for l in range(i, j+1):
+ spots[l] = (i, j)
+
+ def get_suite_spots(self, tree, spots):
+ """ Analyze a parse tree to find suite introducers which span a number
+ of lines.
+ """
+ for i in range(1, len(tree)):
+ if type(tree[i]) == type(()):
+ if tree[i][0] == symbol.suite:
+ # Found a suite, look back for the colon and keyword.
+ lineno_colon = lineno_word = None
+ for j in range(i-1, 0, -1):
+ if tree[j][0] == token.COLON:
+ # Colons are never executed themselves: we want the
+ # line number of the last token before the colon.
+ lineno_colon = self.last_line_of_tree(tree[j-1])
+ elif tree[j][0] == token.NAME:
+ if tree[j][1] == 'elif':
+ # Find the line number of the first non-terminal
+ # after the keyword.
+ t = tree[j+1]
+ while t and token.ISNONTERMINAL(t[0]):
+ t = t[1]
+ if t:
+ lineno_word = t[2]
+ else:
+ lineno_word = tree[j][2]
+ break
+ elif tree[j][0] == symbol.except_clause:
+ # "except" clauses look like:
+ # ('except_clause', ('NAME', 'except', lineno), ...)
+ if tree[j][1][0] == token.NAME:
+ lineno_word = tree[j][1][2]
+ break
+ if lineno_colon and lineno_word:
+ # Found colon and keyword, mark all the lines
+ # between the two with the two line numbers.
+ self.record_multiline(spots, lineno_word, lineno_colon)
+
+ # "pass" statements are tricky: different versions of Python
+ # treat them differently, especially in the common case of a
+ # function with a doc string and a single pass statement.
+ self.find_docstring_pass_pair(tree[i], spots)
+
+ elif tree[i][0] == symbol.simple_stmt:
+ first_line = self.first_line_of_tree(tree[i])
+ last_line = self.last_line_of_tree(tree[i])
+ if first_line != last_line:
+ self.record_multiline(spots, first_line, last_line)
+ self.get_suite_spots(tree[i], spots)
+
+ def find_executable_statements(self, text, exclude=None):
+ # Find lines which match an exclusion pattern.
+ excluded = {}
+ suite_spots = {}
+ if exclude:
+ reExclude = re.compile(exclude)
+ lines = text.split('\n')
+ for i in range(len(lines)):
+ if reExclude.search(lines[i]):
+ excluded[i+1] = 1
+
+ # Parse the code and analyze the parse tree to find out which statements
+ # are multiline, and where suites begin and end.
+ import parser
+ tree = parser.suite(text+'\n\n').totuple(1)
+ self.get_suite_spots(tree, suite_spots)
+ #print "Suite spots:", suite_spots
+
+ # Use the compiler module to parse the text and find the executable
+ # statements. We add newlines to be impervious to final partial lines.
+ statements = {}
+ ast = compiler.parse(text+'\n\n')
+ visitor = StatementFindingAstVisitor(statements, excluded, suite_spots)
+ compiler.walk(ast, visitor, walker=visitor)
+
+ lines = statements.keys()
+ lines.sort()
+ excluded_lines = excluded.keys()
+ excluded_lines.sort()
+ return lines, excluded_lines, suite_spots
+
+ # format_lines(statements, lines). Format a list of line numbers
+ # for printing by coalescing groups of lines as long as the lines
+ # represent consecutive statements. This will coalesce even if
+ # there are gaps between statements, so if statements =
+ # [1,2,3,4,5,10,11,12,13,14] and lines = [1,2,5,10,11,13,14] then
+ # format_lines will return "1-2, 5-11, 13-14".
+
+ def format_lines(self, statements, lines):
+ pairs = []
+ i = 0
+ j = 0
+ start = None
+ pairs = []
+ while i < len(statements) and j < len(lines):
+ if statements[i] == lines[j]:
+ if start == None:
+ start = lines[j]
+ end = lines[j]
+ j = j + 1
+ elif start:
+ pairs.append((start, end))
+ start = None
+ i = i + 1
+ if start:
+ pairs.append((start, end))
+ def stringify(pair):
+ start, end = pair
+ if start == end:
+ return "%d" % start
+ else:
+ return "%d-%d" % (start, end)
+ ret = string.join(map(stringify, pairs), ", ")
+ return ret
+
+ # Backward compatibility with version 1.
+ def analysis(self, morf):
+ f, s, _, m, mf = self.analysis2(morf)
+ return f, s, m, mf
+
+ def analysis2(self, morf):
+ filename, statements, excluded, line_map = self.analyze_morf(morf)
+ self.canonicalize_filenames()
+ if not self.cexecuted.has_key(filename):
+ self.cexecuted[filename] = {}
+ missing = []
+ for line in statements:
+ lines = line_map.get(line, [line, line])
+ for l in range(lines[0], lines[1]+1):
+ if self.cexecuted[filename].has_key(l):
+ break
+ else:
+ missing.append(line)
+ return (filename, statements, excluded, missing,
+ self.format_lines(statements, missing))
+
+ def relative_filename(self, filename):
+ """ Convert filename to relative filename from self.relative_dir.
+ """
+ return filename.replace(self.relative_dir, "")
+
+ def morf_name(self, morf):
+ """ Return the name of morf as used in report.
+ """
+ if hasattr(morf, '__name__'):
+ return morf.__name__
+ else:
+ return self.relative_filename(os.path.splitext(morf)[0])
+
+ def filter_by_prefix(self, morfs, omit_prefixes):
+ """ Return list of morfs where the morf name does not begin
+ with any one of the omit_prefixes.
+ """
+ filtered_morfs = []
+ for morf in morfs:
+ for prefix in omit_prefixes:
+ if self.morf_name(morf).startswith(prefix):
+ break
+ else:
+ filtered_morfs.append(morf)
+
+ return filtered_morfs
+
+ def morf_name_compare(self, x, y):
+ return cmp(self.morf_name(x), self.morf_name(y))
+
+ def report(self, morfs, show_missing=1, ignore_errors=0, file=None, omit_prefixes=[]):
+ if not isinstance(morfs, types.ListType):
+ morfs = [morfs]
+ # On windows, the shell doesn't expand wildcards. Do it here.
+ globbed = []
+ for morf in morfs:
+ if isinstance(morf, strclass):
+ globbed.extend(glob.glob(morf))
+ else:
+ globbed.append(morf)
+ morfs = globbed
+
+ morfs = self.filter_by_prefix(morfs, omit_prefixes)
+ morfs.sort(self.morf_name_compare)
+
+ max_name = max([5,] + map(len, map(self.morf_name, morfs)))
+ fmt_name = "%%- %ds " % max_name
+ fmt_err = fmt_name + "%s: %s"
+ header = fmt_name % "Name" + " Stmts Exec Cover"
+ fmt_coverage = fmt_name + "% 6d % 6d % 5d%%"
+ if show_missing:
+ header = header + " Missing"
+ fmt_coverage = fmt_coverage + " %s"
+ if not file:
+ file = sys.stdout
+ print >>file, header
+ print >>file, "-" * len(header)
+ total_statements = 0
+ total_executed = 0
+ for morf in morfs:
+ name = self.morf_name(morf)
+ try:
+ _, statements, _, missing, readable = self.analysis2(morf)
+ n = len(statements)
+ m = n - len(missing)
+ if n > 0:
+ pc = 100.0 * m / n
+ else:
+ pc = 100.0
+ args = (name, n, m, pc)
+ if show_missing:
+ args = args + (readable,)
+ print >>file, fmt_coverage % args
+ total_statements = total_statements + n
+ total_executed = total_executed + m
+ except KeyboardInterrupt: #pragma: no cover
+ raise
+ except:
+ if not ignore_errors:
+ typ, msg = sys.exc_info()[:2]
+ print >>file, fmt_err % (name, typ, msg)
+ if len(morfs) > 1:
+ print >>file, "-" * len(header)
+ if total_statements > 0:
+ pc = 100.0 * total_executed / total_statements
+ else:
+ pc = 100.0
+ args = ("TOTAL", total_statements, total_executed, pc)
+ if show_missing:
+ args = args + ("",)
+ print >>file, fmt_coverage % args
+
+ # annotate(morfs, ignore_errors).
+
+ blank_re = re.compile(r"\s*(#|$)")
+ else_re = re.compile(r"\s*else\s*:\s*(#|$)")
+
+ def annotate(self, morfs, directory=None, ignore_errors=0, omit_prefixes=[]):
+ morfs = self.filter_by_prefix(morfs, omit_prefixes)
+ for morf in morfs:
+ try:
+ filename, statements, excluded, missing, _ = self.analysis2(morf)
+ self.annotate_file(filename, statements, excluded, missing, directory)
+ except KeyboardInterrupt:
+ raise
+ except:
+ if not ignore_errors:
+ raise
+
+ def annotate_file(self, filename, statements, excluded, missing, directory=None):
+ source = open(filename, 'r')
+ if directory:
+ dest_file = os.path.join(directory,
+ os.path.basename(filename)
+ + ',cover')
+ else:
+ dest_file = filename + ',cover'
+ dest = open(dest_file, 'w')
+ lineno = 0
+ i = 0
+ j = 0
+ covered = 1
+ while 1:
+ line = source.readline()
+ if line == '':
+ break
+ lineno = lineno + 1
+ while i < len(statements) and statements[i] < lineno:
+ i = i + 1
+ while j < len(missing) and missing[j] < lineno:
+ j = j + 1
+ if i < len(statements) and statements[i] == lineno:
+ covered = j >= len(missing) or missing[j] > lineno
+ if self.blank_re.match(line):
+ dest.write(' ')
+ elif self.else_re.match(line):
+ # Special logic for lines containing only 'else:'.
+ # See [GDR 2001-12-04b, 3.2].
+ if i >= len(statements) and j >= len(missing):
+ dest.write('! ')
+ elif i >= len(statements) or j >= len(missing):
+ dest.write('> ')
+ elif statements[i] == missing[j]:
+ dest.write('! ')
+ else:
+ dest.write('> ')
+ elif lineno in excluded:
+ dest.write('- ')
+ elif covered:
+ dest.write('> ')
+ else:
+ dest.write('! ')
+ dest.write(line)
+ source.close()
+ dest.close()
+
+# Singleton object.
+the_coverage = coverage()
+
+# Module functions call methods in the singleton object.
+def use_cache(*args, **kw):
+ return the_coverage.use_cache(*args, **kw)
+
+def start(*args, **kw):
+ return the_coverage.start(*args, **kw)
+
+def stop(*args, **kw):
+ return the_coverage.stop(*args, **kw)
+
+def erase(*args, **kw):
+ return the_coverage.erase(*args, **kw)
+
+def begin_recursive(*args, **kw):
+ return the_coverage.begin_recursive(*args, **kw)
+
+def end_recursive(*args, **kw):
+ return the_coverage.end_recursive(*args, **kw)
+
+def exclude(*args, **kw):
+ return the_coverage.exclude(*args, **kw)
+
+def analysis(*args, **kw):
+ return the_coverage.analysis(*args, **kw)
+
+def analysis2(*args, **kw):
+ return the_coverage.analysis2(*args, **kw)
+
+def report(*args, **kw):
+ return the_coverage.report(*args, **kw)
+
+def annotate(*args, **kw):
+ return the_coverage.annotate(*args, **kw)
+
+def annotate_file(*args, **kw):
+ return the_coverage.annotate_file(*args, **kw)
+
+# Save coverage data when Python exits. (The atexit module wasn't
+# introduced until Python 2.0, so use sys.exitfunc when it's not
+# available.)
+try:
+ import atexit
+ atexit.register(the_coverage.save)
+except ImportError:
+ sys.exitfunc = the_coverage.save
+
+def main():
+ the_coverage.command_line(sys.argv[1:])
+
+# Command-line interface.
+if __name__ == '__main__':
+ main()
+
+
+# A. REFERENCES
+#
+# [GDR 2001-12-04a] "Statement coverage for Python"; Gareth Rees;
+# Ravenbrook Limited; 2001-12-04;
+# <http://www.nedbatchelder.com/code/modules/rees-coverage.html>.
+#
+# [GDR 2001-12-04b] "Statement coverage for Python: design and
+# analysis"; Gareth Rees; Ravenbrook Limited; 2001-12-04;
+# <http://www.nedbatchelder.com/code/modules/rees-design.html>.
+#
+# [van Rossum 2001-07-20a] "Python Reference Manual (releae 2.1.1)";
+# Guide van Rossum; 2001-07-20;
+# <http://www.python.org/doc/2.1.1/ref/ref.html>.
+#
+# [van Rossum 2001-07-20b] "Python Library Reference"; Guido van Rossum;
+# 2001-07-20; <http://www.python.org/doc/2.1.1/lib/lib.html>.
+#
+#
+# B. DOCUMENT HISTORY
+#
+# 2001-12-04 GDR Created.
+#
+# 2001-12-06 GDR Added command-line interface and source code
+# annotation.
+#
+# 2001-12-09 GDR Moved design and interface to separate documents.
+#
+# 2001-12-10 GDR Open cache file as binary on Windows. Allow
+# simultaneous -e and -x, or -a and -r.
+#
+# 2001-12-12 GDR Added command-line help. Cache analysis so that it
+# only needs to be done once when you specify -a and -r.
+#
+# 2001-12-13 GDR Improved speed while recording. Portable between
+# Python 1.5.2 and 2.1.1.
+#
+# 2002-01-03 GDR Module-level functions work correctly.
+#
+# 2002-01-07 GDR Update sys.path when running a file with the -x option,
+# so that it matches the value the program would get if it were run on
+# its own.
+#
+# 2004-12-12 NMB Significant code changes.
+# - Finding executable statements has been rewritten so that docstrings and
+# other quirks of Python execution aren't mistakenly identified as missing
+# lines.
+# - Lines can be excluded from consideration, even entire suites of lines.
+# - The filesystem cache of covered lines can be disabled programmatically.
+# - Modernized the code.
+#
+# 2004-12-14 NMB Minor tweaks. Return 'analysis' to its original behavior
+# and add 'analysis2'. Add a global for 'annotate', and factor it, adding
+# 'annotate_file'.
+#
+# 2004-12-31 NMB Allow for keyword arguments in the module global functions.
+# Thanks, Allen.
+#
+# 2005-12-02 NMB Call threading.settrace so that all threads are measured.
+# Thanks Martin Fuzzey. Add a file argument to report so that reports can be
+# captured to a different destination.
+#
+# 2005-12-03 NMB coverage.py can now measure itself.
+#
+# 2005-12-04 NMB Adapted Greg Rogers' patch for using relative filenames,
+# and sorting and omitting files to report on.
+#
+# 2006-07-23 NMB Applied Joseph Tate's patch for function decorators.
+#
+# 2006-08-21 NMB Applied Sigve Tjora and Mark van der Wal's fixes for argument
+# handling.
+#
+# 2006-08-22 NMB Applied Geoff Bache's parallel mode patch.
+#
+# 2006-08-23 NMB Refactorings to improve testability. Fixes to command-line
+# logic for parallel mode and collect.
+#
+# 2006-08-25 NMB "#pragma: nocover" is excluded by default.
+#
+# 2006-09-10 NMB Properly ignore docstrings and other constant expressions that
+# appear in the middle of a function, a problem reported by Tim Leslie.
+# Minor changes to avoid lint warnings.
+#
+# 2006-09-17 NMB coverage.erase() shouldn't clobber the exclude regex.
+# Change how parallel mode is invoked, and fix erase() so that it erases the
+# cache when called programmatically.
+#
+# 2007-07-21 NMB In reports, ignore code executed from strings, since we can't
+# do anything useful with it anyway.
+# Better file handling on Linux, thanks Guillaume Chazarain.
+# Better shell support on Windows, thanks Noel O'Boyle.
+# Python 2.2 support maintained, thanks Catherine Proulx.
+#
+# 2007-07-22 NMB Python 2.5 now fully supported. The method of dealing with
+# multi-line statements is now less sensitive to the exact line that Python
+# reports during execution. Pass statements are handled specially so that their
+# disappearance during execution won't throw off the measurement.
+#
+# 2007-07-23 NMB Now Python 2.5 is *really* fully supported: the body of the
+# new with statement is counted as executable.
+#
+# 2007-07-29 NMB Better packaging.
+#
+# 2007-09-30 NMB Don't try to predict whether a file is Python source based on
+# the extension. Extensionless files are often Pythons scripts. Instead, simply
+# parse the file and catch the syntax errors. Hat tip to Ben Finney.
+#
+# 2008-05-25 NMB Open files in rU mode to avoid line ending craziness.
+# Thanks, Edward Loper.
+#
+# 2008-09-14 NMB Add support for finding source files in eggs.
+# Don't check for morf's being instances of ModuleType, instead use duck typing
+# so that pseudo-modules can participate. Thanks, Imri Goldberg.
+# Use os.realpath as part of the fixing of filenames so that symlinks won't
+# confuse things. Thanks, Patrick Mezard.
+#
+#
+# C. COPYRIGHT AND LICENCE
+#
+# Copyright 2001 Gareth Rees. All rights reserved.
+# Copyright 2004-2008 Ned Batchelder. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the
+# distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGE.
+#
+# $Id: coverage.py 100 2008-10-12 12:08:22Z nedbat $
diff --git a/netaddr/tests/eui/eui.txt b/netaddr/tests/eui/eui.txt
new file mode 100644
index 0000000..e248dac
--- /dev/null
+++ b/netaddr/tests/eui/eui.txt
@@ -0,0 +1,154 @@
+=IEEE EUI-64 Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+IEEE EUI-64 tests.
+
+{{{
+
+>>> eui = EUI('00-1B-77-FF-FE-49-54-FD')
+>>> eui
+EUI('00-1B-77-FF-FE-49-54-FD')
+
+>>> eui.oui
+OUI('00-1B-77')
+
+>>> eui.ei
+'FF-FE-49-54-FD'
+
+>>> eui.eui64()
+EUI('00-1B-77-FF-FE-49-54-FD')
+
+>>> mac = EUI('00-0F-1F-12-E7-33')
+>>> ip = mac.ipv6_link_local()
+>>> ip
+IP('fe80::20f:1fff:fe12:e733/64')
+
+>>> mac.eui64()
+EUI('00-0F-1F-FF-FE-12-E7-33')
+
+}}}
+
+Individual Address Block tests.
+
+{{{
+
+>>> lower_eui = EUI('00-50-C2-05-C0-00')
+>>> upper_eui = EUI('00-50-C2-05-CF-FF')
+
+>>> lower_eui.isiab()
+True
+
+>>> str(lower_eui.oui)
+'00-50-C2'
+
+>>> str(lower_eui.iab)
+'00-50-C2-05-C0-00'
+
+>>> lower_eui.ei
+'05-C0-00'
+
+>>> int(lower_eui.oui) == 0x0050c2
+True
+
+>>> int(lower_eui.iab) == 0x0050c205c
+True
+
+>>> upper_eui.isiab()
+True
+
+>>> str(upper_eui.oui)
+'00-50-C2'
+
+>>> str(upper_eui.iab)
+'00-50-C2-05-C0-00'
+
+>>> upper_eui.ei
+'05-CF-FF'
+
+>>> int(upper_eui.oui) == 0x0050c2
+True
+
+>>> int(upper_eui.iab) == 0x0050c205c
+True
+
+}}}
+
+Constructor tests.
+
+{{{
+
+>>> eui = EUI('00-90-96-AF-CC-39')
+
+>>> eui == EUI('0-90-96-AF-CC-39')
+True
+
+>>> eui == EUI('00-90-96-af-cc-39')
+True
+
+>>> eui == EUI('00:90:96:AF:CC:39')
+True
+
+>>> eui == EUI('00:90:96:af:cc:39')
+True
+
+>>> eui == EUI('0090-96AF-CC39')
+True
+
+>>> eui == EUI('0090:96af:cc39')
+True
+
+>>> eui == EUI('009096-AFCC39')
+True
+
+>>> eui == EUI('009096:AFCC39')
+True
+
+>>> eui == EUI('009096AFCC39')
+True
+
+>>> eui == EUI('009096afcc39')
+True
+
+>>> EUI('01-00-00-00-00-00') == EUI('010000000000')
+True
+
+>>> EUI('01-00-00-00-00-00') == EUI('10000000000')
+True
+
+>>> EUI('01-00-00-01-00-00') == EUI('010000:010000')
+True
+
+>>> EUI('01-00-00-01-00-00') == EUI('10000:10000')
+True
+
+}}}
+
+EUI-48 and EUI-64 indentifiers of the same value are *not* equivalent.
+
+{{{
+
+>>> eui48 = EUI('01-00-00-01-00-00')
+>>> int(eui48) == 1099511693312
+True
+
+>>> eui64 = EUI('00-00-01-00-00-01-00-00')
+>>> int(eui64) == 1099511693312
+True
+
+>>> eui48 == eui64
+False
+
+}}}
+
+Sortability
+
+{{{
+
+}}}
diff --git a/netaddr/tests/eui/tutorial.txt b/netaddr/tests/eui/tutorial.txt
new file mode 100644
index 0000000..85d910f
--- /dev/null
+++ b/netaddr/tests/eui/tutorial.txt
@@ -0,0 +1,245 @@
+=EUI (MAC) Address Tutorial=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+==Basic Operations==
+
+This EUI object represents a MAC address.
+
+{{{
+
+>>> mac = EUI('00-1B-77-49-54-FD')
+
+}}}
+
+Standard repr() access returns a Python statement that can reconstruct the MAC address object from scratch if executed in the Python interpreter.
+
+{{{
+
+>>> mac
+EUI('00-1B-77-49-54-FD')
+
+}}}
+
+Accessing the EUI object in the string context.
+
+{{{
+
+>>> str(mac)
+'00-1B-77-49-54-FD'
+
+>>> '%s' % mac
+'00-1B-77-49-54-FD'
+
+}}}
+
+Here are a few other common properties.
+
+{{{
+
+>>> str(mac), str(mac.oui), mac.ei, mac.version
+('00-1B-77-49-54-FD', '00-1B-77', '49-54-FD', 48)
+
+}}}
+
+==MAC Address Numerical Representations==
+
+You can view an individual IP address in various other formats.
+
+{{{
+
+>>> int(mac)
+117965411581L
+
+>>> hex(mac)
+'0x1b774954fd'
+
+>>> mac.bits()
+'00000000-00011011-01110111-01001001-01010100-11111101'
+
+>>> mac.bin()
+'0b1101101110111010010010101010011111101'
+
+}}}
+
+==MAC Address Formatting==
+
+It is very common to see MAC address in many different formats other than the standard IEEE EUI-48.
+
+The EUI class constructor handles all these common forms.
+
+{{{
+
+>>> EUI('00-1B-77-49-54-FD')
+EUI('00-1B-77-49-54-FD')
+
+IEEE EUI-48 lowercase format.
+
+>>> EUI('00-1b-77-49-54-fd')
+EUI('00-1B-77-49-54-FD')
+
+Common UNIX format.
+
+>>> EUI('0:1b:77:49:54:fd')
+EUI('00-1B-77-49-54-FD')
+
+Cisco triple hextet format.
+
+>>> EUI('001b:7749:54fd')
+EUI('00-1B-77-49-54-FD')
+
+>>> EUI('1b:7749:54fd')
+EUI('00-1B-77-49-54-FD')
+
+>>> EUI('1B:7749:54FD')
+EUI('00-1B-77-49-54-FD')
+
+Bare MAC addresses (no delimiters).
+
+>>> EUI('001b774954fd')
+EUI('00-1B-77-49-54-FD')
+
+>>> EUI('01B774954FD')
+EUI('00-1B-77-49-54-FD')
+
+PostreSQL format (found in documentation).
+
+>>> EUI('001B77:4954FD')
+EUI('00-1B-77-49-54-FD')
+
+}}}
+
+It is equally possible to specify a selected format for your MAC string output in the form of a 'dialect' class. It's use is similar to the dialect class used in the Python standard library csv module.
+
+{{{
+
+>>> mac = EUI('00-1B-77-49-54-FD')
+
+>>> mac
+EUI('00-1B-77-49-54-FD')
+
+>>> mac.dialect = mac_unix
+>>> mac
+EUI('0:1b:77:49:54:fd')
+
+>>> mac.dialect = mac_cisco
+>>> mac
+EUI('001b.7749.54fd')
+
+>>> mac.dialect = mac_bare
+>>> mac
+EUI('001B774954FD')
+
+>>> mac.dialect = mac_pgsql
+>>> mac
+EUI('001b77:4954fd')
+
+}}}
+
+You can of course, create your own dialect classes to customise the MAC formatting if the standard ones do not suit your needs.
+
+Here's a tweaked UNIX MAC dialect that generates uppercase, zero-filled octets.
+
+{{{
+
+>>> class mac_custom(mac_unix): pass
+>>> mac_custom.word_fmt = '%.2X'
+>>> mac = EUI('00-1B-77-49-54-FD', dialect=mac_custom)
+>>> mac
+EUI('00:1B:77:49:54:FD')
+
+}}}
+
+==Looking Up EUI Organisational Data==
+
+EUI objects provide an interface to the OUI (Organisationally Unique Identifier) and IAB (Individual Address Block) registration databases available from the IEEE.
+
+Here is how you query an OUI with the EUI interface.
+
+{{{
+
+>>> mac = EUI('00-1B-77-49-54-FD')
+>>> oui = mac.oui
+>>> oui
+OUI('00-1B-77')
+
+>>> import pprint
+
+>>> pprint.pprint(oui.registration)
+[{'address': ['Lot 8, Jalan Hi-Tech 2/3',
+ 'Kulim Hi-Tech Park',
+ 'Kulim Kedah 09000',
+ 'MALAYSIA'],
+ 'idx': 7031L,
+ 'offset': ...,
+ 'org': 'Intel Corporate',
+ 'oui': '00-1B-77',
+ 'size': 160}]
+
+>>> oui.registration[0]['org']
+'Intel Corporate'
+
+}}}
+
+That last lookup is a little painful so the OUI object provides some handy methods (that mask multiple OUI registrations when you aren't interested in them).
+
+{{{
+
+>>> oui.organisation()
+'Intel Corporate'
+
+>>> oui.org()
+'Intel Corporate'
+
+}}}
+
+You can also use OUI objects directly without going through the EUI interface.
+
+A few OUI records have multiple registrations against them. I'm not sure if this is recording historical information or just a quirk of the IEEE reigstration process.
+
+This example show you how you access them individually by specifying an index number.
+
+{{{
+
+>>> oui = OUI(524336) # OUI constructor accepts integer values too.
+
+>>> oui
+OUI('08-00-30')
+
+>>> pprint.pprint(oui.registration)
+[{'address': ['2380 N. ROSE AVENUE', 'OXNARD CA 93010', 'UNITED STATES'],
+ 'idx': 524336,
+ 'offset': 1991363,
+ 'org': 'NETWORK RESEARCH CORPORATION',
+ 'oui': '08-00-30',
+ 'size': 161},
+ {'address': ['CH-1211 GENEVE 23', 'SUISSE/SWITZ', 'SWITZERLAND'],
+ 'idx': 524336,
+ 'offset': 1991524,
+ 'org': 'CERN',
+ 'oui': '08-00-30',
+ 'size': 106},
+ {'address': ['GPO BOX 2476V', 'MELBOURNE VIC 3001', 'AUSTRALIA'],
+ 'idx': 524336,
+ 'offset': 1991630,
+ 'org': 'ROYAL MELBOURNE INST OF TECH',
+ 'oui': '08-00-30',
+ 'size': 154}]
+
+>>> oui.org(0)
+'NETWORK RESEARCH CORPORATION'
+
+>>> for i in range(oui.reg_count):
+... str(oui), oui.org(i)
+...
+('08-00-30', 'NETWORK RESEARCH CORPORATION')
+('08-00-30', 'CERN')
+('08-00-30', 'ROYAL MELBOURNE INST OF TECH')
+
+}}}
diff --git a/netaddr/tests/ip/abbreviated.txt b/netaddr/tests/ip/abbreviated.txt
new file mode 100644
index 0000000..7a9a59d
--- /dev/null
+++ b/netaddr/tests/ip/abbreviated.txt
@@ -0,0 +1,144 @@
+=Abbreviated CIDR Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+Abbreviation tests.
+
+{{{
+
+>>> ranges = (
+... (IP('::'), IP('::')),
+... (IP('0.0.0.0'), IP('255.255.255.255')),
+... (IP('::'), IP('::FFFF')),
+... (IP('0.0.0.0'), IP('0.0.0.0')),
+... )
+
+>>> sorted(ranges)
+[(IP('0.0.0.0'), IP('0.0.0.0')), (IP('0.0.0.0'), IP('255.255.255.255')), (IP('::'), IP('::')), (IP('::'), IP('::ffff'))]
+
+# Integer values.
+>>> cidr_abbrev_to_verbose(-1)
+-1
+
+# Class A
+>>> cidr_abbrev_to_verbose(0)
+'0.0.0.0/8'
+>>> cidr_abbrev_to_verbose(10)
+'10.0.0.0/8'
+>>> cidr_abbrev_to_verbose(127)
+'127.0.0.0/8'
+
+# Class B
+>>> cidr_abbrev_to_verbose(128)
+'128.0.0.0/16'
+>>> cidr_abbrev_to_verbose(191)
+'191.0.0.0/16'
+
+# Class C
+>>> cidr_abbrev_to_verbose(192)
+'192.0.0.0/24'
+>>> cidr_abbrev_to_verbose(223)
+'223.0.0.0/24'
+
+# Class D (multicast)
+>>> cidr_abbrev_to_verbose(224)
+'224.0.0.0/4'
+>>> cidr_abbrev_to_verbose(225)
+'225.0.0.0/8'
+>>> cidr_abbrev_to_verbose(239)
+'239.0.0.0/8'
+
+# Class E (reserved)
+>>> cidr_abbrev_to_verbose(240)
+'240.0.0.0/32'
+>>> cidr_abbrev_to_verbose(254)
+'254.0.0.0/32'
+>>> cidr_abbrev_to_verbose(255)
+'255.0.0.0/32'
+>>> cidr_abbrev_to_verbose(256)
+256
+
+# String values.
+>>> cidr_abbrev_to_verbose('-1')
+'-1'
+
+# Class A
+>>> cidr_abbrev_to_verbose('0')
+'0.0.0.0/8'
+>>> cidr_abbrev_to_verbose('10')
+'10.0.0.0/8'
+>>> cidr_abbrev_to_verbose('127')
+'127.0.0.0/8'
+
+# Class B
+>>> cidr_abbrev_to_verbose('128')
+'128.0.0.0/16'
+>>> cidr_abbrev_to_verbose('191')
+'191.0.0.0/16'
+
+# Class C
+>>> cidr_abbrev_to_verbose('192')
+'192.0.0.0/24'
+>>> cidr_abbrev_to_verbose('223')
+'223.0.0.0/24'
+
+# Class D (multicast)
+>>> cidr_abbrev_to_verbose('224')
+'224.0.0.0/4'
+>>> cidr_abbrev_to_verbose('225')
+'225.0.0.0/8'
+>>> cidr_abbrev_to_verbose('239')
+'239.0.0.0/8'
+
+# Class E (reserved)
+>>> cidr_abbrev_to_verbose('240')
+'240.0.0.0/32'
+>>> cidr_abbrev_to_verbose('254')
+'254.0.0.0/32'
+>>> cidr_abbrev_to_verbose('255')
+'255.0.0.0/32'
+>>> cidr_abbrev_to_verbose('256')
+'256'
+
+>>> cidr_abbrev_to_verbose('128/8')
+'128.0.0.0/8'
+>>> cidr_abbrev_to_verbose('128.0/8')
+'128.0.0.0/8'
+>>> cidr_abbrev_to_verbose('128.0.0.0/8')
+'128.0.0.0/8'
+>>> cidr_abbrev_to_verbose('128.0.0/8')
+'128.0.0.0/8'
+>>> cidr_abbrev_to_verbose('192.168')
+'192.168.0.0/24'
+>>> cidr_abbrev_to_verbose('192.0.2')
+'192.0.2.0/24'
+>>> cidr_abbrev_to_verbose('192.0.2.0')
+'192.0.2.0/24'
+>>> cidr_abbrev_to_verbose('0.0.0.0')
+'0.0.0.0/8'
+
+# No IPv6 support current.
+>>> cidr_abbrev_to_verbose('::/128')
+'::/128'
+
+# IPv6 proper, not IPv4 mapped?
+>>> cidr_abbrev_to_verbose('::10/128')
+'::10/128'
+>>> cidr_abbrev_to_verbose('0.0.0.0.0')
+'0.0.0.0.0'
+>>> cidr_abbrev_to_verbose('')
+''
+>>> cidr_abbrev_to_verbose(None)
+
+>>> cidr_abbrev_to_verbose([])
+[]
+>>> cidr_abbrev_to_verbose({})
+{}
+
+}}}
diff --git a/netaddr/tests/ip/cidr.txt b/netaddr/tests/ip/cidr.txt
new file mode 100644
index 0000000..58187a9
--- /dev/null
+++ b/netaddr/tests/ip/cidr.txt
@@ -0,0 +1,521 @@
+=CIDR Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+==Basic IP Range Tuple Sorting==
+
+{{{
+
+>>> ranges = (
+... (IP('::'), IP('::')),
+... (IP('0.0.0.0'), IP('255.255.255.255')),
+... (IP('::'), IP('::FFFF')),
+... (IP('0.0.0.0'), IP('0.0.0.0')),
+... )
+
+>>> sorted(ranges)
+[(IP('0.0.0.0'), IP('0.0.0.0')), (IP('0.0.0.0'), IP('255.255.255.255')), (IP('::'), IP('::')), (IP('::'), IP('::ffff'))]
+
+}}}
+
+Worst case IPv4 range to CIDR conversion.
+
+{{{
+
+>>> for ip in iprange_to_cidrs('0.0.0.1', '255.255.255.254'):
+... ip
+...
+IP('0.0.0.1')
+IP('0.0.0.2/31')
+IP('0.0.0.4/30')
+IP('0.0.0.8/29')
+IP('0.0.0.16/28')
+IP('0.0.0.32/27')
+IP('0.0.0.64/26')
+IP('0.0.0.128/25')
+IP('0.0.1.0/24')
+IP('0.0.2.0/23')
+IP('0.0.4.0/22')
+IP('0.0.8.0/21')
+IP('0.0.16.0/20')
+IP('0.0.32.0/19')
+IP('0.0.64.0/18')
+IP('0.0.128.0/17')
+IP('0.1.0.0/16')
+IP('0.2.0.0/15')
+IP('0.4.0.0/14')
+IP('0.8.0.0/13')
+IP('0.16.0.0/12')
+IP('0.32.0.0/11')
+IP('0.64.0.0/10')
+IP('0.128.0.0/9')
+IP('1.0.0.0/8')
+IP('2.0.0.0/7')
+IP('4.0.0.0/6')
+IP('8.0.0.0/5')
+IP('16.0.0.0/4')
+IP('32.0.0.0/3')
+IP('64.0.0.0/2')
+IP('128.0.0.0/2')
+IP('192.0.0.0/3')
+IP('224.0.0.0/4')
+IP('240.0.0.0/5')
+IP('248.0.0.0/6')
+IP('252.0.0.0/7')
+IP('254.0.0.0/8')
+IP('255.0.0.0/9')
+IP('255.128.0.0/10')
+IP('255.192.0.0/11')
+IP('255.224.0.0/12')
+IP('255.240.0.0/13')
+IP('255.248.0.0/14')
+IP('255.252.0.0/15')
+IP('255.254.0.0/16')
+IP('255.255.0.0/17')
+IP('255.255.128.0/18')
+IP('255.255.192.0/19')
+IP('255.255.224.0/20')
+IP('255.255.240.0/21')
+IP('255.255.248.0/22')
+IP('255.255.252.0/23')
+IP('255.255.254.0/24')
+IP('255.255.255.0/25')
+IP('255.255.255.128/26')
+IP('255.255.255.192/27')
+IP('255.255.255.224/28')
+IP('255.255.255.240/29')
+IP('255.255.255.248/30')
+IP('255.255.255.252/31')
+IP('255.255.255.254')
+
+}}}
+
+Worst case IPv4 compatible IPv6 range to CIDR.
+
+{{{
+
+>>> for ip in iprange_to_cidrs('::1', '::255.255.255.254'):
+... ip
+...
+IP('::1')
+IP('::2/127')
+IP('::4/126')
+IP('::8/125')
+IP('::10/124')
+IP('::20/123')
+IP('::40/122')
+IP('::80/121')
+IP('::100/120')
+IP('::200/119')
+IP('::400/118')
+IP('::800/117')
+IP('::1000/116')
+IP('::2000/115')
+IP('::4000/114')
+IP('::8000/113')
+IP('::0.1.0.0/112')
+IP('::0.2.0.0/111')
+IP('::0.4.0.0/110')
+IP('::0.8.0.0/109')
+IP('::0.16.0.0/108')
+IP('::0.32.0.0/107')
+IP('::0.64.0.0/106')
+IP('::0.128.0.0/105')
+IP('::1.0.0.0/104')
+IP('::2.0.0.0/103')
+IP('::4.0.0.0/102')
+IP('::8.0.0.0/101')
+IP('::16.0.0.0/100')
+IP('::32.0.0.0/99')
+IP('::64.0.0.0/98')
+IP('::128.0.0.0/98')
+IP('::192.0.0.0/99')
+IP('::224.0.0.0/100')
+IP('::240.0.0.0/101')
+IP('::248.0.0.0/102')
+IP('::252.0.0.0/103')
+IP('::254.0.0.0/104')
+IP('::255.0.0.0/105')
+IP('::255.128.0.0/106')
+IP('::255.192.0.0/107')
+IP('::255.224.0.0/108')
+IP('::255.240.0.0/109')
+IP('::255.248.0.0/110')
+IP('::255.252.0.0/111')
+IP('::255.254.0.0/112')
+IP('::255.255.0.0/113')
+IP('::255.255.128.0/114')
+IP('::255.255.192.0/115')
+IP('::255.255.224.0/116')
+IP('::255.255.240.0/117')
+IP('::255.255.248.0/118')
+IP('::255.255.252.0/119')
+IP('::255.255.254.0/120')
+IP('::255.255.255.0/121')
+IP('::255.255.255.128/122')
+IP('::255.255.255.192/123')
+IP('::255.255.255.224/124')
+IP('::255.255.255.240/125')
+IP('::255.255.255.248/126')
+IP('::255.255.255.252/127')
+IP('::255.255.255.254')
+
+}}}
+
+Worst case IPv4 mapped IPv6 range to CIDR.
+
+{{{
+
+>>> for ip in iprange_to_cidrs('::ffff:1', '::ffff:255.255.255.254'):
+... ip
+...
+IP('::255.255.0.1')
+IP('::255.255.0.2/127')
+IP('::255.255.0.4/126')
+IP('::255.255.0.8/125')
+IP('::255.255.0.16/124')
+IP('::255.255.0.32/123')
+IP('::255.255.0.64/122')
+IP('::255.255.0.128/121')
+IP('::255.255.1.0/120')
+IP('::255.255.2.0/119')
+IP('::255.255.4.0/118')
+IP('::255.255.8.0/117')
+IP('::255.255.16.0/116')
+IP('::255.255.32.0/115')
+IP('::255.255.64.0/114')
+IP('::255.255.128.0/113')
+IP('::1:0:0/96')
+IP('::2:0:0/95')
+IP('::4:0:0/94')
+IP('::8:0:0/93')
+IP('::10:0:0/92')
+IP('::20:0:0/91')
+IP('::40:0:0/90')
+IP('::80:0:0/89')
+IP('::100:0:0/88')
+IP('::200:0:0/87')
+IP('::400:0:0/86')
+IP('::800:0:0/85')
+IP('::1000:0:0/84')
+IP('::2000:0:0/83')
+IP('::4000:0:0/82')
+IP('::8000:0:0/82')
+IP('::c000:0:0/83')
+IP('::e000:0:0/84')
+IP('::f000:0:0/85')
+IP('::f800:0:0/86')
+IP('::fc00:0:0/87')
+IP('::fe00:0:0/88')
+IP('::ff00:0:0/89')
+IP('::ff80:0:0/90')
+IP('::ffc0:0:0/91')
+IP('::ffe0:0:0/92')
+IP('::fff0:0:0/93')
+IP('::fff8:0:0/94')
+IP('::fffc:0:0/95')
+IP('::fffe:0:0/96')
+IP('::ffff:0.0.0.0/97')
+IP('::ffff:128.0.0.0/98')
+IP('::ffff:192.0.0.0/99')
+IP('::ffff:224.0.0.0/100')
+IP('::ffff:240.0.0.0/101')
+IP('::ffff:248.0.0.0/102')
+IP('::ffff:252.0.0.0/103')
+IP('::ffff:254.0.0.0/104')
+IP('::ffff:255.0.0.0/105')
+IP('::ffff:255.128.0.0/106')
+IP('::ffff:255.192.0.0/107')
+IP('::ffff:255.224.0.0/108')
+IP('::ffff:255.240.0.0/109')
+IP('::ffff:255.248.0.0/110')
+IP('::ffff:255.252.0.0/111')
+IP('::ffff:255.254.0.0/112')
+IP('::ffff:255.255.0.0/113')
+IP('::ffff:255.255.128.0/114')
+IP('::ffff:255.255.192.0/115')
+IP('::ffff:255.255.224.0/116')
+IP('::ffff:255.255.240.0/117')
+IP('::ffff:255.255.248.0/118')
+IP('::ffff:255.255.252.0/119')
+IP('::ffff:255.255.254.0/120')
+IP('::ffff:255.255.255.0/121')
+IP('::ffff:255.255.255.128/122')
+IP('::ffff:255.255.255.192/123')
+IP('::ffff:255.255.255.224/124')
+IP('::ffff:255.255.255.240/125')
+IP('::ffff:255.255.255.248/126')
+IP('::ffff:255.255.255.252/127')
+IP('::ffff:255.255.255.254')
+
+}}}
+
+RFC 4291 CIDR tests.
+
+{{{
+
+>>> str(IP('2001:0DB8:0000:CD30:0000:0000:0000:0000/60'))
+'2001:db8:0:cd30::/60'
+
+>>> str(IP('2001:0DB8::CD30:0:0:0:0/60'))
+'2001:db8:0:cd30::/60'
+
+>>> str(IP('2001:0DB8:0:CD30::/60'))
+'2001:db8:0:cd30::/60'
+
+}}}
+
+Equality tests.
+
+{{{
+
+>>> IP('192.0.2.0/255.255.254.0') == IP('192.0.2.0/23')
+True
+
+>>> IP('192.0.2.65/255.255.254.0') == IP('192.0.2.0/23')
+True
+
+>>> IP('192.0.2.65/255.255.254.0') == IP('192.0.2.65/23')
+True
+
+>>> IP('192.0.2.65/255.255.255.0') == IP('192.0.2.0/23')
+False
+
+>>> IP('192.0.2.65/255.255.254.0') == IP('192.0.2.65/24')
+False
+
+}}}
+
+Slicing tests.
+
+{{{
+
+>>> ip = IP('192.0.2.0/23')
+>>> ip.first == 3221225984
+True
+
+>>> ip.last == 3221226495
+True
+
+>>> ip[0]
+IP('192.0.2.0')
+
+>>> ip[-1]
+IP('192.0.3.255')
+
+>>> list(ip[::128])
+[IP('192.0.2.0'), IP('192.0.2.128'), IP('192.0.3.0'), IP('192.0.3.128')]
+
+>>> ip = IP('fe80::/10')
+>>> ip[0]
+IP('fe80::')
+
+>>> ip[-1]
+IP('febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
+
+>>> ip.size == 332306998946228968225951765070086144
+True
+
+>>> list(ip[0:5:1])
+Traceback (most recent call last):
+...
+TypeError: slices unsupported on IPv6 objects!
+
+
+}}}
+
+Membership tests.
+
+{{{
+
+>>> IP('192.0.2.1') in IP('192.0.2.0/24')
+True
+
+>>> IP('192.0.2.255') in IP('192.0.2.0/24')
+True
+
+>>> IP('192.0.2.0/24') in IP('192.0.2.0/23')
+True
+
+>>> IP('192.0.2.0/24') in IP('192.0.2.0/24')
+True
+
+>>> IP('ffff::1') in IP('ffff::/127')
+True
+
+>>> IP('192.0.2.0/23') in IP('192.0.2.0/24')
+False
+
+}}}
+
+Equality tests.
+
+{{{
+
+>>> IP('192.0.2.0/24') == IP('192.0.2.0/24')
+True
+
+>>> IP('192.0.2.0/24') is not IP('192.0.2.0/24')
+True
+
+>>> IP('192.0.2.0/24') != IP('192.0.2.0/24')
+False
+
+>>> IP('192.0.2.0/24') is IP('192.0.2.0/24')
+False
+
+>>> IP('fe80::/10') == IP('fe80::/10')
+True
+
+>>> IP('fe80::/10') is not IP('fe80::/10')
+True
+
+>>> IP('fe80::/10') != IP('fe80::/10')
+False
+
+>>> IP('fe80::/10') is IP('fe80::/10')
+False
+
+}}}
+
+Exclusion tests.
+
+{{{
+
+# Equivalent to :-
+# >>> set([1]) - set([1])
+# set([1])
+>>> cidr_exclude('192.0.2.1/32', '192.0.2.1/32')
+[]
+
+# Equivalent to :-
+# >>> set([1,2]) - set([2])
+# set([1])
+>>> cidr_exclude('192.0.2.0/31', '192.0.2.1/32')
+[IP('192.0.2.0')]
+
+# Equivalent to :-
+# >>> set([1,2,3,4,5,6,7,8]) - set([5,6,7,8])
+# set([1, 2, 3, 4])
+>>> cidr_exclude('192.0.2.0/24', '192.0.2.128/25')
+[IP('192.0.2.0/25')]
+
+# Equivalent to :-
+# >>> set([1,2,3,4,5,6,7,8]) - set([5,6])
+# set([1, 2, 3, 4, 7, 8])
+>>> cidr_exclude('192.0.2.0/24', '192.0.2.128/27')
+[IP('192.0.2.0/25'), IP('192.0.2.160/27'), IP('192.0.2.192/26')]
+
+# Subtracting a larger range from a smaller one results in an empty
+# list (rather than a negative CIDR - which would be rather odd)!
+#
+# Equivalent to :-
+# >>> set([1]) - set([1,2,3])
+# set([])
+>>> cidr_exclude('192.0.2.1/32', '192.0.2.0/24')
+[]
+
+}}}
+
+Please Note: excluding IP subnets that are not within each other and have no overlaps should return the original target IP object.
+
+{{{
+
+# Equivalent to :-
+# >>> set([1,2,3]) - set([4])
+# set([1,2,3])
+>>> cidr_exclude('192.0.2.0/28', '192.0.2.16/32')
+[IP('192.0.2.0/28')]
+
+# Equivalent to :-
+# >>> set([1]) - set([2,3,4])
+# set([1])
+>>> cidr_exclude('192.0.1.255/32', '192.0.2.0/28')
+[IP('192.0.1.255')]
+
+}}}
+
+Merge tests.
+
+{{{
+
+>>> cidr_merge(['192.0.128.0/24', '192.0.129.0/24'])
+[IP('192.0.128.0/23')]
+
+>>> cidr_merge(['192.0.129.0/24', '192.0.130.0/24'])
+[IP('192.0.129.0/24'), IP('192.0.130.0/24')]
+
+>>> cidr_merge(['192.0.2.112/30', '192.0.2.116/31', '192.0.2.118/31'])
+[IP('192.0.2.112/29')]
+
+>>> cidr_merge(['192.0.2.112/30', '192.0.2.116/32', '192.0.2.118/31'])
+[IP('192.0.2.112/30'), IP('192.0.2.116'), IP('192.0.2.118/31')]
+
+>>> cidr_merge(['192.0.2.112/31', '192.0.2.116/31', '192.0.2.118/31'])
+[IP('192.0.2.112/31'), IP('192.0.2.116/30')]
+
+>>> cidr_merge(['192.0.1.254/31',
+... '192.0.2.0/28',
+... '192.0.2.16/28',
+... '192.0.2.32/28',
+... '192.0.2.48/28',
+... '192.0.2.64/28',
+... '192.0.2.80/28',
+... '192.0.2.96/28',
+... '192.0.2.112/28',
+... '192.0.2.128/28',
+... '192.0.2.144/28',
+... '192.0.2.160/28',
+... '192.0.2.176/28',
+... '192.0.2.192/28',
+... '192.0.2.208/28',
+... '192.0.2.224/28',
+... '192.0.2.240/28',
+... '192.0.3.0/28'])
+[IP('192.0.1.254/31'), IP('192.0.2.0/24'), IP('192.0.3.0/28')]
+
+}}}
+
+Extended merge tests.
+
+{{{
+
+>>> import random
+
+# Start with a single /23 CIDR.
+
+>>> orig_cidr_ipv4 = IP('192.0.2.0/23')
+>>> orig_cidr_ipv6 = IP('::192.0.2.0/120')
+
+# Split it into /28 subnet CIDRs (mix CIDR objects and CIDR strings).
+
+>>> cidr_subnets = []
+>>> cidr_subnets.extend([str(c) for c in orig_cidr_ipv4.subnet(28)])
+>>> cidr_subnets.extend(list(orig_cidr_ipv4.subnet(28)))
+>>> cidr_subnets.extend([str(c) for c in orig_cidr_ipv6.subnet(124)])
+>>> cidr_subnets.extend(list(orig_cidr_ipv6.subnet(124)))
+
+# Add a couple of duplicates in to make sure summarization is working OK.
+
+>>> cidr_subnets.append('192.0.2.1/32')
+>>> cidr_subnets.append('192.0.2.128/25')
+>>> cidr_subnets.append('::192.0.2.92/128')
+
+# Randomize the order of subnets.
+>>> random.shuffle(cidr_subnets)
+
+# Perform summarization operation.
+>>> merged_cidrs = cidr_merge(cidr_subnets)
+>>> merged_cidrs
+[IP('192.0.2.0/23'), IP('::192.0.2.0/120')]
+
+>>> merged_cidrs == [orig_cidr_ipv4, orig_cidr_ipv6]
+True
+
+}}}
diff --git a/netaddr/tests/ip/constructor.txt b/netaddr/tests/ip/constructor.txt
new file mode 100644
index 0000000..e084ea6
--- /dev/null
+++ b/netaddr/tests/ip/constructor.txt
@@ -0,0 +1,71 @@
+=IP Constructor Stress Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+>>> IP('192.0.2.0/24')
+IP('192.0.2.0/24')
+
+>>> IP('192.0.2.0/24', 4)
+IP('192.0.2.0/24')
+
+>>> IP('192.0.2.0/255.255.255.0')
+IP('192.0.2.0/24')
+
+>>> IP('192.0.2.0/0.0.0.255')
+IP('192.0.2.0/24')
+
+>>> IP(IP('192.0.2.0/24', 4))
+IP('192.0.2.0/24')
+
+>>> IP(IP('192.0.2.0/24'))
+IP('192.0.2.0/24')
+
+>>> IP(IP('::192.0.2.0/120', 6))
+IP('::192.0.2.0/120')
+
+>>> IP(IP('192.0.2.0/24'), 6)
+Traceback (most recent call last):
+...
+ValueError: cannot switch IP versions using copy constructor!
+
+>>> IP(3221225984)
+IP('192.0.2.0')
+
+>>> IP(3221225984, 6)
+IP('::192.0.2.0')
+
+>>> IP(0xffffffff)
+IP('255.255.255.255')
+
+>>> IP(0xffffffff, 6)
+IP('::255.255.255.255')
+
+>>> IP(0x1ffffffff)
+IP('::1:ffff:ffff')
+
+>>> IP('::ffff:0.0.0.0')
+IP('::ffff:0.0.0.0')
+
+>>> IP('::192.0.2.0/120')
+IP('::192.0.2.0/120')
+
+>>> IP('::192.0.2.0/120', 6)
+IP('::192.0.2.0/120')
+
+>>> ip = IP(0xffffff00)
+>>> ip.is_netmask()
+True
+>>> ip.is_hostmask()
+False
+
+>>> ip = IP(0xff)
+>>> ip.is_netmask()
+False
+>>> ip.is_hostmask()
+True
+
+}}}
diff --git a/netaddr/tests/ip/ipglob.txt b/netaddr/tests/ip/ipglob.txt
new file mode 100644
index 0000000..b85434a
--- /dev/null
+++ b/netaddr/tests/ip/ipglob.txt
@@ -0,0 +1,51 @@
+=IP Glob Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+IP Glob tests.
+
+{{{
+
+>>> cidr_to_glob('10.0.0.1/32')
+'10.0.0.1'
+
+>>> cidr_to_glob('192.0.2.0/24')
+'192.0.2.*'
+
+>>> cidr_to_glob('172.16.0.0/12')
+'172.16-31.*.*'
+
+>>> cidr_to_glob('0.0.0.0/0')
+'*.*.*.*'
+
+>>> glob_to_cidrs('10.0.0.1')
+[IP('10.0.0.1')]
+
+>>> glob_to_cidrs('192.0.2.*')
+[IP('192.0.2.0/24')]
+
+>>> glob_to_cidrs('172.16-31.*.*')
+[IP('172.16.0.0/12')]
+
+>>> glob_to_cidrs('*.*.*.*')
+[IP('0.0.0.0/0')]
+
+>>> glob_to_iprange('*.*.*.*')
+(IP('0.0.0.0'), IP('255.255.255.255'))
+
+>>> iprange_to_globs('192.0.2.0', '192.0.2.255')
+['192.0.2.*']
+
+>>> iprange_to_globs('192.0.2.1', '192.0.2.15')
+['192.0.2.1-15']
+
+>>> iprange_to_globs('192.0.2.255', '192.0.4.1')
+['192.0.2.255', '192.0.3.*', '192.0.4.0-1']
+
+}}}
diff --git a/netaddr/tests/ip/multicast.txt b/netaddr/tests/ip/multicast.txt
new file mode 100644
index 0000000..afa3c12
--- /dev/null
+++ b/netaddr/tests/ip/multicast.txt
@@ -0,0 +1,43 @@
+=IP Constructor Stress Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+>>> ip = IP('239.192.0.1')
+
+>>> ip.is_multicast()
+True
+
+}}}
+
+It is *not* valid to have a multicast address with a prefixlen of anything other than a /32 or /128.
+
+{{{
+
+>>> ip.prefixlen = 24
+Traceback (most recent call last):
+...
+IPMulticastError: invalid prefix/netmask '/24' for multicast IP '239.192.0.1'!
+
+>>> IP('239.192.0.1/23')
+Traceback (most recent call last):
+...
+IPMulticastError: invalid prefix/netmask '/23' for multicast IP '239.192.0.1'!
+
+}}}
+
+It is *not* valid to have netmask or hostmask address with a prefixlen of anything other than a /32 or /128.
+
+{{{
+
+>>> IP('255.255.255.0/24')
+Traceback (most recent call last):
+...
+IPValueError: netmasks and hostmasks do not support CIDR prefix options!
+
+}}}
+
+Read this http://lwn.net/SubscriberLink/337684/6b141b49807caf91/
diff --git a/netaddr/tests/ip/socket_fallback.txt b/netaddr/tests/ip/socket_fallback.txt
new file mode 100644
index 0000000..caf0250
--- /dev/null
+++ b/netaddr/tests/ip/socket_fallback.txt
@@ -0,0 +1,60 @@
+=Socket Fallback Module Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr.fbsocket import *
+
+}}}
+
+IPv6 '::' compression algorithm tests.
+
+{{{
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:0:0:0:0:0:0:0'))
+'::'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:0:0:0:0:0:0:A'))
+'::a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:0:0:0:0:0:0'))
+'a::'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:A:0:0:0:0:0'))
+'a:0:a::'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:0:0:0:0:0:A'))
+'a::a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:A:0:0:0:0:0:A'))
+'0:a::a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:A:0:0:0:0:A'))
+'a:0:a::a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:0:0:A:0:0:0:A'))
+'::a:0:0:0:a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:0:0:0:A:0:0:A'))
+'::a:0:0:a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:0:0:0:A:0:A'))
+'a::a:0:a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:0:A:0:0:A:0'))
+'a::a:0:0:a:0'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'A:0:A:0:A:0:A:0'))
+'a:0:a:0:a:0:a:0'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '0:A:0:A:0:A:0:A'))
+'0:a:0:a:0:a:0:a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, '1080:0:0:0:8:800:200C:417A'))
+'1080::8:800:200c:417a'
+
+>>> inet_ntop(AF_INET6, inet_pton(AF_INET6, 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'))
+'fedc:ba98:7654:3210:fedc:ba98:7654:3210'
+
+}}}
diff --git a/netaddr/tests/ip/subnet.txt b/netaddr/tests/ip/subnet.txt
new file mode 100644
index 0000000..a8029c5
--- /dev/null
+++ b/netaddr/tests/ip/subnet.txt
@@ -0,0 +1,36 @@
+=IP Subnet Tests=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+Incrementing IP objects.
+
+{{{
+
+>>> ip = IP('192.0.2.0/28')
+>>> for i in range(16):
+... str(ip)
+... ip += 1
+'192.0.2.0/28'
+'192.0.2.16/28'
+'192.0.2.32/28'
+'192.0.2.48/28'
+'192.0.2.64/28'
+'192.0.2.80/28'
+'192.0.2.96/28'
+'192.0.2.112/28'
+'192.0.2.128/28'
+'192.0.2.144/28'
+'192.0.2.160/28'
+'192.0.2.176/28'
+'192.0.2.192/28'
+'192.0.2.208/28'
+'192.0.2.224/28'
+'192.0.2.240/28'
+
+}}}
diff --git a/netaddr/tests/ip/tutorial.txt b/netaddr/tests/ip/tutorial.txt
new file mode 100644
index 0000000..0841e67
--- /dev/null
+++ b/netaddr/tests/ip/tutorial.txt
@@ -0,0 +1,642 @@
+=IP Address Tutorial=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+This unit test serves as both testing of the netaddr API and an executable tutorial courtesy of the doctest and unittest modules in the Python standard library.
+
+Let's start with the standard module import.
+
+{{{
+
+>>> from netaddr import *
+
+}}}
+
+You can safely import everything from the netaddr namespace as care has been taken to only export the necessary classes, functions and constants. You can always hand pick them if you are unsure.
+
+==Basic IP Operations==
+
+This IP object represents a single address.
+
+{{{
+
+>>> ip = IP('192.0.2.1')
+
+}}}
+
+Standard repr() access returns a Python statement that can reconstruct the IP address object from scratch if executed in the Python interpreter.
+
+{{{
+
+>>> ip
+IP('192.0.2.1')
+
+}}}
+
+Access in the string context returns the IP object as a string value.
+
+{{{
+
+>>> str(ip)
+'192.0.2.1'
+
+>>> '%s' % ip
+'192.0.2.1'
+
+}}}
+
+Here are a few other common properties.
+
+{{{
+
+>>> str(ip), ip.prefixlen, ip.version
+('192.0.2.1', 32, 4)
+
+}}}
+
+==IP Address Numerical Representations==
+
+You can view an individual IP address in various other formats.
+
+{{{
+
+>>> int(ip)
+3221225985L
+
+>>> hex(ip)
+'0xc0000201'
+
+>>> ip.bits()
+'11000000.00000000.00000010.00000001'
+
+>>> ip.bin()
+'0b11000000000000000000001000000001'
+
+}}}
+
+==Representing IP Subnets==
+
+You might be wondering at this point what an IP object actually represents.
+
+Is it :-
+
+a) single IP address
+b) an IP subnet
+c) a combination of both
+
+The answer depends on what you pass to the constructor. The IP object is flexible enough to be all three. Technically, it is option c). While this may seem a bit odd at first it isn't a problem in practice. You access the information you require from using the object in different ways.
+
+Here is some examples to illustrate this :-
+
+This IP object represents a single address.
+
+{{{
+
+>>> ip = IP('192.0.2.1')
+>>> ip.ip, ip.network, ip.broadcast, ip.netmask, ip.hostmask, ip.size
+(IP('192.0.2.1'), IP('192.0.2.1'), IP('192.0.2.1'), IP('255.255.255.255'), IP('0.0.0.0'), 1)
+
+}}}
+
+In this case, the network and broadcast address at the same as the actual IP address, so you probably don't care about them.
+
+This IP object represents a subnet.
+
+{{{
+
+>>> ip = IP('192.0.2.0/24')
+>>> ip.ip, ip.network, ip.broadcast, ip.netmask, ip.hostmask, ip.size
+(IP('192.0.2.0'), IP('192.0.2.0'), IP('192.0.2.255'), IP('255.255.255.0'), IP('0.0.0.255'), 256)
+
+}}}
+
+Note here that the value of the IP address and its network address match. This is a *true* CIDR address (i.e. it doesn't have any non-zero bits to the right of the subnet mask.
+
+An finally, this IP object represents a single address that belong to a given subnet.
+
+{{{
+
+>>> ip = IP('192.0.3.112/22')
+>>> ip.ip, ip.network, ip.broadcast, ip.netmask, ip.hostmask, ip.size
+(IP('192.0.3.112'), IP('192.0.0.0'), IP('192.0.3.255'), IP('255.255.252.0'), IP('0.0.3.255'), 1024)
+
+}}}
+
+Internally, each IP object only stores 3 integers, the IP address value, the version of IP protocol the address represents and its CIDR prefix. All the other values are calculated on-the-fly as they are accessed.
+
+It is possible to adjust the IP address value and the CIDR prefix after object instantiation.
+
+{{{
+
+>>> ip = IP(0)
+>>> ip
+IP('0.0.0.0')
+>>> ip.value = '192.0.2.1'
+>>> ip
+IP('192.0.2.1')
+>>> ip.prefixlen
+32
+>>> ip.prefixlen = 23
+>>> ip
+IP('192.0.2.1/23')
+
+}}}
+
+There is also a property that lets you access the actual *true* CIDR address (after applying the CIDR prefix to the IP address of the IP object).
+
+{{{
+
+>>> ip.cidr
+IP('192.0.2.0/23')
+
+}}}
+
+This is handy for specifying some networking configurations correctly.
+
+If you want to access information about each of the various IP addresses that form the IP subnet, this is available by performing pass through calls to sub methods of each object.
+
+For example if you want to see a binary digit representation of each address you can do the following.
+
+{{{
+
+>>> ip.ip.bits()
+'11000000.00000000.00000010.00000001'
+
+>>> ip.network.bits()
+'11000000.00000000.00000010.00000000'
+
+>>> ip.netmask.bits()
+'11111111.11111111.11111110.00000000'
+
+>>> ip.broadcast.bits()
+'11000000.00000000.00000011.11111111'
+
+}}}
+
+==IPv6 support==
+
+IP objects provide full support for IPv6 addresses as well. To prove this, let's try a few examples.
+
+{{{
+
+>>> ip = IP(0, 6)
+>>> ip
+IP('::')
+
+>>> ip = IP('fe80::dead:beef/64')
+
+>>> str(ip), ip.prefixlen, ip.version
+('fe80::dead:beef/64', 64, 6)
+
+>>> int(ip)
+338288524927261089654018896845083623151L
+
+>>> hex(ip)
+'0xfe8000000000000000000000deadbeef'
+
+Bit-style output isn't as quite as friendly as hexadecimal for such a long numbers, but here the proof that it at least works!
+
+>>> ip.bits()
+'1111111010000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:1101111010101101:1011111011101111'
+
+Here are some networking details for an IPv6 subnet.
+
+>>> ip.network, ip.broadcast, ip.netmask, ip.hostmask
+(IP('fe80::'), IP('fe80::ffff:ffff:ffff:ffff'), IP('ffff:ffff:ffff:ffff::'), IP('::ffff:ffff:ffff:ffff'))
+
+}}}
+
+==IPv4 / IPv6 Interoperability==
+
+It is likely that with IPv6 becoming more prevalent, you'll want to be able to interoperate between IPv4 and IPv6 address seemlessly.
+
+Here are a couple of handy methods provided by the IP object to help you to this end.
+
+{{{
+
+>>> ip = IP('192.0.2.1/23')
+
+>>> ip.ipv4()
+IP('192.0.2.1/23')
+
+>>> ip.ipv6()
+IP('::ffff:192.0.2.1/119')
+
+>>> ip.ipv6(ipv4_compatible=True)
+IP('::192.0.2.1/119')
+
+}}}
+
+Note that the IP object returns IPv4 "mapped" addresses by default in preference to IPv4 "compatible" ones. This has been chosen purposefully as the latter form has been deprecated (see RFC 4291 for details).
+
+==List Operations On IP Objects==
+
+If you treat an IP object as if it were a standard Python list object it will behave as if you are accessing a list of individual IP objects. This of course is illusory and they are not created until you access them.
+
+{{{
+
+>>> ip = IP('192.0.2.16/29')
+
+}}}
+
+Accessing an IP object using the list() context invokes the default generator which returns a list of all IP objects in the range specified by the IP object's subnet.
+
+{{{
+
+>>> ip_list = list(ip)
+>>> len(ip_list)
+8
+>>> ip_list
+[IP('192.0.2.16'), IP('192.0.2.17'), ..., IP('192.0.2.22'), IP('192.0.2.23')]
+
+}}}
+
+The length of that list is 8 individual IP addresses.
+
+{{{
+
+>>> len(ip)
+8
+
+}}}
+
+You can use standard index access to IP addresses in the subnet.
+
+{{{
+
+>>> ip[0]
+IP('192.0.2.16')
+
+>>> ip[1]
+IP('192.0.2.17')
+
+>>> ip[-1]
+IP('192.0.2.23')
+
+}}}
+
+You can even uses extended slices on IP addresses in the subnet.
+
+{{{
+
+>>> ip[0:4]
+<generator object ...>
+
+}}}
+
+The slice is actually a generator function. This is to save time and system resources. Some slices can obviously end up being extremely large for some subnets!
+
+Here is how you'd access all elements in a slice.
+
+{{{
+
+>>> list(ip[0:4])
+[IP('192.0.2.16'), IP('192.0.2.17'), IP('192.0.2.18'), IP('192.0.2.19')]
+
+}}}
+
+Extended slicing is also supported.
+
+{{{
+
+>>> list(ip[0::2])
+[IP('192.0.2.16'), IP('192.0.2.18'), IP('192.0.2.20'), IP('192.0.2.22')]
+
+}}}
+
+List reversal.
+
+{{{
+
+>>> list(ip[-1::-1])
+[IP('192.0.2.23'), IP('192.0.2.22'), ..., IP('192.0.2.17'), IP('192.0.2.16')]
+
+}}}
+
+Use of generators ensures working with large IP subnets is efficient.
+
+{{{
+
+>>> for ip in IP('192.0.2.0/23'):
+... print '%s' % ip
+...
+192.0.2.0
+192.0.2.1
+192.0.2.2
+192.0.2.3
+...
+192.0.3.252
+192.0.3.253
+192.0.3.254
+192.0.3.255
+
+}}}
+
+In IPv4 networks you only usually assign the addresses between the network and broadcast addresses to actual host interfaces on systems.
+
+Here is the iterator provided for accessing these IP addresses :-
+
+{{{
+
+>>> for ip in IP('192.0.2.0/23').iter_hosts():
+... print '%s' % ip
+...
+192.0.2.1
+192.0.2.2
+192.0.2.3
+192.0.2.4
+...
+192.0.3.251
+192.0.3.252
+192.0.3.253
+192.0.3.254
+
+}}}
+
+==Sorting Collection Of IP Objects==
+
+It is fairly common and useful to be able to sort IP addresses correctly (in numerical order).
+
+Here is how sorting works with individual addresses.
+
+{{{
+
+>>> import random
+>>> ip_list = list(IP('192.0.2.128/28'))
+>>> random.shuffle(ip_list)
+>>> sorted(ip_list)
+[IP('192.0.2.128'), IP('192.0.2.129'), IP('192.0.2.130'), IP('192.0.2.131'), IP('192.0.2.132'), IP('192.0.2.133'), IP('192.0.2.134'), IP('192.0.2.135'), IP('192.0.2.136'), IP('192.0.2.137'), IP('192.0.2.138'), IP('192.0.2.139'), IP('192.0.2.140'), IP('192.0.2.141'), IP('192.0.2.142'), IP('192.0.2.143')]
+
+}}}
+
+You can just as easily sort IP subnets at the same time, including combinations of IPv4 and IPv6 addresses as well.
+
+{{{
+
+>>> ip_list = [IP('192.0.2.130'), IP('10.0.0.1'), IP('192.0.2.128/28'), IP('192.0.3.0/24'), IP('192.0.2.0/24'), IP('fe80::/64'), IP('::'), IP('172.24/12')]
+>>> random.shuffle(ip_list)
+>>> ip_list.sort()
+>>> ip_list
+[IP('10.0.0.1'), IP('172.0.0.24/12'), IP('192.0.2.0/24'), IP('192.0.2.128/28'), IP('192.0.2.130'), IP('192.0.3.0/24'), IP('::'), IP('fe80::/64')]
+
+}}}
+
+Notice how IPv4 is ordered before IPv6 and overlapping subnets sort in order from largest subnet to smallest.
+
+==Merging IP Addresses And Subnets==
+
+Another useful operation is the ability to summarize groups of IP subnets and addresses, merging them together where possible to create the smallest possible list of CIDR subnets.
+
+Here is how to do this using the cidr_merge() function.
+
+First we create a list of IP objects that is a good mix of individual addresses and subnets, along with some string based IP address values for good measure. To make things more challenging some IPv6 addresses have been included as well.
+
+{{{
+
+>>> ip_list = [ip for ip in IP('fe80::/120')]
+>>> ip_list.append(IP('192.0.2.0/24'))
+>>> ip_list.extend([str(ip) for ip in IP('192.0.3.0/24')])
+>>> ip_list.append(IP('192.0.4.0/25'))
+>>> ip_list.append(IP('192.0.4.128/25'))
+>>> len(ip_list)
+515
+>>> cidr_merge(ip_list)
+[IP('192.0.2.0/23'), IP('192.0.4.0/24'), IP('fe80::/120')]
+
+}}}
+
+==Dealing With Arbitrary Lists Of IP Objects==
+
+While CIDR subnets are a useful construct, sometimes it is necessarily (particularly with IPv4 which predates the CIDR specification) to be able to generate lists of IP addresses that have an arbitrary start and end address that do not fall on bit mask boundaries.
+
+The iter_iprange() function allow you to do just this.
+
+{{{
+
+>>> ip_list = list(iter_iprange('192.0.2.1', '192.0.2.14'))
+>>> len(ip_list)
+13
+>>> ip_list
+[IP('192.0.2.1'), IP('192.0.2.2'), ..., IP('192.0.2.12'), IP('192.0.2.13')]
+
+}}}
+
+It is equally nice to know what the actual list of CIDR subnets is that would correctly cover this non-aligned range of addresses.
+
+Here is cidr_merge() coming to the rescue.
+
+{{{
+
+>>> cidr_merge(ip_list)
+[IP('192.0.2.1'), IP('192.0.2.2/31'), IP('192.0.2.4/30'), IP('192.0.2.8/30'), IP('192.0.2.12/31')]
+
+}}}
+
+==IP Subnetting And Supernetting==
+
+It is quite common to have a large CIDR subnet that you may want to split up into multiple smaller component blocks to better manage your networks.
+
+{{{
+
+>>> ip = IP('172.24.0.0/16')
+>>> ip.subnet(23)
+<generator object ...>
+
+}}}
+
+Again this method produces and iterator because of the possibility for a large number of return values.
+
+{{{
+
+>>> subnets = list(ip.subnet(23))
+>>> len(subnets)
+128
+>>> subnets
+[IP('172.24.0.0/23'), IP('172.24.2.0/23'), IP('172.24.4.0/23'), ..., IP('172.24.250.0/23'), IP('172.24.252.0/23'), IP('172.24.254.0/23')]
+
+}}}
+
+It is also possible to retrieve the list of supernets that a given IP address or subnet belongs to (with an optional limit).
+
+{{{
+
+>>> ip = IP('192.0.2.114')
+>>> ip.supernet(22)
+[IP('192.0.0.0/22'), IP('192.0.2.0/23'), IP('192.0.2.0/24'), IP('192.0.2.0/25'), IP('192.0.2.64/26'), IP('192.0.2.96/27'), IP('192.0.2.112/28'), IP('192.0.2.112/29'), IP('192.0.2.112/30'), IP('192.0.2.114/31')]
+
+}}}
+
+This method returns a list because the potential list of values is of a predictable size (no more than 31 CIDRs for an IPv4 address and 127 for IPv6).
+
+==Dealing With Less Common IP Network Specifications==
+
+Until the advent of the CIDR specification it was common to infer the netmask of an IPv4 address based on its first octet using an set of classful rules.
+
+It is common to come across these in various RFCs and they are well supported by a number of software libraries. Rather than leave out this important (mainly historical) set of rules they are catered for using the cidr_abbrev_to_verbose() function.
+
+Here is an example of these rules for the whole of the IPv4 address space.
+
+{{{
+
+>>> cidrs = [cidr_abbrev_to_verbose(octet) for octet in range(0, 256)]
+>>> len(cidrs)
+256
+>>> cidrs
+['0.0.0.0/8', ..., '127.0.0.0/8', '128.0.0.0/16', ..., '191.0.0.0/16', '192.0.0.0/24', ..., '223.0.0.0/24', '224.0.0.0/4', '225.0.0.0/8', ..., '239.0.0.0/8', '240.0.0.0/32', ..., '255.0.0.0/32']
+
+}}}
+
+==IP Address Categories==
+
+IP addresses fall several broad categories and not all are suitable for assignment as system interface addresses.
+
+Unicast
+
+>>> IP('192.0.2.1').is_unicast()
+True
+
+>>> IP('fe80::1').is_unicast()
+True
+
+Multicast
+
+>>> IP('239.192.0.1').is_multicast()
+True
+
+>>> IP('ff00::1').is_multicast()
+True
+
+Private
+
+>>> IP('172.24.0.1').is_private()
+True
+
+>>> IP('10.0.0.1').is_private()
+True
+
+>>> IP('192.168.0.1').is_private()
+True
+
+Reserved
+
+>>> IP('253.0.0.1').is_reserved()
+True
+
+Public (Internet) addresses.
+
+Note that not all of these may be allocated by the various regional Internet registrars.
+
+>>> ip = IP('62.125.24.5')
+>>> ip.is_unicast() and not ip.is_private()
+True
+
+There are also other types of addresses that have specific functions e.g. masking
+
+Netmasks
+
+>>> IP('255.255.254.0').is_netmask()
+True
+
+Hostmasks
+
+>>> IP('0.0.1.255').is_hostmask()
+True
+
+Loopback addresses
+
+IPv4
+
+>>> IP('127.0.0.1').is_loopback()
+True
+
+IPv6
+
+>>> IP('::1').is_loopback()
+True
+
+==IP address comparisons==
+
+IP objects can be compared with each other. As an IP object can represent both an individual IP address and an implicit network, it pays to get both sides of your comparison into the same terms before you compare them to avoid any odd results.
+
+Here are some comparisons of individual IP address to get the ball rolling.
+
+>>> IP('192.0.2.1') == IP('192.0.2.1')
+True
+
+>>> IP('192.0.2.1') < IP('192.0.2.2')
+True
+
+>>> IP('192.0.2.2') > IP('192.0.2.1')
+True
+
+>>> IP('192.0.2.1') != IP('192.0.2.1')
+False
+
+>>> IP('192.0.2.1') >= IP('192.0.2.1')
+True
+
+>>> IP('192.0.2.2') >= IP('192.0.2.1')
+True
+
+>>> IP('192.0.2.1') <= IP('192.0.2.1')
+True
+
+>>> IP('192.0.2.1') <= IP('192.0.2.2')
+True
+
+Now lets try something a little more interesting.
+
+>>> IP('192.0.2.0/24') == IP('192.0.2.112/24')
+True
+
+Hmmmmmmmm... looks a bit odd doesn't it? That's because by default, IP objects compare their subnets (or lower and upper boundaries) rather than their individual IP address values.
+
+The solution to this situation is very simple. Knowing this default behaviour, just be explicit about exactly which portion of each IP object you'd like to compare using pass-through properties.
+
+>>> IP('192.0.2.0/24').ip == IP('192.0.2.112/24').ip
+False
+
+>>> IP('192.0.2.0/24').ip < IP('192.0.2.112/24').ip
+True
+
+That's more like it. You can also be explicit about comparing networks in this way if you so wish (although it is not strictly necessary).
+
+>>> IP('192.0.2.0/24').cidr == IP('192.0.2.112/24').cidr
+True
+
+Armed with this information here are some examples of network comparisons.
+
+>>> IP('192.0.2.0/24') == IP('192.0.3.0/24')
+False
+
+>>> IP('192.0.2.0/24') < IP('192.0.3.0/24')
+True
+
+>>> IP('192.0.2.0/24') < IP('192.0.3.0/24')
+True
+
+==Interaction with DNS==
+
+It is a common administrative task to Generating reverse IP lookups for DNS. This is particularly arduous for IPv6 addresses.
+
+Here is how you do this using the IP object's reverse_dns() method.
+
+IPv4
+
+{{{
+
+>>> IP('172.24.0.13').reverse_dns()
+'13.0.24.172.in-addr.arpa.'
+
+}}}
+
+IPv6
+
+{{{
+
+>>> IP('fe80::feeb:daed').reverse_dns()
+'d.e.a.d.b.e.e.f.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.'
+
+}}}
+
+Note that ip6.int is not used as this has been deprecated (see RFC 3152 for details).
diff --git a/netaddr/tests/netaddr_coverage.bat b/netaddr/tests/netaddr_coverage.bat
new file mode 100755
index 0000000..d49d1f3
--- /dev/null
+++ b/netaddr/tests/netaddr_coverage.bat
@@ -0,0 +1,11 @@
+@echo off
+REM erase existing coverage data
+c:\python25\python coverage.py -e
+
+REM gather coverage information including line numbers that were omitted
+c:\python25\python coverage.py -x -m run_all.py
+
+REM generate a coverage report, omitting Python libraries
+c:\python25\python coverage.py -m -i -r -o c:\python25,coverage > netaddr_coverage_report.txt
+
+pause
diff --git a/netaddr/tests/netaddr_coverage_report.txt b/netaddr/tests/netaddr_coverage_report.txt
new file mode 100644
index 0000000..f42d215
--- /dev/null
+++ b/netaddr/tests/netaddr_coverage_report.txt
@@ -0,0 +1,18 @@
+Name Stmts Exec Cover Missing
+---------------------------------------------------------------------------------------
+coverage 616 3 0% 57-472, 475-574, 576-1014
+run_all 33 33 100%
+z:\netaddr\branches\rel-0.7.x\netaddr\__init__ 9 8 88% 11
+z:\netaddr\branches\rel-0.7.x\netaddr\core 42 25 59% 53, 68-69, 76-78, 88, 92-97, 102-105, 109-110
+z:\netaddr\branches\rel-0.7.x\netaddr\eui\__init__ 294 215 73% 51, 56-58, 69, 110, 132, 172-183, 210-212, 217, 230, 250, 254, 267, 282, 286, 312, 322, 324, 342-344, 349-363, 369, 373, 428, 434, 440, 443, 446, 449, 452, 461, 469, 492-493, 500-503, 510-513, 520-523, 530-533, 540-543, 555, 597, 614-617
+z:\netaddr\branches\rel-0.7.x\netaddr\eui\ieee 112 34 30% 77-78, 86, 116-117, 121-156, 186-187, 191-231, 236-242, 260-275, 280-281
+z:\netaddr\branches\rel-0.7.x\netaddr\fbsocket 158 127 80% 22, 39, 41, 43, 46-47, 52-57, 64, 68-70, 108, 128, 132, 152, 162, 178-179, 199, 210-212, 221, 224, 228, 243, 250, 254
+z:\netaddr\branches\rel-0.7.x\netaddr\ip\__init__ 577 460 79% 54, 60-61, 91, 98-99, 105, 119, 134, 174, 181, 208-210, 213, 224-225, 241-250, 257, 264, 346, 368, 382, 419-421, 432, 460, 472-473, 485-486, 503-504, 521-522, 539-540, 557-558, 566, 593, 620-628, 649-650, 670-672, 681-683, 699, 704, 714, 740-751, 761-762, 783, 788, 819-821, 911-913, 934-935, 963, 1026, 1031, 1065, 1091-1092, 1130, 1136, 1176-1186, 1189-1198, 1241-1251
+z:\netaddr\branches\rel-0.7.x\netaddr\ipglob 90 76 84% 60, 68, 73, 77, 80, 82, 84, 89, 91, 93, 108, 143, 173, 222
+z:\netaddr\branches\rel-0.7.x\netaddr\strategy\__init__ 115 82 71% 44, 47, 53, 72, 97, 121, 127, 134-137, 154, 191, 206-225, 254, 269-272, 275-277
+z:\netaddr\branches\rel-0.7.x\netaddr\strategy\eui48 147 113 76% 119-127, 153, 170, 226-228, 244-246, 263-265, 273, 277-290
+z:\netaddr\branches\rel-0.7.x\netaddr\strategy\eui64 83 44 53% 51-58, 73-75, 80, 108-109, 120-128, 132, 140, 144, 148, 152, 156, 160, 164, 168-178
+z:\netaddr\branches\rel-0.7.x\netaddr\strategy\ipv4 85 60 70% 25, 59-66, 76, 94, 146, 159, 165, 179, 187, 191-201
+z:\netaddr\branches\rel-0.7.x\netaddr\strategy\ipv6 110 79 71% 19, 21-25, 64, 80, 113, 117-118, 168, 184, 198, 202, 206, 210-226
+---------------------------------------------------------------------------------------
+TOTAL 2471 1359 54%
diff --git a/netaddr/tests/run_all.py b/netaddr/tests/run_all.py
new file mode 100755
index 0000000..66abc62
--- /dev/null
+++ b/netaddr/tests/run_all.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+#-----------------------------------------------------------------------------
+# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+#
+# Released under the BSD license. See the LICENSE file for details.
+#-----------------------------------------------------------------------------
+
+import os
+import sys
+import glob
+import doctest
+import unittest
+
+DEBUG = True
+
+#-----------------------------------------------------------------------------
+def test_suit_all():
+
+ test_dirs = ['.', 'ip', 'eui', 'strategy']
+
+ base_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
+
+ if DEBUG:
+ print 'module base path:', base_path
+ print
+
+ # Gather list of files containing tests.
+ test_files = []
+ for entry in test_dirs:
+ test_path = os.path.join(base_path, "tests", entry, "*.txt")
+ files = glob.glob(test_path)
+ test_files.extend(files)
+
+ skiplist = []
+
+ # Add anything to the skiplist that we want to leave out here...
+
+ # Exclude any entries from the skip list.
+ test_files = [t for t in test_files if os.path.basename(t) not in skiplist]
+
+ if DEBUG:
+ print "doctest files to be processed :-"
+ print
+ print "\n".join(test_files)
+
+ # Build and return a complete unittest test suite.
+ suite = unittest.TestSuite()
+
+ for test_file in test_files:
+ doctest_suite = doctest.DocFileSuite(test_file,
+ optionflags=doctest.ELLIPSIS, module_relative=False)
+ suite.addTest(doctest_suite)
+
+ return suite
+
+#-----------------------------------------------------------------------------
+def main():
+ runner = unittest.TextTestRunner()
+ runner.run(test_suit_all())
+
+if __name__ == "__main__":
+ main()
diff --git a/netaddr/tests/strategy/eui48.txt b/netaddr/tests/strategy/eui48.txt
new file mode 100644
index 0000000..8c55b7b
--- /dev/null
+++ b/netaddr/tests/strategy/eui48.txt
@@ -0,0 +1,93 @@
+=IEEE EUI-48 Strategy Module=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr.strategy.eui48 import *
+
+}}}
+
+==Basic Smoke Tests==
+
+{{{
+
+>>> b = '00000000-00001111-00011111-00010010-11100111-00110011'
+>>> i = 64945841971
+>>> t = (0x0, 0x0f, 0x1f, 0x12, 0xe7, 0x33)
+>>> s = '00-0F-1F-12-E7-33'
+>>> p = '\x00\x0f\x1f\x12\xe73'
+
+>>> bits_to_int(b) == 64945841971
+True
+
+>>> int_to_bits(i) == b
+True
+
+>>> int_to_str(i)
+'00-0F-1F-12-E7-33'
+
+>>> int_to_words(i)
+(0, 15, 31, 18, 231, 51)
+
+>>> int_to_packed(i)
+'\x00\x0f\x1f\x12\xe73'
+
+>>> str_to_int(s) == 64945841971
+True
+
+>>> words_to_int(t) == 64945841971
+True
+
+>>> words_to_int(list(t)) == 64945841971
+True
+
+>>> packed_to_int(p) == 64945841971
+True
+
+}}}
+
+==Smoke Tests With Alternate Dialects==
+
+{{{
+
+>>> b = '00000000:00001111:00011111:00010010:11100111:00110011'
+>>> i = 64945841971
+>>> t = (0x0, 0x0f, 0x1f, 0x12, 0xe7, 0x33)
+>>> s = '0:f:1f:12:e7:33'
+>>> p = '\x00\x0f\x1f\x12\xe73'
+
+>>> bits_to_int(b, mac_unix) == 64945841971
+True
+
+>>> int_to_bits(i, mac_unix) == b
+True
+
+>>> int_to_str(i, mac_unix)
+'0:f:1f:12:e7:33'
+
+>>> int_to_str(i, mac_cisco)
+'000f.1f12.e733'
+
+>>> int_to_str(i, mac_unix)
+'0:f:1f:12:e7:33'
+
+>>> int_to_words(i, mac_unix)
+(0, 15, 31, 18, 231, 51)
+
+>>> int_to_packed(i)
+'\x00\x0f\x1f\x12\xe73'
+
+>>> str_to_int(s) == 64945841971
+True
+
+>>> words_to_int(t, mac_unix) == 64945841971
+True
+
+>>> words_to_int(list(t), mac_unix) == 64945841971
+True
+
+>>> packed_to_int(p) == 64945841971
+True
+
+}}}
diff --git a/netaddr/tests/strategy/ipv4.txt b/netaddr/tests/strategy/ipv4.txt
new file mode 100644
index 0000000..de9e8dd
--- /dev/null
+++ b/netaddr/tests/strategy/ipv4.txt
@@ -0,0 +1,50 @@
+=IP version 4 Strategy Module=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+Uses TEST-NET references throughout, as described in RFC 3330.
+
+{{{
+
+>>> from netaddr.strategy.ipv4 import *
+
+}}}
+
+==Basic Smoke Tests==
+
+{{{
+
+>>> b = '11000000.00000000.00000010.00000001'
+>>> i = 3221225985
+>>> t = (192, 0, 2, 1)
+>>> s = '192.0.2.1'
+>>> p = '\xc0\x00\x02\x01'
+
+>>> bits_to_int(b) == 3221225985
+True
+
+>>> int_to_bits(i)
+'11000000.00000000.00000010.00000001'
+
+>>> int_to_str(i)
+'192.0.2.1'
+
+>>> int_to_words(i)
+(192, 0, 2, 1)
+
+>>> int_to_packed(i)
+'\xc0\x00\x02\x01'
+
+>>> str_to_int(s) == 3221225985
+True
+
+>>> words_to_int(t) == 3221225985
+True
+
+>>> words_to_int(list(t)) == 3221225985
+True
+
+>>> packed_to_int(p) == 3221225985
+True
+
+}}}
diff --git a/netaddr/tests/strategy/ipv6.txt b/netaddr/tests/strategy/ipv6.txt
new file mode 100644
index 0000000..ecef3cc
--- /dev/null
+++ b/netaddr/tests/strategy/ipv6.txt
@@ -0,0 +1,256 @@
+=IP version 6 Strategy Module=
+
+Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
+
+{{{
+
+>>> from netaddr.strategy.ipv6 import *
+
+}}}
+
+==Basic Smoke Tests==
+
+{{{
+
+>>> b = '0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:1111111111111111:1111111111111110'
+>>> i = 4294967294
+>>> t = (0, 0, 0, 0, 0, 0, 0xffff, 0xfffe)
+>>> s = '::255.255.255.254'
+>>> p = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe'
+
+>>> bits_to_int(b) == 4294967294
+True
+
+>>> int_to_bits(i) == b
+True
+
+>>> int_to_str(i)
+'::255.255.255.254'
+
+>>> int_to_words(i)
+(0, 0, 0, 0, 0, 0, 65535, 65534)
+
+>>> int_to_packed(i)
+'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe'
+
+>>> str_to_int(s) == 4294967294
+True
+
+>>> words_to_int(t) == 4294967294
+True
+
+>>> words_to_int(list(t)) == 4294967294
+True
+
+>>> packed_to_int(p) == 4294967294
+True
+
+}}}
+
+==More Specific IPv6 Tests==
+
+IPv6 string address variants that are all equivalent.
+
+{{{
+
+>>> i = 42540766411282592856903984951992014763
+>>> str_to_int('2001:0db8:0000:0000:0000:0000:1428:57ab') == i
+True
+
+>>> str_to_int('2001:0db8:0000:0000:0000::1428:57ab') == i
+True
+
+>>> str_to_int('2001:0db8:0:0:0:0:1428:57ab') == i
+True
+
+>>> str_to_int('2001:0db8:0:0::1428:57ab') == i
+True
+
+>>> str_to_int('2001:0db8::1428:57ab') == i
+True
+
+>>> str_to_int('2001:0DB8:0000:0000:0000:0000:1428:57AB') == i
+True
+
+>>> str_to_int('2001:DB8::1428:57AB') == i
+True
+
+}}}
+
+Intensive IPv6 string address validation testing.
+
+Positive tests.
+
+{{{
+
+>>> valid_addrs = (
+... # RFC 4291
+... # Long forms.
+... 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
+... '1080:0:0:0:8:800:200C:417A', # a unicast address
+... 'FF01:0:0:0:0:0:0:43', # a multicast address
+... '0:0:0:0:0:0:0:1', # the loopback address
+... '0:0:0:0:0:0:0:0', # the unspecified addresses
+...
+... # Short forms.
+... '1080::8:800:200C:417A', # a unicast address
+... 'FF01::43', # a multicast address
+... '::1', # the loopback address
+... '::', # the unspecified addresses
+...
+... # IPv4 compatible forms.
+... '::192.0.2.1',
+... '::ffff:192.0.2.1',
+... '0:0:0:0:0:0:192.0.2.1',
+... '0:0:0:0:0:FFFF:192.0.2.1',
+... '0:0:0:0:0:0:13.1.68.3',
+... '0:0:0:0:0:FFFF:129.144.52.38',
+... '::13.1.68.3',
+... '::FFFF:129.144.52.38',
+...
+... # Other tests.
+... '1::',
+... '::ffff',
+... 'ffff::',
+... 'ffff::ffff',
+... '0:1:2:3:4:5:6:7',
+... '8:9:a:b:c:d:e:f',
+... '0:0:0:0:0:0:0:0',
+... 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
+... )
+
+>>> for addr in valid_addrs:
+... addr, valid_str(addr)
+('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210', True)
+('1080:0:0:0:8:800:200C:417A', True)
+('FF01:0:0:0:0:0:0:43', True)
+('0:0:0:0:0:0:0:1', True)
+('0:0:0:0:0:0:0:0', True)
+('1080::8:800:200C:417A', True)
+('FF01::43', True)
+('::1', True)
+('::', True)
+('::192.0.2.1', True)
+('::ffff:192.0.2.1', True)
+('0:0:0:0:0:0:192.0.2.1', True)
+('0:0:0:0:0:FFFF:192.0.2.1', True)
+('0:0:0:0:0:0:13.1.68.3', True)
+('0:0:0:0:0:FFFF:129.144.52.38', True)
+('::13.1.68.3', True)
+('::FFFF:129.144.52.38', True)
+('1::', True)
+('::ffff', True)
+('ffff::', True)
+('ffff::ffff', True)
+('0:1:2:3:4:5:6:7', True)
+('8:9:a:b:c:d:e:f', True)
+('0:0:0:0:0:0:0:0', True)
+('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', True)
+
+}}}
+
+Negative tests.
+
+{{{
+
+>>> invalid_addrs = (
+... 'g:h:i:j:k:l:m:n', # bad chars.
+... '0:0:0:0:0:0:0:0:0' # too long,
+... '', # empty string
+... # Unexpected types.
+... [],
+... (),
+... {},
+... True,
+... False,
+... )
+
+>>> for addr in invalid_addrs:
+... addr, valid_str(addr)
+('g:h:i:j:k:l:m:n', False)
+('0:0:0:0:0:0:0:0:0', False)
+([], False)
+((), False)
+({}, False)
+(True, False)
+(False, False)
+
+}}}
+
+String compaction tests.
+
+{{{
+
+>>> valid_addrs = {
+... # RFC 4291
+... 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' : 'fedc:ba98:7654:3210:fedc:ba98:7654:3210',
+... '1080:0:0:0:8:800:200C:417A' : '1080::8:800:200c:417a', # a unicast address
+... 'FF01:0:0:0:0:0:0:43' : 'ff01::43', # a multicast address
+... '0:0:0:0:0:0:0:1' : '::1', # the loopback address
+... '0:0:0:0:0:0:0:0' : '::', # the unspecified addresses
+... }
+
+>>> for long_form, short_form in valid_addrs.items():
+... int_val = str_to_int(long_form)
+... calc_short_form = int_to_str(int_val)
+... calc_short_form == short_form
+True
+True
+True
+True
+True
+
+}}}
+
+IPv6 mapped and compatible IPv4 string formatting.
+
+{{{
+
+>>> int_to_str(0xffff)
+'::ffff'
+
+>>> int_to_str(0xffffff)
+'::0.255.255.255'
+>>> int_to_str(0xffffffff)
+'::255.255.255.255'
+
+>>> int_to_str(0x1ffffffff)
+'::1:ffff:ffff'
+
+>>> int_to_str(0xffffffffffff)
+'::ffff:255.255.255.255'
+
+>>> int_to_str(0xfffeffffffff)
+'::fffe:ffff:ffff'
+
+>>> int_to_str(0xffffffffffff)
+'::ffff:255.255.255.255'
+
+>>> int_to_str(0xfffffffffff1)
+'::ffff:255.255.255.241'
+
+>>> int_to_str(0xfffffffffffe)
+'::ffff:255.255.255.254'
+
+>>> int_to_str(0xffffffffff00)
+'::ffff:255.255.255.0'
+
+>>> int_to_str(0xffffffff0000)
+'::ffff:255.255.0.0'
+
+>>> int_to_str(0xffffff000000)
+'::ffff:255.0.0.0'
+
+>>> int_to_str(0xffff000000)
+'::ff:ff00:0'
+
+>>> int_to_str(0xffff00000000)
+'::ffff:0.0.0.0'
+
+>>> int_to_str(0x1ffff00000000)
+'::1:ffff:0:0'
+
+>>> int_to_str(0xffff00000000)
+'::ffff:0.0.0.0'
+
+}}}
diff --git a/netaddr/tests/test.py b/netaddr/tests/test.py
new file mode 100755
index 0000000..6134a37
--- /dev/null
+++ b/netaddr/tests/test.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+
+import unittest
+import doctest
+
+tests = ['tutorial.txt', 'constructor.txt']
+
+for test in tests:
+ suite = doctest.DocFileSuite(test, optionflags=doctest.ELLIPSIS)
+ test_runner = unittest.TextTestRunner()
+ test_runner.run(suite)
diff --git a/netaddr/util.py b/netaddr/util.py
deleted file mode 100755
index a2cc6c0..0000000
--- a/netaddr/util.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""utility functions"""
-
-def num_bits(n):
- """Minimum number of bits needed to represent a given unsigned integer."""
- n = abs(n)
- numbits = 0
- while n:
- numbits += 1
- n >>= 1
- return numbits
-
-#-----------------------------------------------------------------------------
-def bytes_to_bits():
- """
- Generates a 256 element list of 8-bit binary digit strings. List index is
- equivalent to the bit string value.
- """
- lookup = []
- bits_per_byte = range(7, -1, -1)
- for num in range(256):
- bits = 8*[None]
- for i in bits_per_byte:
- bits[i] = '01'[num&1]
- num >>= 1
- lookup.append(''.join(bits))
- return lookup
-
-BYTES_TO_BITS = bytes_to_bits()
-
diff --git a/release.bat b/release.bat
index 0361a6c..89bc62f 100755
--- a/release.bat
+++ b/release.bat
@@ -1,10 +1,10 @@
-@echo off
+:@echo off
:
: netaddr Windows binary and Python egg package release build
:
set DIST_DIR=..\builds\
-D:\python24\python setup.py bdist_wininst --dist-dir=%DIST_DIR%
+C:\python25\python setup.py bdist_wininst --dist-dir=%DIST_DIR%
rmdir /S /Q .\build\
Y:\virtualenv\py24_vanilla\Scripts\python.exe setup_egg.py bdist_egg --dist-dir=%DIST_DIR%
diff --git a/release.py b/release.py
index 5ea2f2f..cee84ea 100644
--- a/release.py
+++ b/release.py
@@ -41,34 +41,32 @@ license = 'BSD License',
# NB - keep this text around 74 characters wide so it is viewable
# in various fixed window sizes.
-long_description = """
-netaddr is a Python library for the representation and manipulation
-of various common network address formats and notations.
+long_description = """A network address representation and manipulation library.
-It takes the hassle out of fiddling with innumerable variations of
-network addresses, presenting a consistent, extensible, easy-to-use
-and above all Pythonic API.
+netaddr provides a Pythonic way to work with :-
-With it you can represent, validate, convert, categorize, iterate,
-generate, slice (and dice) :-
+- IPv4 and IPv6 addresses and subnet (including CIDR notation)
+- MAC (Media Access Control) addresses in multiple formats
+- IEEE EUI-64, OUI and IAB identifiers
+- a user friendly IP glob-style format
-* IP version 4
-* IP version 6
-* CIDR (Classless Inter-Domain Routing) both IPv4 and IPv6
-* MAC (Media Access Control) and IEEE EUI-48 and EUI-64
-* Support for arbitrary IP address ranges with CIDR interoperability
-* User friendly alternative IPv4 range syntax using netaddr's
- glob-style Wildcard addresses
+Included are routines for :-
-For examples see the project wiki :-
+- generating, sorting and summarizing IP addresses
+- converting IP addresses and ranges between various different formats
+- arbitrary IP address range calculations and conversions
+- querying IEEE OUI and IAB organisational information
+- querying of IP standards related data from key IANA data sources
+
+For examples please visit the example wiki pages :-
http://code.google.com/p/netaddr/wiki/NetAddrExamples
-API documentation (auto-generated with epydoc) :-
+Complete online API documentation is also available on PyPI :-
http://packages.python.org/netaddr/
-For details on latest changes and updates in the current and previous
+For details on latest changes and updates in current and previous
releases see the CHANGELOG :-
http://code.google.com/p/netaddr/wiki/CHANGELOG
diff --git a/release.sh b/release.sh
index d39d2ed..4b3aabc 100755
--- a/release.sh
+++ b/release.sh
@@ -2,6 +2,9 @@
#
# netaddr source release script
#
+# get latest .spec file
+wget http://cvs.fedoraproject.org/viewvc/devel/python-netaddr/python-netaddr.spec?view=co
+
# clean up
cd $(dirname $0)
rm docs/api/*
diff --git a/tests/ipv4strategy_speed_tests.py b/tests/ipv4strategy_speed_tests.py
deleted file mode 100755
index dd0b580..0000000
--- a/tests/ipv4strategy_speed_tests.py
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env python
-"""
-A little script to prove the speed difference between a basic AddrStrategy
-support IPv6 and a customised subclass of AddrStrategy that implements certain
-methods using Python socket and struct modules.
-
-Sample output on my beastly 3GHz Intel Core 2 Quad Q9450!
-
-5000 iterations, repeated 3 time(s)
-
-AddrStrategy timings:
---------------------
-[0.21094412837385756, 0.2100993282665814, 0.20949589961852699]
-avg: 0.21017978542
-
-IPv4Strategy timings:
---------------------
-[0.060295512418477748, 0.059709544090100874, 0.059620566301024303]
-avg: 0.0598752076032
-
-IPv4Strategy is 3.5x faster than AddrStrategy!
-"""
-
-import os
-import sys
-import pprint
-from timeit import Timer
-
-# Run all unit tests for all modules.
-path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
-sys.path.insert(0, path)
-
-from netaddr.strategy import *
-
-ST_IPV4_BASIC = AddrStrategy(addr_type=AT_INET, width=32, word_size=8,
- word_fmt='%d', word_sep='.', word_base=10)
-
-#-----------------------------------------------------------------------------
-print 'Bargain basement strategy setup :-'
-print '-'*80
-pprint.pprint(ST_IPV4_BASIC.__dict__)
-print '-'*80
-
-#-----------------------------------------------------------------------------
-def ipv4_opt_speed_test():
- ST_IPV4.str_to_int('192.168.0.1')
- ST_IPV4.int_to_str(3232235521)
- ST_IPV4.int_to_words(3232235521)
- ST_IPV4.words_to_int((192, 168, 0, 1))
-
-#-----------------------------------------------------------------------------
-def ipv4_std_speed_test():
- ST_IPV4_BASIC.str_to_int('192.168.0.1')
- ST_IPV4_BASIC.int_to_str(3232235521)
- ST_IPV4_BASIC.int_to_words(3232235521)
- ST_IPV4_BASIC.words_to_int((192, 168, 0, 1))
-
-#-----------------------------------------------------------------------------
-def ipv4_speed_test():
- repeat = 3
- iterations = 5000
- t1 = Timer('ipv4_std_speed_test()',
- 'from __main__ import ipv4_std_speed_test')
- results1 = t1.repeat(repeat, iterations)
- avg1 = sum(results1) / float(len(results1))
-
- t2 = Timer('ipv4_opt_speed_test()',
- 'from __main__ import ipv4_opt_speed_test')
- results2 = t2.repeat(repeat, iterations)
- avg2 = sum(results2) / float(len(results2))
-
- print '%r iterations, repeated %r time(s)' % (iterations, repeat)
- print 'AddrStrategy timings:', results1, 'avg:', avg1
- print 'IPv4Strategy timings:', results2, 'avg:', avg2
- print 'IPv4Strategy is %.1fx faster than AddrStrategy!' \
- % (avg1 / avg2)
-
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- ipv4_speed_test()
diff --git a/tests/ipv6strategy_speed_tests.py b/tests/ipv6strategy_speed_tests.py
deleted file mode 100755
index 9557b2c..0000000
--- a/tests/ipv6strategy_speed_tests.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python
-"""
-A little script to prove the speed difference between a basic AddrStrategy
-support IPv6 and a customised subclass of AddrStrategy that implements certain
-methods using Python socket and struct modules.
-
-Sample output on my beastly 3GHz Intel Core 2 Quad Q9450!
-
-5000 iterations, repeated 3 time(s)
-
-AddrStrategy timings:
---------------------
-[0.35877585411071777, 0.36030697822570801, 0.37746715545654297]
-avg: 0.365516662598
-
-IPv4Strategy timings:
---------------------
-[0.31410598754882812, 0.28557991981506348, 0.2736968994140625]
-avg: 0.291127602259
-
-IPv6Strategy is 1.3x faster than AddrStrategy!
-"""
-
-import os
-import sys
-import pprint
-from timeit import Timer
-
-# Run all unit tests for all modules.
-path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
-sys.path.insert(0, path)
-
-from netaddr.strategy import *
-
-ST_IPV6_BASIC = AddrStrategy(addr_type=AT_INET6, width=128, word_size=16,
- word_fmt='%.4x', word_sep=':', word_base=16)
-
-#-----------------------------------------------------------------------------
-print 'Bargain basement strategy setup :-'
-print '-'*80
-pprint.pprint(ST_IPV6_BASIC.__dict__)
-print '-'*80
-
-#-----------------------------------------------------------------------------
-def ipv6_opt_speed_test():
- ST_IPV6.str_to_int('ffff:fffe:ffff:fffe:ffff:fffe:ffff:fffe')
- ST_IPV6.int_to_str(340282366841710300930663525760219742206)
- ST_IPV6.int_to_words(340282366841710300930663525760219742206)
- ST_IPV6.words_to_int(
- (65535, 65534, 65535, 65534, 65535, 65534, 65535, 65534))
-
-#-----------------------------------------------------------------------------
-def ipv6_std_speed_test():
- ST_IPV6_BASIC.str_to_int('ffff:fffe:ffff:fffe:ffff:fffe:ffff:fffe')
- ST_IPV6_BASIC.int_to_str(340282366841710300930663525760219742206)
- ST_IPV6_BASIC.int_to_words(340282366841710300930663525760219742206)
- ST_IPV6_BASIC.words_to_int(
- (65535, 65534, 65535, 65534, 65535, 65534, 65535, 65534))
-
-#-----------------------------------------------------------------------------
-def ipv6_speed_test():
- repeat = 3
- iterations = 5000
- t1 = Timer('ipv6_std_speed_test()',
- 'from __main__ import ipv6_std_speed_test')
- results1 = t1.repeat(repeat, iterations)
- avg1 = sum(results1) / float(len(results1))
-
- t2 = Timer('ipv6_opt_speed_test()',
- 'from __main__ import ipv6_opt_speed_test')
- results2 = t2.repeat(repeat, iterations)
- avg2 = sum(results2) / float(len(results2))
-
- print '%r iterations, repeated %r time(s)' % (iterations, repeat)
- print 'AddrStrategy timings:', results1, 'avg:', avg1
- print 'IPv6Strategy timings:', results2, 'avg:', avg2
- print 'IPv6Strategy is %.1fx faster than AddrStrategy!' \
- % (avg1 / avg2)
-
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- ipv6_speed_test()
diff --git a/tests/iterator_speed_tests.py b/tests/iterator_speed_tests.py
deleted file mode 100644
index 8ae38f0..0000000
--- a/tests/iterator_speed_tests.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# Turn this into a test. This puts code through
-# its paces by trawl the whole IPv4 address space ...
-
-import os
-import sys
-import time
-
-path = os.path.abspath(os.path.join(os.path.dirname(__file__), '../netaddr'))
-sys.path.insert(0, path)
-
-
-
-from netaddr import CIDR
-
-def cidr_iterator_speed_test():
- """
-0.0.0.0 00000000.00000000.00000000.00000000 0.01 sec(s)
-0.0.0.1 00000000.00000000.00000000.00000001 0.00 sec(s)
-0.0.0.2 00000000.00000000.00000000.00000010 0.00 sec(s)
-0.0.0.4 00000000.00000000.00000000.00000100 0.00 sec(s)
-0.0.0.8 00000000.00000000.00000000.00001000 0.00 sec(s)
-0.0.0.16 00000000.00000000.00000000.00010000 0.02 sec(s)
-0.0.0.32 00000000.00000000.00000000.00100000 0.02 sec(s)
-0.0.0.64 00000000.00000000.00000000.01000000 0.02 sec(s)
-0.0.0.128 00000000.00000000.00000000.10000000 0.05 sec(s)
-0.0.1.0 00000000.00000000.00000001.00000000 0.09 sec(s)
-0.0.2.0 00000000.00000000.00000010.00000000 0.16 sec(s)
-0.0.4.0 00000000.00000000.00000100.00000000 0.33 sec(s)
-0.0.8.0 00000000.00000000.00001000.00000000 0.69 sec(s)
-0.0.16.0 00000000.00000000.00010000.00000000 1.36 sec(s)
-0.0.32.0 00000000.00000000.00100000.00000000 2.72 sec(s)
-0.0.64.0 00000000.00000000.01000000.00000000 6.52 sec(s)
-0.0.128.0 00000000.00000000.10000000.00000000 12.06 sec(s)
-0.1.0.0 00000000.00000001.00000000.00000000 22.19 sec(s)
-0.2.0.0 00000000.00000010.00000000.00000000 44.55 sec(s)
-0.4.0.0 00000000.00000100.00000000.00000000 91.57 sec(s)
-0.8.0.0 00000000.00001000.00000000.00000000 186.12 sec(s)
-0.16.0.0 00000000.00010000.00000000.00000000 401.26 sec(s)
-0.32.0.0 00000000.00100000.00000000.00000000 751.38 sec(s)
-0.64.0.0 00000000.01000000.00000000.00000000 1431.89 sec(s)
-0.128.0.0 00000000.10000000.00000000.00000000 2970.21 sec(s)
-
-I gave up here but its interesting that this consistently uses about
-5Mb of memory... The joy of generators!
-
-1.0.0.0 00000001.00000000.00000000.00000000
-2.0.0.0 00000010.00000000.00000000.00000000
-4.0.0.0 00000100.00000000.00000000.00000000
-8.0.0.0 00001000.00000000.00000000.00000000
-16.0.0.0 00010000.00000000.00000000.00000000
-32.0.0.0 00100000.00000000.00000000.00000000
-64.0.0.0 01000000.00000000.00000000.00000000
-128.0.0.0 10000000.00000000.00000000.00000000
-
-IPy - IPv4
-0.0.0.0 00000000000000000000000000000000 0.02 sec(s)
-0.0.0.1 00000000000000000000000000000001 0.00 sec(s)
-0.0.0.2 00000000000000000000000000000010 0.00 sec(s)
-0.0.0.4 00000000000000000000000000000100 0.00 sec(s)
-0.0.0.8 00000000000000000000000000001000 0.02 sec(s)
-0.0.0.16 00000000000000000000000000010000 0.00 sec(s)
-0.0.0.32 00000000000000000000000000100000 0.02 sec(s)
-0.0.0.64 00000000000000000000000001000000 0.03 sec(s)
-0.0.0.128 00000000000000000000000010000000 0.06 sec(s)
-0.0.1.0 00000000000000000000000100000000 0.12 sec(s)
-0.0.2.0 00000000000000000000001000000000 0.22 sec(s)
-0.0.4.0 00000000000000000000010000000000 0.44 sec(s)
-0.0.8.0 00000000000000000000100000000000 0.92 sec(s)
-0.0.16.0 00000000000000000001000000000000 1.82 sec(s)
-0.0.32.0 00000000000000000010000000000000 3.65 sec(s)
-0.0.64.0 00000000000000000100000000000000 7.27 sec(s)
-0.0.128.0 00000000000000001000000000000000 14.49 sec(s)
-
-IPv6
-
-:: 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000 0.01 sec(s)
-::1 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000001 0.00 sec(s)
-::2 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000010 0.00 sec(s)
-::4 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000100 0.02 sec(s)
-::8 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000001000 0.00 sec(s)
-::10 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000010000 0.02 sec(s)
-::20 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000100000 0.02 sec(s)
-::40 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000001000000 0.05 sec(s)
-::80 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000010000000 0.06 sec(s)
-::100 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000100000000 0.14 sec(s)
-::200 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000001000000000 0.31 sec(s)
-::400 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000010000000000 0.52 sec(s)
-::800 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000100000000000 1.09 sec(s)
-::1000 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0001000000000000 2.17 sec(s)
-::2000 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0010000000000000 4.32 sec(s)
-::4000 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0100000000000000 8.67 sec(s)
-::8000 0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:0000000000000000:1000000000000000 17.29 sec(s)
-
-IPy - IPv6
-
-FAILED! No output produced ...
- """
- t1 = time.time()
- #for ip in CIDR('::/112'):
- for ip in CIDR('0.0.0.0/12'):
- i = int(ip)
- if i & (i - 1) == 0:
- delta = time.time() - t1
-# print "%-15s %s %.2f sec(s)" % (ip, ip.bits(), delta)
- print "%-15s %s %.2f sec(s)" % (ip, 'n/a', delta)
- t1 = time.time()
-
-if __name__ == '__main__':
- import pycallgraph
- pycallgraph.start_trace()
- cidr_iterator_speed_test()
- pycallgraph.make_dot_graph('callgraph_IPv4.png')
diff --git a/tests/ut_netaddr.py b/tests/ut_netaddr.py
deleted file mode 100755
index 31babb8..0000000
--- a/tests/ut_netaddr.py
+++ /dev/null
@@ -1,2449 +0,0 @@
-#!/usr/bin/env python
-#-----------------------------------------------------------------------------
-# Copyright (c) 2008-2009, David P. D. Moss. All rights reserved.
-#
-# Released under the BSD license. See the LICENSE file for details.
-#-----------------------------------------------------------------------------
-"""
-Consolidated set of unit tests for the netaddr module.
-
-Uses TEST-NET references throughout, as described in RFC 3330.
-
-References :-
-- RFC3330 Special-Use IPv4 Addresses
-"""
-from unittest import TestCase, TestLoader, TestSuite, TextTestRunner
-import os as _os
-import sys as _sys
-import platform as _platform
-import random as _random
-
-PATH = _os.path.abspath(_os.path.join(_os.path.dirname(__file__), '..'))
-_sys.path.insert(0, PATH)
-
-from netaddr import *
-import netaddr.strategy
-
-#-----------------------------------------------------------------------------
-class LibraryConstantTests(TestCase):
- """Tests on netaddr's constants"""
-
- def testTypeFlavour(self):
- """AT_* constant tests - types"""
- for constant in (AT_LINK, AT_EUI64, AT_INET, AT_INET6):
- self.assertFalse(callable(constant)) # not callable.
- self.assertTrue(isinstance(constant, int)) # are integers.
-
- def testAddressTypeConstants(self):
- """AT_* constant tests - values"""
- # MAC/EUI - layer 2.
- self.assertEqual(AT_LINK , 48)
- self.assertEqual(AT_EUI64, 64)
-
- # IP - layer 3.
- self.assertEqual(AT_INET , 4)
- self.assertEqual(AT_INET6, 6)
-
-#-----------------------------------------------------------------------------
-class AddrStrategyTests(TestCase):
- """Tests on AddrStrategy() objects with various configurations"""
-
- def testInterfaceWithIPv4(self):
- """AddrStrategy() - interface tests (IPv4 specific)"""
- strategy = netaddr.strategy.AddrStrategy(addr_type=AT_INET,
- width=32,
- word_size=8,
- word_fmt='%d',
- word_sep='.',
- word_base=10)
-
- b = '11000000.00000000.00000010.00000001'
- i = 3221225985
- t = (192, 0, 2, 1)
- s = '192.0.2.1'
- p = '\xc0\x00\x02\x01'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
- self.assertEqual(strategy.int_to_packed(i), p)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
- def testInterfaceWithIPv6(self):
- """AddrStrategy() - interface tests (IPv6 specific)"""
- #
- # NB - AddrStrategy does not support the compact string
- # representation of IPv6 addresses. See IPv6Strategy
- # subclass for an alternative that does this.
- #
- strategy = netaddr.strategy.AddrStrategy(addr_type=AT_INET6,
- width=128,
- word_size=16,
- word_fmt='%x',
- word_sep=':')
-
- b = '0000000000000000:0000000000000000:0000000000000000:' \
- '0000000000000000:0000000000000000:0000000000000000:' \
- '1111111111111111:1111111111111110'
- i = 4294967294
- t = (0, 0, 0, 0, 0, 0, 0xffff, 0xfffe)
- s = '0:0:0:0:0:0:ffff:fffe'
- p = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe'
-
- self.assertEqual(strategy.int_to_packed(i), p)
-
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
- def testInterfaceWithBasicMAC(self):
- """AddrStrategy() - interface tests (Unix MAC address format)"""
- strategy = netaddr.strategy.AddrStrategy(addr_type=AT_LINK,
- width=48,
- word_size=8,
- word_fmt='%02x',
- word_sep=':')
-
- b = '00000000:00001111:00011111:00010010:11100111:00110011'
- i = 64945841971
- t = (0x0, 0x0f, 0x1f, 0x12, 0xe7, 0x33)
- s = '00:0f:1f:12:e7:33'
- p = '\x00\x0f\x1f\x12\xe7\x33'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
- self.assertEqual(strategy.int_to_packed(i), p)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
- def testInterfaceWithCiscoMAC(self):
- """AddrStrategy() - interface tests (Cisco address format)"""
- strategy = netaddr.strategy.AddrStrategy(addr_type=AT_LINK,
- width=48,
- word_size=16,
- word_fmt='%04x',
- word_sep='.')
-
- b = '0000000000001111.0001111100010010.1110011100110011'
- i = 64945841971
- t = (0xf, 0x1f12, 0xe733)
- s = '000f.1f12.e733'
- p = '\x00\x0f\x1f\x12\xe7\x33'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
- self.assertEqual(strategy.int_to_packed(i), p)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
-#-----------------------------------------------------------------------------
-class IPv4StrategyTests(TestCase):
- """Tests on IPv4Strategy() class and subclass objects"""
-
- def testInterface(self):
- """IPv4Strategy() - interface tests"""
- strategy = netaddr.strategy.IPv4Strategy()
-
- b = '11000000.00000000.00000010.00000001'
- i = 3221225985
- t = (192, 0, 2, 1)
- s = '192.0.2.1'
- p = '\xc0\x00\x02\x01'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
- self.assertEqual(strategy.int_to_packed(i), p)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
-
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
-#-----------------------------------------------------------------------------
-class IPv6StrategyTests(TestCase):
- """Tests on IPv6Strategy() objects"""
-
- def testInterface(self):
- """IPv6Strategy() - interface tests"""
- strategy = netaddr.strategy.IPv6Strategy()
-
- b = '0010000000000001:0000110110111000:0000000000000000:' \
- '0000000000000000:0000000000000000:0000000000000000:' \
- '0001010000101000:0101011110101011'
- i = 42540766411282592856903984951992014763
- t = (8193, 3512, 0, 0, 0, 0, 5160, 22443)
- s = '2001:db8::1428:57ab'
- p = '\x20\x01\x0d\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x14\x28\x57\xab'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
- self.assertEqual(strategy.int_to_packed(i), p)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- # packed string to x
- self.assertEqual(strategy.packed_to_int(p), i)
-
- # IPv6 address variants that are all equivalent.
- ipv6_addr_equals = (
- '2001:0db8:0000:0000:0000:0000:1428:57ab',
- '2001:0db8:0000:0000:0000::1428:57ab',
- '2001:0db8:0:0:0:0:1428:57ab',
- '2001:0db8:0:0::1428:57ab',
- '2001:0db8::1428:57ab',
- # Upper case.
- '2001:0DB8:0000:0000:0000:0000:1428:57AB',
- '2001:DB8::1428:57AB',
- )
-
- for ipv6_addr in ipv6_addr_equals:
- self.assertEqual(strategy.str_to_int(ipv6_addr), i)
-
- def testStringVariantParsing(self):
- """IPv6Strategy() - address variant parsing tests"""
- # Positive testing.
- valid_addrs = (
- # RFC 4291
- # Long forms.
- 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210',
- '1080:0:0:0:8:800:200C:417A', # a unicast address
- 'FF01:0:0:0:0:0:0:43', # a multicast address
- '0:0:0:0:0:0:0:1', # the loopback address
- '0:0:0:0:0:0:0:0', # the unspecified addresses
-
- # Short forms.
- '1080::8:800:200C:417A', # a unicast address
- 'FF01::43', # a multicast address
- '::1', # the loopback address
- '::', # the unspecified addresses
-
- # IPv4 compatible forms.
- '::192.0.2.1',
- '::ffff:192.0.2.1',
- '0:0:0:0:0:0:192.0.2.1',
- '0:0:0:0:0:FFFF:192.0.2.1',
- '0:0:0:0:0:0:13.1.68.3',
- '0:0:0:0:0:FFFF:129.144.52.38',
- '::13.1.68.3',
- '::FFFF:129.144.52.38',
-
- # Other tests.
- '1::',
- '::ffff',
- 'ffff::',
- 'ffff::ffff',
- '0:1:2:3:4:5:6:7',
- '8:9:a:b:c:d:e:f',
- '0:0:0:0:0:0:0:0',
- 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
- )
-
- # Negative testing.
- invalid_addrs = (
- 'g:h:i:j:k:l:m:n', # bad chars.
- '0:0:0:0:0:0:0:0:0' # too long,
- '', # empty string
- # Unexpected types.
- [],
- (),
- {},
- True,
- False,
- # Almost but not quite valid.
-#FIXME: '::fffe:192.0.2.1',
- )
-
- strategy = netaddr.strategy.ST_IPV6
-
- for addr in valid_addrs:
- self.assertTrue(strategy.valid_str(addr),
- 'Address %r is expected to be valid!' % addr)
-
- for addr in invalid_addrs:
- self.assertFalse(strategy.valid_str(addr),
- 'Address %r is expected to be invalid!' % str(addr))
-
- def testStringEquivalence(self):
- """IPv6Strategy() - address string compaction tests"""
- # Positive testing.
- valid_addrs = {
- # RFC 4291
- 'FEDC:BA98:7654:3210:FEDC:BA98:7654:3210' : 'fedc:ba98:7654:3210:fedc:ba98:7654:3210',
- '1080:0:0:0:8:800:200C:417A' : '1080::8:800:200c:417a', # a unicast address
- 'FF01:0:0:0:0:0:0:43' : 'ff01::43', # a multicast address
- '0:0:0:0:0:0:0:1' : '::1', # the loopback address
- '0:0:0:0:0:0:0:0' : '::', # the unspecified addresses
- }
-
- strategy = netaddr.strategy.ST_IPV6
-
- for long_form, short_form in valid_addrs.items():
- int_val = strategy.str_to_int(long_form)
- calc_short_form = strategy.int_to_str(int_val)
- self.assertEqual(calc_short_form, short_form)
-
- def testStringPadding(self):
- """IPv6Strategy() - address string padding tests"""
- strategy = netaddr.strategy.ST_IPV6
-
- addr = 'ffff:ffff::ffff:ffff'
- expected_int = 340282366841710300949110269842519228415
-
- int_addr = strategy.str_to_int(addr)
-
- self.assertEqual(int_addr, expected_int)
-
- self.assertEqual(strategy.int_to_str(int_addr, False), 'ffff:ffff:0:0:0:0:ffff:ffff')
-
- self.assertEqual(strategy.int_to_str(int_addr), 'ffff:ffff::ffff:ffff')
-
- words = strategy.int_to_words(int_addr)
-
- self.assertEqual(words, (65535, 65535, 0, 0, 0, 0, 65535, 65535))
- self.assertEqual(strategy.words_to_int(words), expected_int)
-
- def testIntegerFormatting(self):
- """IPv6Strategy() - IPv4 integer to string formatting"""
- self.assertEqual(ST_IPV6.int_to_str(0xffff), '::ffff')
- self.assertEqual(ST_IPV6.int_to_str(0xffffff), '::0.255.255.255')
- self.assertEqual(ST_IPV6.int_to_str(0xffffffff),'::255.255.255.255')
- self.assertEqual(ST_IPV6.int_to_str(0x1ffffffff),'::1:ffff:ffff')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffffffffffff), '::ffff:255.255.255.255')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xfffeffffffff), '::fffe:ffff:ffff')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffffffffffff), '::ffff:255.255.255.255')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xfffffffffff1), '::ffff:255.255.255.241')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xfffffffffffe), '::ffff:255.255.255.254')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffffffffff00), '::ffff:255.255.255.0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffffffff0000), '::ffff:255.255.0.0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffffff000000), '::ffff:255.0.0.0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffff000000), '::ff:ff00:0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffff00000000), '::ffff:0.0.0.0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0x1ffff00000000), '::1:ffff:0:0')
-
- self.assertEqual(
- ST_IPV6.int_to_str(0xffff00000000), '::ffff:0.0.0.0')
-
-#-----------------------------------------------------------------------------
-class EUI48StrategyTests(TestCase):
- """Tests on EUI48Strategy() objects"""
-
- def testInterface(self):
- """EUI48Strategy() - interface tests"""
- strategy = netaddr.strategy.EUI48Strategy()
-
- b = '00000000-00001111-00011111-00010010-11100111-00110011'
- i = 64945841971
- t = (0x0, 0x0f, 0x1f, 0x12, 0xe7, 0x33)
- s = '00-0F-1F-12-E7-33'
-
- # bits to x
- self.assertEqual(strategy.bits_to_int(b), i)
-
- # int to x
- self.assertEqual(strategy.int_to_bits(i), b)
- self.assertEqual(strategy.int_to_str(i), s)
- self.assertEqual(strategy.int_to_words(i), t)
-
- # str to x
- self.assertEqual(strategy.str_to_int(s), i)
-
- # words to x
- self.assertEqual(strategy.words_to_int(t), i)
- self.assertEqual(strategy.words_to_int(list(t)), i)
-
- def testStrategyConfigSettings(self):
- """EUI48Strategy() - interface configuration tests"""
- eui48 = '00-C0-29-C2-52-FF'
- eui48_int = 825334321919
-
- unix_mac = netaddr.strategy.EUI48Strategy(word_sep=':', word_fmt='%x')
-
- self.assertEqual(
- unix_mac.int_to_str(eui48_int).lower(), '0:c0:29:c2:52:ff')
- unix_mac.word_sep = '-'
- self.assertEqual(
- unix_mac.int_to_str(eui48_int).lower(), '0-c0-29-c2-52-ff')
- unix_mac.word_fmt = '%.2X'
- self.assertEqual(unix_mac.int_to_str(eui48_int), '00-C0-29-C2-52-FF')
-
-#-----------------------------------------------------------------------------
-class PublicStrategyObjectTests(TestCase):
- """Tests on public netaddr Strategy objects"""
-
- def setUp(self):
- self.strategies = (ST_IPV4, ST_IPV6, ST_EUI48, ST_EUI64)
-
- def testStrategyConstants(self):
- """ST_* constant tests - class membership"""
- # Are our exported strategy objects based on strategy base class?
- for strategy in self.strategies:
- self.assertTrue(isinstance(strategy, netaddr.strategy.AddrStrategy))
-
- # Are our strategy objects customised as expected?
- self.assertTrue(isinstance(ST_EUI48, netaddr.strategy.EUI48Strategy))
-
- self.assertTrue(
- isinstance(ST_IPV4, netaddr.strategy.IPv4Strategy))
-
- self.assertTrue(
- isinstance(ST_IPV6, netaddr.strategy.IPv6Strategy))
-
- def testProperties(self):
- """ST_* objects interface check - properties"""
- expected_properties = (
- 'addr_type',
- 'max_int',
- 'max_word',
- 'name',
- 'num_words',
- 'width',
- 'word_base',
- 'word_fmt',
- 'word_sep',
- 'word_size',
- )
-
- for strategy in self.strategies:
- for attribute in expected_properties:
- self.assertTrue(hasattr(strategy, attribute),
- '%r missing' % attribute)
- self.assertFalse(callable(eval('strategy.%s' % attribute)))
-
- def testMethods(self):
- """ST_* objects interface check - methods"""
- expected_methods = (
- 'bits_to_int',
- # 'int_to_arpa', #ST_IP* only.
- 'int_to_bin',
- 'int_to_bits',
- 'int_to_packed',
- 'int_to_str',
- 'int_to_words',
- 'packed_to_int',
- 'str_to_int',
- 'valid_bits',
- 'valid_int',
- 'valid_str',
- 'valid_words',
- 'words_to_int',
- )
-
- for strategy in self.strategies:
- for attribute in expected_methods:
- self.assertTrue(hasattr(strategy, attribute), '%r' % attribute)
- self.assertTrue(callable(eval('strategy.%s' % attribute)))
-
- def testIPInteface(self):
- """IP specific strategy interface checks"""
- for strategy in (ST_IPV4, ST_IPV6):
- self.assertTrue(hasattr(strategy, 'int_to_arpa'))
-
-#-----------------------------------------------------------------------------
-class AddrTests(TestCase):
- """Tests on Addr() objects for all supported address types"""
-
- def testExceptionRaising(self):
- """Addr() - invalid constructor argument tests"""
- for addr in ('', [], {}, None, 5.2, -1, 'abc.def.ghi.jkl', '::z'):
- self.assertRaises(AddrFormatError, netaddr.address.Addr, addr)
-
- def testAssignments(self):
- """Addr() - strategy and address type assignment tests"""
- addr = netaddr.address.Addr('0.0.0.0')
- self.assertEqual(addr.value, 0)
- self.assertEqual(addr.addr_type, AT_INET)
- self.assertEqual(addr.strategy, ST_IPV4)
-
- # Test addr_type assignment.
- addr.addr_type = AT_INET6
- self.assertEqual(addr.addr_type, AT_INET6)
- self.assertEqual(addr.strategy, ST_IPV6)
-
- # Test strategy assignment.
- addr.strategy = ST_EUI48
- self.assertEqual(addr.addr_type, AT_LINK)
- self.assertEqual(addr.strategy, ST_EUI48)
-
- addr.strategy = ST_EUI64
- self.assertEqual(addr.addr_type, AT_EUI64)
- self.assertEqual(addr.strategy, ST_EUI64)
-
- # Test value assignment.
- addr.addr_type = AT_INET
- addr.value = '192.0.2.1'
- self.assertEqual(addr.value, 3221225985)
- self.assertEqual(addr.addr_type, AT_INET)
- self.assertEqual(addr.strategy, ST_IPV4)
-
- #---------------------
- # *** IPv4 tests ***
- #---------------------
-
- def testRepresentationsIPv4(self):
- """Addr() - address representation tests (IPv4)"""
- width = 32
- addr = netaddr.address.Addr('192.0.2.1')
- octets = (192, 0, 2, 1)
- int_val = 3221225985
- hex_val = '0xc0000201'
- bit_repr = '11000000.00000000.00000010.00000001'
-
- self.assertEqual(len(addr), width)
- self.assertEqual(addr[0], octets[0])
- self.assertEqual(tuple(addr), octets)
- self.assertEqual(int(addr), int_val)
- self.assertEqual(long(addr), int_val)
- self.assertEqual(hex(addr), hex_val)
- self.assertEqual(addr.bits(), bit_repr)
-
- def testBoundariesIPv4(self):
- """Addr() - boundary tests (IPv4)"""
- addr_min = netaddr.address.Addr('0.0.0.0')
- addr_max = netaddr.address.Addr('255.255.255.255')
- min_val_int = 0
- max_val_int = 4294967295
- max_val_hex = '0xffffffff'
- min_bit_repr = '.'.join(['0'*8 for i in range(4)])
- max_bit_repr = '.'.join(['1'*8 for i in range(4)])
- min_val_octets = (0, 0, 0, 0)
- max_val_octets = (255, 255, 255, 255)
-
- self.assertEqual(int(addr_min), min_val_int)
- self.assertEqual(int(addr_max), max_val_int)
- self.assertEqual(hex(addr_max), max_val_hex)
- self.assertEqual(addr_min.bits(), min_bit_repr)
- self.assertEqual(addr_max.bits(), max_bit_repr)
-
- # Addr indexing tests - addr[x].
- self.assertEqual(tuple(addr_min), min_val_octets)
- self.assertEqual(tuple(addr_max), max_val_octets)
- self.assertEqual(list(addr_min), list(min_val_octets))
- self.assertEqual(list(addr_max), list(max_val_octets))
-
- def testIterationIPv4(self):
- """Addr() - iteration tests (IPv4)"""
- addr = netaddr.address.Addr('192.0.2.1')
- hex_bytes = ['0xc0', '0x0', '0x2', '0x1']
- self.assertEqual([hex(i) for i in addr], hex_bytes)
-
- def testIndexingAndSlicingIPv4(self):
- """Addr() - indexing and slicing tests (IPv4)"""
- addr = netaddr.address.Addr('192.0.2.1')
-
- # using __getitem__()
- self.assertEqual(addr[0], 192)
- self.assertEqual(addr[1], 0)
- self.assertEqual(addr[2], 2)
- self.assertEqual(addr[3], 1)
-
- addr[3] = 2 # using __setitem__()
- self.assertEqual(addr[3], 2) # basic index
- self.assertEqual(addr[-4], 192) # negative index
-
- # Slicing, oh yeah!
- self.assertEqual(addr[0:2], [192, 0]) # basic slice
- self.assertEqual(addr[0:4:2], [192, 2]) # slice with step
- self.assertEqual(addr[-1::-1], [2, 2, 0, 192]) # negative index
-
- def testBooleanAlgebraIPv4(self):
- """Addr() - boolean operator tests (IPv4)"""
- addr_min = netaddr.address.Addr('0.0.0.0')
- addr_max = netaddr.address.Addr('255.255.255.255')
-
- self.assertFalse(addr_min == addr_max)
- self.assertTrue(addr_min != addr_max)
- self.assertTrue(addr_min < addr_max)
- self.assertTrue(addr_min <= addr_max)
- self.assertTrue(addr_min != addr_max)
- self.assertTrue(addr_max > addr_min)
- self.assertTrue(addr_max >= addr_min)
-
- self.assertTrue(IP('127.1') != 'foo')
- self.assertFalse(IP('127.1') != IP('127.1'))
- self.assertTrue(IP('127.1') == IP('127.1'))
- self.assertFalse(IP('127.1') == 2130706433)
- self.assertTrue(IP('127.1') == IP(2130706433))
- self.assertFalse(IP('127.1') == '127.1')
-
- def testIncrementAndDecrementIPv4(self):
- """Addr() - increment and decrement tests (IPv4)"""
- addr = netaddr.address.Addr('0.0.0.0')
- self.assertEqual(int(addr), 0)
- addr += 1
- self.assertEqual(int(addr), 1)
- # Increment it all the way up to the value of a 'real' address.
- addr += 3221225984
- self.assertEqual(str(addr), str(netaddr.address.Addr('192.0.2.1')))
-
- # Roll around boundaries.
- addr = netaddr.address.Addr('255.255.255.255')
- addr += 1
- self.assertEqual(int(addr), 0)
- addr -= 1
- self.assertEqual(int(addr), 0xffffffff)
-
- #---------------------
- # *** IPv6 tests ***
- #---------------------
-
- def testAssignmentsIPv6(self):
- """Addr() - assignment tests (IPv6)"""
- ip_addr = netaddr.address.Addr(0, AT_INET6)
- ip_addr.value = 0xffffc0a80001
- self.assertEqual(str(ip_addr), '::ffff:192.168.0.1')
-
- def testIPv6AddressCompression(self):
- """Addr() - test IPv6 '::' compression algorithm"""
- # Checked against socket.inet_ntop() on Linux (not available on Windows)
- self.assertEqual(str(netaddr.address.Addr('0:0:0:0:0:0:0:0')), '::')
- self.assertEqual(str(netaddr.address.Addr('0:0:0:0:0:0:0:A')), '::a')
- self.assertEqual(str(netaddr.address.Addr('A:0:0:0:0:0:0:0')), 'a::')
- self.assertEqual(str(netaddr.address.Addr('A:0:A:0:0:0:0:0')), 'a:0:a::')
- self.assertEqual(str(netaddr.address.Addr('A:0:0:0:0:0:0:A')), 'a::a')
- self.assertEqual(str(netaddr.address.Addr('0:A:0:0:0:0:0:A')), '0:a::a')
- self.assertEqual(str(netaddr.address.Addr('A:0:A:0:0:0:0:A')), 'a:0:a::a')
- self.assertEqual(str(netaddr.address.Addr('0:0:0:A:0:0:0:A')), '::a:0:0:0:a')
- self.assertEqual(str(netaddr.address.Addr('0:0:0:0:A:0:0:A')), '::a:0:0:a')
- self.assertEqual(str(netaddr.address.Addr('A:0:0:0:0:A:0:A')), 'a::a:0:a')
- self.assertEqual(str(netaddr.address.Addr('A:0:0:A:0:0:A:0')), 'a::a:0:0:a:0')
- self.assertEqual(str(netaddr.address.Addr('A:0:A:0:A:0:A:0')), 'a:0:a:0:a:0:a:0')
- self.assertEqual(str(netaddr.address.Addr('0:A:0:A:0:A:0:A')), '0:a:0:a:0:a:0:a')
- self.assertEqual(str(netaddr.address.Addr('1080:0:0:0:8:800:200C:417A')), '1080::8:800:200c:417a')
- self.assertEqual(str(netaddr.address.Addr('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210')), 'fedc:ba98:7654:3210:fedc:ba98:7654:3210')
-
-
- def testValidityIPv6(self):
- """Addr() - basic validity tests (IPv6)"""
- valid_ipv6_addrs = [
- '::', # unspecified address
- '1::',
- '::1', # IPv6 loopback address
- '::1:0',
- '2001:db8:31:1:20a:95ff:fef5:246e',
- '2001:db8:31:1:20a::fef5:246e',
- 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe',
- 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
- ]
-
- for addr in valid_ipv6_addrs:
- self.assertTrue(ST_IPV6.valid_str(addr))
-
- def testRepresentationsIPv6(self):
- """Addr() - address representation tests (IPv6)"""
- width = 128
- addr = netaddr.address.Addr('::ffff:c0a8:1')
- int_val = 281473913978881
- hex_val = '0xffffc0a80001'
- words = (0, 0, 0, 0, 0, 65535, 49320, 1)
- bit_repr = '0000000000000000:0000000000000000:0000000000000000:' \
- '0000000000000000:0000000000000000:1111111111111111:' \
- '1100000010101000:0000000000000001'
-
- self.assertEqual(len(addr), width)
- self.assertEqual(addr[0], words[0])
- self.assertEqual(tuple(addr), words)
- self.assertEqual(int(addr), int_val)
- self.assertEqual(long(addr), int_val)
- self.assertEqual(hex(addr), hex_val)
- self.assertEqual(addr.bits(), bit_repr)
-
- def testBoundariesIPv6(self):
- """Addr() - boundary tests (IPv6)"""
- addr_min = netaddr.address.Addr('::')
- addr_max = netaddr.address.Addr('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
- min_val_int = 0
- max_val_int = 340282366920938463463374607431768211455
- max_val_hex = '0xffffffffffffffffffffffffffffffff'
- min_bit_repr = ':'.join(['0'*16 for i in range(8)])
- max_bit_repr = ':'.join(['1'*16 for i in range(8)])
- min_val_words = (0, 0, 0, 0, 0, 0, 0, 0)
- max_val_words = (65535, 65535, 65535, 65535, 65535, 65535, 65535, 65535)
-
- self.assertEqual(int(addr_min), min_val_int)
- self.assertEqual(int(addr_max), max_val_int)
- self.assertEqual(hex(addr_max), max_val_hex)
- self.assertEqual(addr_min.bits(), min_bit_repr)
- self.assertEqual(addr_max.bits(), max_bit_repr)
- # Addr indexing tests - addr[x].
- self.assertEqual(tuple(addr_min), min_val_words)
- self.assertEqual(tuple(addr_max), max_val_words)
- self.assertEqual(list(addr_min), list(min_val_words))
- self.assertEqual(list(addr_max), list(max_val_words))
-
- def testIterationIPv6(self):
- """Addr() - iteration tests (IPv6)"""
- #TODO! - see method testIterationIPv4() for example.
- pass
-
- def testIndexingAndSlicingIPv6(self):
- """Addr() - indexing and slicing tests (IPv6)"""
- #TODO! - see method testIndexingAndSlicingIPv4() for example.
- pass
-
- def testBooleanAlgebraIPv6(self):
- """Addr() - boolean operator tests (IPv6)"""
- addr_min = netaddr.address.Addr('::')
- addr_max = netaddr.address.Addr('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
-
- self.assertFalse(addr_min == addr_max)
- self.assertTrue(addr_min != addr_max)
- self.assertTrue(addr_min < addr_max)
- self.assertTrue(addr_min <= addr_max)
- self.assertTrue(addr_min != addr_max)
- self.assertTrue(addr_max > addr_min)
- self.assertTrue(addr_max >= addr_min)
-
- def testIncrementAndDecrementIPv6(self):
- """Addr() - increment and decrement tests (IPv6)"""
- addr = netaddr.address.Addr('::')
- self.assertEqual(int(addr), 0)
- addr += 1
- self.assertEqual(int(addr), 1)
- # Increment it all the way up to the value of a 'real' address.
- addr += 281473913978880
- self.assertEqual(str(addr), str(netaddr.address.Addr('::ffff:c0a8:1')))
-
- # Roll around boundaries.
- addr = netaddr.address.Addr('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
- addr += 1
- self.assertEqual(int(addr), 0)
- addr -= 1
- self.assertEqual(int(addr), 0xffffffffffffffffffffffffffffffff)
-
- #---------------------
- # *** EUI tests ***
- #---------------------
-
- def testRepresentationsEUI(self):
- """Addr() - address representation tests (EUI)"""
- width = 48
- addr = netaddr.address.Addr('00-14-C2-C7-DA-D5')
- int_val = 89167223509
- hex_val = '0x14c2c7dad5'
- bit_repr = '00000000-00010100-11000010-11000111-11011010-11010101'
-
- self.assertEqual(len(addr), width)
- self.assertEqual(int(addr), int_val)
- self.assertEqual(long(addr), int_val)
- self.assertEqual(hex(addr), hex_val)
- self.assertEqual(addr.bits(), bit_repr)
-
- def testBoundariesEUI(self):
- """Addr() - boundary tests (EUI)"""
- addr_min = netaddr.address.Addr('0:0:0:0:0:0')
- addr_max = netaddr.address.Addr('ff-ff-ff-ff-ff-ff')
- min_val_int = 0
- max_val_int = 281474976710655
- max_val_hex = '0xffffffffffff'
- min_bit_repr = '-'.join(['0'*8 for i in range(6)])
- max_bit_repr = '-'.join(['1'*8 for i in range(6)])
-
- self.assertEqual(int(addr_min), min_val_int)
- self.assertEqual(int(addr_max), max_val_int)
- self.assertEqual(hex(addr_max), max_val_hex)
- self.assertEqual(addr_min.bits(), min_bit_repr)
- self.assertEqual(addr_max.bits(), max_bit_repr)
-
-#-----------------------------------------------------------------------------
-class EUITests(TestCase):
- """Tests on EUI() objects"""
-
- def testProperties(self):
- """EUI() - class interface check (properties)"""
- expected_properties = (
- 'ADDR_TYPES',
- 'STRATEGIES',
- 'addr_type',
- 'strategy',
- 'value',
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(EUI, attribute))
- self.assertFalse(callable(eval('EUI.%s' % attribute)))
-
-
- def testMethods(self):
- """EUI() - class interface check (methods)"""
- expected_methods = (
- 'bits',
- 'ei',
- 'eui64',
- 'iab',
- 'info',
- 'ipv6_link_local',
- 'isiab',
- 'oui',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(EUI, attribute))
- self.assertTrue(callable(eval('EUI.%s' % attribute)))
-
- def testEUI48(self):
- """EUI() basic tests (MAC, EUI-48)"""
- mac = EUI('00:C0:29:C2:52:FF')
- self.assertEqual(str(mac), '00-C0-29-C2-52-FF')
- self.assertEqual(mac.oui(str), '00-C0-29')
- self.assertEqual(mac.ei(), 'C2-52-FF')
- self.assertEqual(mac.eui64(), EUI('00-C0-29-FF-FE-C2-52-FF'))
-
- def testEUI64(self):
- """EUI() basic tests (EUI-64)"""
- eui64 = EUI('00-C0-29-FF-FE-C2-52-FF')
- self.assertEqual(str(eui64), '00-C0-29-FF-FE-C2-52-FF')
- self.assertEqual(eui64.oui(str), '00-C0-29')
- self.assertEqual(eui64.ei(), 'FF-FE-C2-52-FF')
- self.assertEqual(eui64.eui64(), EUI('00-C0-29-FF-FE-C2-52-FF'))
-
- def testIPv6LinkLocal(self):
- """EUI() IPv6 translation"""
- expected = 'fe80::20f:1fff:fe12:e733'
-
- mac = EUI('00-0F-1F-12-E7-33')
- ip1 = mac.ipv6_link_local()
- self.assertEqual(str(ip1), expected)
- self.assertEqual(ip1, IP(expected))
-
- eui64 = EUI('00-0F-1F-FF-FE-12-E7-33')
- ip2 = eui64.ipv6_link_local()
- self.assertEqual(str(ip2), expected)
- self.assertEqual(ip2, IP(expected))
-
- def testOUIFormatting(self):
- """EUI() OUI format tests"""
- mac = EUI('aa:bb:cc:dd:ee:ff')
- self.assertFalse(mac.isiab())
- self.assertEqual(mac.oui(str), 'AA-BB-CC')
- self.assertEqual(mac.iab(str), None)
- self.assertEqual(mac.ei(), 'DD-EE-FF')
- self.assertEqual(mac.oui(int), 0xaabbcc)
- self.assertEqual(mac.iab(int), None)
-
- def testIAB(self):
- """EUI() IAB tests"""
- lower_eui = EUI('00-50-C2-05-C0-00')
- upper_eui = EUI('00-50-C2-05-CF-FF')
-
- self.assertTrue(lower_eui.isiab())
- self.assertEqual(lower_eui.oui(str), '00-50-C2')
- self.assertEqual(lower_eui.iab(str), '00-50-C2-05-C0-00')
- self.assertEqual(lower_eui.ei(), '05-C0-00')
- self.assertEqual(lower_eui.oui(int), 0x0050c2)
- self.assertEqual(lower_eui.iab(int), 0x0050c205c)
-
- self.assertTrue(upper_eui.isiab())
- self.assertEqual(upper_eui.oui(str), '00-50-C2')
- self.assertEqual(upper_eui.iab(str), '00-50-C2-05-C0-00')
- self.assertEqual(upper_eui.ei(), '05-CF-FF')
- self.assertEqual(upper_eui.oui(int), 0x0050c2)
- self.assertEqual(upper_eui.iab(int), 0x0050c205c)
-
- def testMultipleMACFormats(self):
- """EUI() multi-format MAC constructor tests"""
- eui = EUI('00-90-96-AF-CC-39')
- self.assertEqual(eui, EUI('0-90-96-AF-CC-39'))
- self.assertEqual(eui, EUI('00-90-96-af-cc-39'))
- self.assertEqual(eui, EUI('00:90:96:AF:CC:39'))
- self.assertEqual(eui, EUI('00:90:96:af:cc:39'))
- self.assertEqual(eui, EUI('0090-96AF-CC39'))
- self.assertEqual(eui, EUI('0090:96af:cc39'))
- self.assertEqual(eui, EUI('009096-AFCC39'))
- self.assertEqual(eui, EUI('009096:AFCC39'))
- self.assertEqual(eui, EUI('009096AFCC39'))
- self.assertEqual(eui, EUI('009096afcc39'))
-
- self.assertEqual(EUI('01-00-00-00-00-00'), EUI('010000000000'))
- self.assertEqual(EUI('01-00-00-00-00-00'), EUI('10000000000'))
-
- self.assertEqual(EUI('01-00-00-01-00-00'), EUI('010000:010000'))
- self.assertEqual(EUI('01-00-00-01-00-00'), EUI('10000:10000'))
-
-#-----------------------------------------------------------------------------
-class OUITests(TestCase):
- """Tests on OUI() objects"""
-
- def testProperties(self):
- """OUI() - class interface check (properties)"""
- expected_properties = (
- # None of interest (yet).
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(OUI, attribute))
- self.assertFalse(callable(eval('OUI.%s' % attribute)))
-
-
- def testMethods(self):
- """OUI() - class interface check (methods)"""
- expected_methods = (
- 'address',
- 'org',
- 'org_count',
- 'organisation',
- 'registration',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(OUI, attribute))
- self.assertTrue(callable(eval('OUI.%s' % attribute)))
-
-#-----------------------------------------------------------------------------
-class IABTests(TestCase):
- """Tests on IAB() objects"""
-
- def testProperties(self):
- """IAB() - class interface check (properties)"""
- expected_properties = (
- # None of interest (yet).
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(IAB, attribute))
- self.assertFalse(callable(eval('IAB.%s' % attribute)))
-
-
- def testMethods(self):
- """IAB() - class interface check (methods)"""
- expected_methods = (
- 'address',
- 'org',
- 'organisation',
- 'registration',
- 'split_iab_mac',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(IAB, attribute))
- self.assertTrue(callable(eval('IAB.%s' % attribute)))
-
-#-----------------------------------------------------------------------------
-class IPTests(TestCase):
- """Tests on IP() objects"""
-
- def testProperties(self):
- """IP() - class interface check (properties)"""
- expected_properties = (
- 'ADDR_TYPES',
- 'STRATEGIES',
- 'TRANSLATE_STR', # This must go in 0.7!
- 'addr_type',
- 'prefixlen',
- 'strategy',
- 'value',
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(IP, attribute))
- self.assertFalse(callable(eval('IP.%s' % attribute)))
-
- def testMethods(self):
- """IP() - class interface check (methods)"""
- expected_methods = (
- 'bits',
- 'cidr',
- 'hostname',
- 'info',
- 'iprange',
- 'ipv4',
- 'ipv6',
- 'is_hostmask',
- 'is_ipv4_compat',
- 'is_ipv4_mapped',
- 'is_link_local',
- 'is_loopback',
- 'is_multicast',
- 'is_netmask',
- 'is_private',
- 'is_reserved',
- 'is_unicast',
- 'netmask_bits',
- 'reverse_dns',
- 'ipglob',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(IP, attribute))
- self.assertTrue(callable(eval('IP.%s' % attribute)))
-
- def testEdgeCases(self):
- """IP() - edge case string tests"""
- # Turns out IPv4 has representation (string) formats that are both
- # interesting and esoteric. We shall support them for completeness
- # using socket.inet_aton where it is available.
-
- # Mixture of hex and integer octet values...
- self.assertTrue(str(IP('127.1')), '127.0.0.1')
- self.assertTrue(str(IP('0x7f.1')), '127.0.0.1')
- self.assertTrue(str(IP('0x7f.0.0.1')), '127.0.0.1')
- self.assertTrue(str(IP('0x7f.0x0.0x0.0x1')), '127.0.0.1')
-
- # Host count based addressing.
- self.assertTrue(str(IP('127')), '0.0.0.127')
- self.assertTrue(str(IP('127')), '0.0.0.127')
-
- if _platform.system() != 'Windows':
- # We are on Windows that has a notorious bug. We aren't even
- # going to attempt to test it.
- self.assertTrue(str(IP(str(0xffffffff))), '255.255.255.255')
-
- def testRFC4291WithIP(self):
- """IP() - RFC 4291 tests"""
- expected = '2001:db8:0:cd30::'
-
- actual = str(IP('2001:0DB8:0000:CD30:0000:0000:0000:0000/60'))
- self.assertEqual(actual, expected)
-
- actual = str(IP('2001:0DB8::CD30:0:0:0:0/60'))
- self.assertEqual(actual, expected)
-
- actual = str(IP('2001:0DB8:0:CD30::/60'))
- self.assertEqual(actual, expected)
-
- def testAssignmentsIPv4(self):
- """IP() - managed attribute assignment tests (IPv4)"""
- ip = IP('192.0.2.1')
- self.assertEqual(ip.value, 3221225985)
- self.assertEqual(ip.addr_type, AT_INET)
- self.assertEqual(ip.strategy, ST_IPV4)
- self.assertEqual(ip.prefixlen, 32)
-
- # Disabled test below as there are seemingly too many variations of
- # localhost across operating systems (wtf)?
- #DISABLED: self.assertEqual(IP('127.0.0.1').hostname(), 'localhost')
-
- # Prefix /32 for IPv4 addresses should be implicit.
- self.assertEqual(repr(ip), "IP('192.0.2.1')")
- ip.prefixlen = 24
- self.assertEqual(repr(ip), "IP('192.0.2.1/24')")
-
- self.assertRaises(ValueError, IP, '0.0.0.0/-1')
- self.assertRaises(ValueError, IP, '0.0.0.0/33')
-
- def testAssignmentsIPv6(self):
- """IP() - managed attribute assignment tests (IPv6)"""
- ip = IP('fe80::4472:4b4a:616d')
- self.assertEqual(ip.value, 338288524927261089654018972099027820909)
- self.assertEqual(ip.addr_type, AT_INET6)
- self.assertEqual(ip.strategy, ST_IPV6)
- self.assertEqual(ip.prefixlen, 128)
-
- # Prefix /128 for IPv6 addresses should be implicit.
- self.assertEqual(repr(ip), "IP('fe80::4472:4b4a:616d')")
- ip.prefixlen = 64
- self.assertEqual(repr(ip), "IP('fe80::4472:4b4a:616d/64')")
-
- # Check IPv4 mapped IPv6.
- self.assertEqual(hex(IP('::ffff:10.11.12.13')), '0xffff0a0b0c0d')
- self.assertEqual(hex(IP('::10.11.12.13')), hex(IP('10.11.12.13')))
-
- self.assertRaises(ValueError, IP, '::/-1')
- self.assertRaises(ValueError, IP, '::/129')
-
- def testIPv4CompatibleIP6(self):
- """IP() - IPv4 compatible IPv6 address conversions"""
- expected = {
- '::0.0.0.0' : '::',
- '::0.0.1.0' : '::100',
- '::0.0.1.1' : '::101',
- '::0.0.255.255' : '::ffff',
- '::0.1.0.0' : '::0.1.0.0',
- '::0.1.255.255' : '::0.1.255.255',
- '::255.255.255.255' : '::255.255.255.255',
- }
-
- for value, expected in expected.items():
- self.assertEqual(str(IP(value)), expected)
-
- def testIPv4MappedIP6(self):
- """IP() - IPv4 mapped IPv6 address conversions"""
- expected = {
- '::ffff:0.1.0.0' : '::ffff:0.1.0.0',
- '::ffff:0.0.0.0' : '::ffff:0.0.0.0',
- '::ffff:255.255.255.255' : '::ffff:255.255.255.255',
- '::ffff:0' : '::255.255.0.0',
- '::ffff:ffff' : '::255.255.255.255',
- '::ffff:ffff:ffff' : '::ffff:255.255.255.255',
- '::ffff:ffff' : '::255.255.255.255',
- '::ffff:ffff:ffff' : '::ffff:255.255.255.255',
- '::ffff:0:0' : '::ffff:0.0.0.0',
- }
-
- for value, expected in expected.items():
- self.assertEqual(str(IP(value)), expected)
-
- def testNetmaskIPv4(self):
- """IP() - netmask tests (IPv4)"""
- addr = IP('192.0.2.1')
- self.assertFalse(addr.is_netmask())
-
- netmask = IP('255.255.254.0')
- self.assertTrue(netmask.is_netmask())
-
- # Apply subnet mask
- network_id = IP(int(addr) & int(netmask), AT_INET)
- self.assertEqual(str(network_id), '192.0.2.0')
-
- def testNetmaskAndPrefixlenIPv4(self):
- """IP() - netmask and CIDR prefix tests (IPv4)"""
- calculated = []
-
- # Generate a bunch of addresses and see which ones are netmasks.
- for ip in nrange('255.255.255.255', '255.255.255.0',-1, fmt=IP):
- if ip.is_netmask():
- calculated.append((str(ip), ip.netmask_bits()))
-
- expected = [
- ('255.255.255.255', 32),
- ('255.255.255.254', 31),
- ('255.255.255.252', 30),
- ('255.255.255.248', 29),
- ('255.255.255.240', 28),
- ('255.255.255.224', 27),
- ('255.255.255.192', 26),
- ('255.255.255.128', 25),
- ('255.255.255.0', 24),
- ]
-
- self.assertEqual(calculated, expected)
-
- def testHostmaskIPv4(self):
- """IP() - hostmask tests (IPv4)"""
- calculated = []
-
- # Generate a bunch of addresses and see which ones are hostmasks.
- for ip in nrange('0.0.0.0', '0.0.0.255', fmt=IP):
- if ip.is_hostmask():
- calculated.append(str(ip))
-
- expected = [
- '0.0.0.0',
- '0.0.0.1',
- '0.0.0.3',
- '0.0.0.7',
- '0.0.0.15',
- '0.0.0.31',
- '0.0.0.63',
- '0.0.0.127',
- '0.0.0.255',
- ]
-
- self.assertEqual(calculated, expected)
-
- def testNetmaskAndPrefixlenIPv6(self):
- """IP() - netmask and CIDR prefix tests (IPv6)"""
- calculated = []
-
- # Generate a bunch of addresses and see which ones are netmasks.
- for ip in nrange('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',
- 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00',-1, fmt=IP):
- if ip.is_netmask():
- calculated.append((str(ip), ip.netmask_bits()))
-
- expected = [
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 128),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe', 127),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffc', 126),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff8', 125),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:fff0', 124),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffe0', 123),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffc0', 122),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff80', 121),
- ('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00', 120),
- ]
-
- self.assertEqual(calculated, expected)
-
- def testHostmaskIPv6(self):
- """IP() - hostmask tests (IPv6)"""
- calculated = []
-
- # Generate a bunch of addresses and see which ones are hostmasks.
- for ip in nrange('::', '::ff', fmt=IP):
- if ip.is_hostmask():
- calculated.append(str(ip))
-
- expected = [
- '::',
- '::1',
- '::3',
- '::7',
- '::f',
- '::1f',
- '::3f',
- '::7f',
- '::ff',
- ]
-
- self.assertEqual(calculated, expected)
-
- def testConstructorExceptions(self):
- """IP() - constructor Exception tests"""
-
- # No arguments passed to constructor.
- self.assertRaises(TypeError, IP)
-
- # Various bad types for address values.
- for bad_addr in (None, [], {}, 4.2):
- self.assertRaises(AddrFormatError, IP, bad_addr)
-
- # Various bad types for addr_type values.
- for bad_addr_type in ('', None, [], {}, 4.2):
- self.assertRaises(ValueError, IP, '0.0.0.0', bad_addr_type)
-
- # Wrong explicit address type for a valid address.
- self.assertRaises(Exception, IP, '0.0.0.0', 6)
- self.assertRaises(Exception, IP, '::', 4)
-
- def testFormattingIPv6(self):
- """IP() - formatting options for IPv6"""
- self.assertEqual(
- ST_IPV6.int_to_str(0, compact=False, word_fmt='%04x'),
- '0000:0000:0000:0000:0000:0000:0000:0000')
- self.assertEqual(ST_IPV6.int_to_str(0, compact=True), '::')
- self.assertEqual(ST_IPV6.int_to_arpa(0), '0.'*32 + 'ip6.arpa.')
-
- def testReverseLookupIPv4(self):
- """IP() - reverse DNS lookup test (IPv4)"""
- expected = '1.2.0.192.in-addr.arpa.'
- ip = IP('192.0.2.1')
- self.assertEqual(expected, ip.reverse_dns())
-
- def testReverseLookupIPv6(self):
- """IP() - reverse DNS lookup test (IPv6)"""
- expected = '1.0.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.3.d.c.0.0.0.0.8.b.d.0.1.0.0.2' \
- '.ip6.arpa.'
- ip = IP('2001:0DB8::CD30:0:0:0:101')
- self.assertEqual(expected, ip.reverse_dns())
-
- def testMembership(self):
- """IP() - address class tests (IPv6)"""
- self.assertTrue(IP('::ffff:192.0.2.1').is_ipv4_mapped())
- self.assertFalse(IP('::192.0.2.1').is_ipv4_mapped())
- self.assertFalse(IP('192.0.2.1').is_ipv4_mapped())
-
- self.assertTrue(IP('::192.0.2.1').is_ipv4_compat())
- self.assertFalse(IP('::ffff:192.0.2.1').is_ipv4_compat())
- self.assertFalse(IP('192.0.2.1').is_ipv4_compat())
-
- self.assertFalse(IP('::').is_ipv4_mapped())
-
-#-----------------------------------------------------------------------------
-class IPRangeTests(TestCase):
- """Tests on IPRange() objects"""
-
- def testProperties(self):
- """IPRange() - class interface check (properties)"""
- expected_properties = (
- 'ADDR_TYPES',
- 'STRATEGIES',
- 'addr_type',
- 'first',
- 'fmt',
- 'last',
- 'strategy',
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(IPRange, attribute))
- self.assertFalse(callable(eval('IPRange.%s' % attribute)))
-
-
- def testMethods(self):
- """IPRange() - class interface check (methods)"""
- expected_methods = (
- 'adjacent',
- 'cidrs',
- 'format',
- 'iprange',
- 'issubnet',
- 'issupernet',
- 'overlaps',
- 'size',
- 'ipglob',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(IPRange, attribute))
- self.assertTrue(callable(eval('IPRange.%s' % attribute)))
-
- def testSortability(self):
- """IPRange() - sortability tests"""
- # Address ranges now sort as expected based on magnitude.
- ranges = (
- IPRange(IP('::'), IP('::')),
- IPRange(IP('0.0.0.0'), IP('255.255.255.255')),
- IPRange(IP('::'), IP('::FFFF')),
- IPRange(IP('0.0.0.0'), IP('0.0.0.0')),
- )
-
- expected = [
- '0.0.0.0-255.255.255.255',
- '0.0.0.0-0.0.0.0',
- '::-::ffff',
- '::-::',
- ]
-
- self.assertEqual([str(r) for r in sorted(ranges)], expected)
-
- def testIPRangeToMultipleCIDRConversion(self):
- """IPRange() - IPRange -> multiple CIDRs coversion tests"""
- # IPv4 worst case scenario!
- self.assertEqual(IPRange('0.0.0.1', '255.255.255.254').cidrs(),
- [CIDR('0.0.0.1/32'), CIDR('0.0.0.2/31'), CIDR('0.0.0.4/30'),
- CIDR('0.0.0.8/29'), CIDR('0.0.0.16/28'), CIDR('0.0.0.32/27'),
- CIDR('0.0.0.64/26'), CIDR('0.0.0.128/25'), CIDR('0.0.1.0/24'),
- CIDR('0.0.2.0/23'), CIDR('0.0.4.0/22'), CIDR('0.0.8.0/21'),
- CIDR('0.0.16.0/20'), CIDR('0.0.32.0/19'), CIDR('0.0.64.0/18'),
- CIDR('0.0.128.0/17'), CIDR('0.1.0.0/16'), CIDR('0.2.0.0/15'),
- CIDR('0.4.0.0/14'), CIDR('0.8.0.0/13'), CIDR('0.16.0.0/12'),
- CIDR('0.32.0.0/11'), CIDR('0.64.0.0/10'), CIDR('0.128.0.0/9'),
- CIDR('1.0.0.0/8'), CIDR('2.0.0.0/7'), CIDR('4.0.0.0/6'),
- CIDR('8.0.0.0/5'), CIDR('16.0.0.0/4'), CIDR('32.0.0.0/3'),
- CIDR('64.0.0.0/2'), CIDR('128.0.0.0/2'), CIDR('192.0.0.0/3'),
- CIDR('224.0.0.0/4'), CIDR('240.0.0.0/5'), CIDR('248.0.0.0/6'),
- CIDR('252.0.0.0/7'), CIDR('254.0.0.0/8'), CIDR('255.0.0.0/9'),
- CIDR('255.128.0.0/10'), CIDR('255.192.0.0/11'),
- CIDR('255.224.0.0/12'), CIDR('255.240.0.0/13'),
- CIDR('255.248.0.0/14'), CIDR('255.252.0.0/15'),
- CIDR('255.254.0.0/16'), CIDR('255.255.0.0/17'),
- CIDR('255.255.128.0/18'), CIDR('255.255.192.0/19'),
- CIDR('255.255.224.0/20'), CIDR('255.255.240.0/21'),
- CIDR('255.255.248.0/22'), CIDR('255.255.252.0/23'),
- CIDR('255.255.254.0/24'), CIDR('255.255.255.0/25'),
- CIDR('255.255.255.128/26'), CIDR('255.255.255.192/27'),
- CIDR('255.255.255.224/28'), CIDR('255.255.255.240/29'),
- CIDR('255.255.255.248/30'), CIDR('255.255.255.252/31'),
- CIDR('255.255.255.254/32')])
-
- # IPv4 compatible IPv6 test of worst case scenario.
- self.assertEqual(IPRange('::1', '::255.255.255.254', fmt=str).cidrs(),
- ['::1/128', '::2/127', '::4/126', '::8/125', '::10/124',
- '::20/123', '::40/122', '::80/121', '::100/120', '::200/119',
- '::400/118', '::800/117', '::1000/116', '::2000/115', '::4000/114',
- '::8000/113', '::0.1.0.0/112', '::0.2.0.0/111', '::0.4.0.0/110',
- '::0.8.0.0/109', '::0.16.0.0/108', '::0.32.0.0/107',
- '::0.64.0.0/106', '::0.128.0.0/105', '::1.0.0.0/104',
- '::2.0.0.0/103', '::4.0.0.0/102', '::8.0.0.0/101',
- '::16.0.0.0/100', '::32.0.0.0/99', '::64.0.0.0/98',
- '::128.0.0.0/98', '::192.0.0.0/99', '::224.0.0.0/100',
- '::240.0.0.0/101', '::248.0.0.0/102', '::252.0.0.0/103',
- '::254.0.0.0/104', '::255.0.0.0/105', '::255.128.0.0/106',
- '::255.192.0.0/107', '::255.224.0.0/108', '::255.240.0.0/109',
- '::255.248.0.0/110', '::255.252.0.0/111', '::255.254.0.0/112',
- '::255.255.0.0/113', '::255.255.128.0/114', '::255.255.192.0/115',
- '::255.255.224.0/116', '::255.255.240.0/117',
- '::255.255.248.0/118', '::255.255.252.0/119',
- '::255.255.254.0/120', '::255.255.255.0/121',
- '::255.255.255.128/122', '::255.255.255.192/123',
- '::255.255.255.224/124', '::255.255.255.240/125',
- '::255.255.255.248/126', '::255.255.255.252/127',
- '::255.255.255.254/128'])
-
- # IPv4 mapped IPv6 test of worst case scenario.
- self.assertEqual(
- IPRange('::ffff:1', '::ffff:255.255.255.254', fmt=str).cidrs(),
- ['::255.255.0.1/128', '::255.255.0.2/127', '::255.255.0.4/126',
- '::255.255.0.8/125', '::255.255.0.16/124', '::255.255.0.32/123',
- '::255.255.0.64/122', '::255.255.0.128/121', '::255.255.1.0/120',
- '::255.255.2.0/119', '::255.255.4.0/118', '::255.255.8.0/117',
- '::255.255.16.0/116', '::255.255.32.0/115', '::255.255.64.0/114',
- '::255.255.128.0/113', '::1:0:0/96', '::2:0:0/95', '::4:0:0/94',
- '::8:0:0/93', '::10:0:0/92', '::20:0:0/91', '::40:0:0/90',
- '::80:0:0/89', '::100:0:0/88', '::200:0:0/87', '::400:0:0/86',
- '::800:0:0/85', '::1000:0:0/84', '::2000:0:0/83',
- '::4000:0:0/82', '::8000:0:0/82', '::c000:0:0/83',
- '::e000:0:0/84', '::f000:0:0/85', '::f800:0:0/86',
- '::fc00:0:0/87', '::fe00:0:0/88', '::ff00:0:0/89',
- '::ff80:0:0/90', '::ffc0:0:0/91', '::ffe0:0:0/92',
- '::fff0:0:0/93', '::fff8:0:0/94', '::fffc:0:0/95',
- '::fffe:0:0/96', '::ffff:0.0.0.0/97', '::ffff:128.0.0.0/98',
- '::ffff:192.0.0.0/99', '::ffff:224.0.0.0/100',
- '::ffff:240.0.0.0/101', '::ffff:248.0.0.0/102',
- '::ffff:252.0.0.0/103', '::ffff:254.0.0.0/104',
- '::ffff:255.0.0.0/105', '::ffff:255.128.0.0/106',
- '::ffff:255.192.0.0/107', '::ffff:255.224.0.0/108',
- '::ffff:255.240.0.0/109', '::ffff:255.248.0.0/110',
- '::ffff:255.252.0.0/111', '::ffff:255.254.0.0/112',
- '::ffff:255.255.0.0/113', '::ffff:255.255.128.0/114',
- '::ffff:255.255.192.0/115', '::ffff:255.255.224.0/116',
- '::ffff:255.255.240.0/117', '::ffff:255.255.248.0/118',
- '::ffff:255.255.252.0/119', '::ffff:255.255.254.0/120',
- '::ffff:255.255.255.0/121', '::ffff:255.255.255.128/122',
- '::ffff:255.255.255.192/123', '::ffff:255.255.255.224/124',
- '::ffff:255.255.255.240/125', '::ffff:255.255.255.248/126',
- '::ffff:255.255.255.252/127', '::ffff:255.255.255.254/128'])
-
-#-----------------------------------------------------------------------------
-class CIDRTests(TestCase):
- """Tests on CIDR() objects"""
-
- def testProperties(self):
- """CIDR() - class interface check (properties)"""
- expected_properties = (
- 'ADDR_TYPES',
- 'STRATEGIES',
- 'addr_type',
- 'broadcast',
- 'first',
- 'fmt',
- 'hostmask',
- 'last',
- 'netmask',
- 'network',
- 'prefixlen',
- 'strategy',
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(CIDR, attribute))
- self.assertFalse(callable(eval('CIDR.%s' % attribute)))
-
-
- def testMethods(self):
- """CIDR() - class interface check (methods)"""
- expected_methods = (
- 'abbrev_to_verbose',
- 'adjacent',
- 'cidrs',
- 'format',
- 'iprange',
- 'issubnet',
- 'issupernet',
- 'iter_host_addrs',
- 'overlaps',
- 'summarize',
- 'size',
- 'span_addrs',
- 'span_size',
- 'subnet',
- 'ipglob',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(CIDR, attribute))
- self.assertTrue(callable(eval('CIDR.%s' % attribute)))
-
- def testRFC4291WithCIDR(self):
- """CIDR() - RFC 4291 tests"""
- expected = '2001:db8:0:cd30::/60'
-
- actual = str(CIDR('2001:0DB8:0000:CD30:0000:0000:0000:0000/60'))
- self.assertEqual(actual, expected)
-
- actual = str(CIDR('2001:0DB8::CD30:0:0:0:0/60'))
- self.assertEqual(actual, expected)
-
- actual = str(CIDR('2001:0DB8:0:CD30::/60'))
- self.assertEqual(actual, expected)
-
- def testEquality(self):
- """CIDR() - equality tests (__eq__)"""
- cidr1 = CIDR('192.0.2.0/255.255.254.0')
- cidr2 = CIDR('192.0.2.0/23')
- self.assertEqual(cidr1, cidr2)
-
- def testNonStrictConstructorValidation(self):
- """CIDR() - less restrictive __init__() bitmask/netmask tests"""
- c = CIDR('192.0.2.65/255.255.254.0', strict=False)
- c.fmt=str
- self.assertEqual(str(c), '192.0.2.0/23')
- self.assertEqual(c[0], '192.0.2.0')
- self.assertEqual(c[-1], '192.0.3.255')
-
- def testStandardConstructorValidation(self):
- """CIDR() - standard __init__() bitmask/netmask tests"""
- self.assertRaises(ValueError, CIDR, '192.0.2.65/255.255.254.0')
- self.assertRaises(ValueError, CIDR, '192.0.2.65/23')
-
- def testSlicingIPv4(self):
- """CIDR() - slicing tests (IPv4)"""
- expected = [
- ['192.0.2.0/28', '192.0.2.1', '192.0.2.14', 16],
- ['192.0.2.16/28', '192.0.2.17', '192.0.2.30', 16],
- ['192.0.2.32/28', '192.0.2.33', '192.0.2.46', 16],
- ['192.0.2.48/28', '192.0.2.49', '192.0.2.62', 16],
- ['192.0.2.64/28', '192.0.2.65', '192.0.2.78', 16],
- ['192.0.2.80/28', '192.0.2.81', '192.0.2.94', 16],
- ['192.0.2.96/28', '192.0.2.97', '192.0.2.110', 16],
- ['192.0.2.112/28', '192.0.2.113', '192.0.2.126', 16],
- ['192.0.2.128/28', '192.0.2.129', '192.0.2.142', 16],
- ['192.0.2.144/28', '192.0.2.145', '192.0.2.158', 16],
- ['192.0.2.160/28', '192.0.2.161', '192.0.2.174', 16],
- ['192.0.2.176/28', '192.0.2.177', '192.0.2.190', 16],
- ['192.0.2.192/28', '192.0.2.193', '192.0.2.206', 16],
- ['192.0.2.208/28', '192.0.2.209', '192.0.2.222', 16],
- ['192.0.2.224/28', '192.0.2.225', '192.0.2.238', 16],
- ['192.0.2.240/28', '192.0.2.241', '192.0.2.254', 16],
- ]
-
- supernet = CIDR('192.0.2.0/24')
- subnets = list([addr for addr in supernet])[::16]
-
- for i, subnet_addr in enumerate(subnets):
- subnet = CIDR("%s/28" % subnet_addr)
- subnet_addrs = list(subnet)
- calculated = [str(subnet), str(subnet_addrs[1]),
- str(subnet_addrs[-2]), len(subnet)]
- self.assertEqual(calculated, expected[i])
-
- def testIndexingAndSlicingIPv4(self):
- """CIDR() - indexing and slicing tests (IPv4)"""
- # IPv4
- cidr = CIDR('192.0.2.0/23', fmt=str)
-
- # Handy methods.
- self.assertEqual(cidr.first, 3221225984)
- self.assertEqual(cidr.last, 3221226495)
-
- # As above with indices.
- self.assertEqual(cidr[0], '192.0.2.0')
- self.assertEqual(cidr[-1], '192.0.3.255')
-
- expected_list = [ '192.0.2.0', '192.0.2.128', '192.0.3.0',
- '192.0.3.128' ]
-
- self.assertEqual(list(cidr[::128]), expected_list)
-
-#FIXME: def testIndexingAndSlicingIPv6(self):
-#FIXME: """CIDR() - indexing and slicing tests (IPv6)"""
-#FIXME: cidr = CIDR('fe80::/10', fmt=str)
-#FIXME: self.assertEqual(cidr[0], 'fe80::')
-#FIXME: self.assertEqual(cidr[-1], 'febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
-#FIXME: self.assertEqual(cidr.size(), 332306998946228968225951765070086144)
-#FIXME:
-#FIXME: try:
-#FIXME: self.assertEqual(list(cidr[0:5:1]),
-#FIXME: ['fe80::',
-#FIXME: 'fe80::1',
-#FIXME: 'fe80::2',
-#FIXME: 'fe80::3',
-#FIXME: 'fe80::4'])
-#FIXME: except OverflowError:
-#FIXME: self.fail('IPv6 slicing is currently problematic!')
-
- def testMembership(self):
- """CIDR() - membership (__contains__) tests (IPv4/IPv6)"""
- self.assertTrue('192.0.2.1' in CIDR('192.0.2.0/24'))
- self.assertTrue('192.0.2.255' in CIDR('192.0.2.0/24'))
- self.assertTrue(CIDR('192.0.2.0/24') in CIDR('192.0.2.0/23'))
- self.assertTrue(CIDR('192.0.2.0/24') in CIDR('192.0.2.0/24'))
- self.assertTrue('ffff::1' in CIDR('ffff::/127'))
- self.assertFalse(CIDR('192.0.2.0/23') in CIDR('192.0.2.0/24'))
-
- def testEquality(self):
- """CIDR() - equality (__eq__) tests (IPv4/IPv6)"""
- c1 = CIDR('192.0.2.0/24')
- c2 = CIDR('192.0.2.0/24')
- self.assertTrue(c1 == c2)
- self.assertTrue(c1 is not c2)
- self.assertFalse(c1 != c2)
- self.assertFalse(c1 is c2)
-
- c3 = CIDR('fe80::/10')
- c4 = CIDR('fe80::/10')
- self.assertTrue(c1 == c2)
- self.assertTrue(c1 is not c2)
- self.assertFalse(c1 != c2)
- self.assertFalse(c1 is c2)
-
- def testAbbreviatedCIDRs(self):
- """CIDR() - abbreviated CIDR tests (IPv4 only)"""
- abbreviations = (
- # Integer values.
- (-1, None),
- (0, '0.0.0.0/8'), # Class A
- (10, '10.0.0.0/8'),
- (127, '127.0.0.0/8'),
- (128, '128.0.0.0/16'), # Class B
- (191, '191.0.0.0/16'),
- (192, '192.0.0.0/24'), # Class C
- (223, '223.0.0.0/24'),
- (224, '224.0.0.0/4'), # Class D (multicast)
- (225, '225.0.0.0/8'),
- (239, '239.0.0.0/8'),
- (240, '240.0.0.0/32'), # Class E (reserved)
- (254, '254.0.0.0/32'),
- (255, '255.0.0.0/32'),
- (256, None),
- # String values.
- ('-1', None),
- ('0', '0.0.0.0/8'), # Class A
- ('10', '10.0.0.0/8'),
- ('127', '127.0.0.0/8'),
- ('128', '128.0.0.0/16'), # Class B
- ('191', '191.0.0.0/16'),
- ('192', '192.0.0.0/24'), # Class C
- ('223', '223.0.0.0/24'),
- ('224', '224.0.0.0/4'), # Class D (multicast)
- ('225', '225.0.0.0/8'),
- ('239', '239.0.0.0/8'),
- ('240', '240.0.0.0/32'), # Class E (reserved)
- ('254', '254.0.0.0/32'),
- ('255', '255.0.0.0/32'),
- ('256', None),
- ('128/8', '128.0.0.0/8'),
- ('128.0/8', '128.0.0.0/8'),
- ('128.0.0.0/8', '128.0.0.0/8'),
- ('128.0.0/8', '128.0.0.0/8'),
- ('192.168', '192.168.0.0/24'),
- ('192.0.2', '192.0.2.0/24'),
- ('192.0.2.0', '192.0.2.0/32'),
- ('0.0.0.0', '0.0.0.0/32'),
- ('::/128', None), # Does not support IPv6.
- ('::10/128', None), # Hmmm... IPv6 proper, not IPv4 mapped.
- ('::/128', None), # Does not support IPv6.
-#TODO: ('::192.0.2', '::192.0.2.0/128'),
-#TODO: ('::192.0.2.0', '::192.0.2.0/128'),
-#TODO: ('::ffff:192.0.2', '::ffff:192.0.2.0/128'),
-#TODO: ('::ffff:192.0.2.0', '::ffff:192.0.2.0/128'),
-#TODO: ('::192.168', '::192.168.0.0/128'),
-#TODO: ('::192.168', '::192.168.0.0/128'),
-#TODO: ('::ffff:192.168/120', '::ffff:192.168.0.0/120'),
- ('0.0.0.0.0', None),
- ('', None),
- (None, None),
- ([], None),
- ({}, None),
- )
-
- for (abbrev, expected) in abbreviations:
- result = CIDR.abbrev_to_verbose(abbrev)
- self.assertEqual(result, expected)
- if result is not None:
- cidr = CIDR(abbrev)
- self.assertEqual(str(cidr), result)
-
- def testCIDRToIPGlobConversion(self):
- """CIDR() - CIDR -> IPGlob conversion tests (IPv4 only)"""
- expected = (
- ('10.0.0.1/32', '10.0.0.1', 1),
- ('192.0.2.0/24', '192.0.2.*', 256),
- ('172.16.0.0/12', '172.16-31.*.*', 1048576),
- ('0.0.0.0/0', '*.*.*.*', 4294967296),
- )
-
- for cidr, ipglob, size in expected:
- c1 = CIDR(cidr)
- w1 = c1.ipglob()
- c2 = w1.cidrs()[0]
- self.assertEqual(c1.size(), size)
- self.assertEqual(str(c1), cidr)
- self.assertEqual(str(w1), ipglob)
- self.assertEqual(w1.size(), size)
- self.assertEqual(c1, c2) # Test __eq__()
- self.assertEqual(str(c1), str(c2)) # Test __str__() values too.
-
- def testCIDRIncrements(self):
- """CIDR() - address range increment tests (IPv4)"""
- expected = [
- '192.0.2.0/28',
- '192.0.2.16/28',
- '192.0.2.32/28',
- '192.0.2.48/28',
- '192.0.2.64/28',
- '192.0.2.80/28',
- '192.0.2.96/28',
- '192.0.2.112/28',
- '192.0.2.128/28',
- '192.0.2.144/28',
- '192.0.2.160/28',
- '192.0.2.176/28',
- '192.0.2.192/28',
- '192.0.2.208/28',
- '192.0.2.224/28',
- '192.0.2.240/28',
- ]
-
- actual = []
- c = CIDR('192.0.2.0/28')
- for i in range(16):
- actual.append(str(c))
- c += 1
-
- self.assertEqual(expected, actual)
-
- def testCIDRAddition(self):
- """CIDR() - addition tests (IPv4 + IPv6)"""
- result0 = CIDR('192.0.2.1/32') + CIDR('192.0.2.1/32')
- self.assertEqual(result0, CIDR('192.0.2.1/32'))
-
- result1 = CIDR('192.0.2.0/24', fmt=str) + CIDR('192.0.3.0/24')
- self.assertEqual(result1, '192.0.2.0/23')
-
- result2 = CIDR('::/128', fmt=str) + CIDR('::255.255.255.255/128')
- self.assertEqual(result2, '::/96')
-
- result3 = CIDR('192.168.0.0/24', fmt=str) + CIDR('192.168.255.0/24')
- self.assertEqual(result3, '192.168.0.0/16')
-
- def testCIDRSubtraction(self):
- """CIDR() - subtraction tests (IPv4 + IPv6)"""
- result0 = CIDR('192.0.2.1/32') - CIDR('192.0.2.1/32')
- self.assertEqual(result0, [])
-
- result1 = CIDR('192.0.2.0/31', fmt=str) - CIDR('192.0.2.1/32')
- self.assertEqual(result1, ['192.0.2.0/32'])
-
- result2 = CIDR('192.0.2.0/24', fmt=str) - CIDR('192.0.2.128/25')
- self.assertEqual(result2, ['192.0.2.0/25'])
-
- result3 = CIDR('192.0.2.0/24', fmt=str) - CIDR('192.0.2.128/27')
- self.assertEqual(result3, ['192.0.2.0/25', '192.0.2.160/27', '192.0.2.192/26'])
-
- # Subtracting a larger range from a smaller one results in an empty
- # list (rather than a negative CIDR - which would be rather odd)!
- result4 = CIDR('192.0.2.1/32') - CIDR('192.0.2.0/24')
- self.assertEqual(result4, [])
-
- def testCIDRToIPEquality(self):
- """CIDR() - equality tests with IP() objects"""
- # IPs and CIDRs do not compare favourably (directly), regardless of
- # the logical operation being performed.
- #
- # Logically similar, but fundamentally different on a Python and
- # netaddr level.
- ip = IP('192.0.2.1')
- cidr = CIDR('192.0.2.1/32')
-
- # Direct object to object comparisons will always fail.
- self.assertFalse(ip == cidr)
- self.assertTrue(ip != cidr)
- self.assertFalse(ip > cidr)
- self.assertFalse(ip >= cidr)
- self.assertFalse(ip < cidr)
- self.assertFalse(ip <= cidr)
-
- # Compare with CIDR object lower boundary.
- self.assertTrue(ip == cidr[0])
- self.assertTrue(ip >= cidr[0])
- self.assertFalse(ip != cidr[0])
- self.assertFalse(ip > cidr[0])
- self.assertFalse(ip < cidr[0])
- self.assertTrue(ip <= cidr[0])
-
- # Compare with CIDR object upper boundary.
- self.assertTrue(ip == cidr[-1])
- self.assertTrue(ip >= cidr[-1])
- self.assertFalse(ip != cidr[-1])
- self.assertFalse(ip > cidr[-1])
- self.assertFalse(ip < cidr[-1])
- self.assertTrue(ip <= cidr[-1])
-
- def testMasks(self):
- """CIDR() - netmask and hostmask method tests"""
- c1 = CIDR('192.0.2.0/24', fmt=str)
- self.assertEqual(c1.netmask, '255.255.255.0')
- self.assertEqual(c1.hostmask, '0.0.0.255')
- c1.prefixlen = 23
- self.assertEqual(c1.netmask, '255.255.254.0')
- self.assertEqual(c1.hostmask, '0.0.1.255')
-
- def testConstructorWithHostmaskACLPrefix(self):
- """CIDR() - ACL (hostmask) prefixlen constructor option tests"""
- c1 = CIDR('192.0.2.0/0.0.0.255', fmt=str)
- self.assertEqual(c1.netmask, '255.255.255.0')
- self.assertEqual(c1.hostmask, '0.0.0.255')
- self.assertEqual(c1.network, '192.0.2.0')
- self.assertEqual(c1.broadcast, '192.0.2.255')
- self.assertEqual(c1[0], '192.0.2.0')
- self.assertEqual(c1[-1], '192.0.2.255')
-
- def testConstructorWithNetmaskPrefix(self):
- """CIDR() - netmask prefixlen constructor option tests"""
- c1 = CIDR('192.0.2.0/255.255.255.0', fmt=str)
- self.assertEqual(c1.netmask, '255.255.255.0')
- self.assertEqual(c1.hostmask, '0.0.0.255')
- self.assertEqual(c1.network, '192.0.2.0')
- self.assertEqual(c1.broadcast, '192.0.2.255')
- self.assertEqual(c1[0], '192.0.2.0')
- self.assertEqual(c1[-1], '192.0.2.255')
-
- def testPrefixlenAssignment(self):
- """CIDR() - prefixlen assignment tests"""
-
- # Invalid without turning off strict bitmask checking.
- self.assertRaises(ValueError, CIDR, '192.0.2.1/24')
-
- c1 = CIDR('192.0.2.1/24', strict=False)
- c1.fmt = str
-
- self.assertEqual(c1[0], '192.0.2.0')
- self.assertEqual(c1[-1], '192.0.2.255')
-
- c1.prefixlen = 23
-
- self.assertEqual(c1[-1], '192.0.3.255')
- try:
- c1.prefixlen = 33 # Bad assignment that should fail!
- except ValueError:
- pass
- except:
- self.fail('expected ValueError was not raised!')
-
- self.assertEqual(c1[-1], '192.0.3.255')
- self.assertEqual(c1.prefixlen, 23)
-
- c2 = CIDR('192.168.0.0/16', fmt=str)
-
- self.assertEqual(str(c2), '192.168.0.0/16')
- self.assertEqual(c2.prefixlen, 16)
- self.assertEqual(c2[0], '192.168.0.0')
- self.assertEqual(c2[-1], '192.168.255.255')
- self.assertEqual(len(c2), 65536)
-
- c2.prefixlen += 16
-
- self.assertEqual(str(c2), '192.168.0.0/32')
- self.assertEqual(c2.prefixlen, 32)
- self.assertEqual(c2[0], '192.168.0.0')
- self.assertEqual(c2[-1], '192.168.0.0')
- self.assertEqual(len(c2), 1)
-
- c2.prefixlen -= 31
-
- self.assertEqual(str(c2), '128.0.0.0/1')
- self.assertEqual(c2.prefixlen, 1)
- self.assertEqual(c2[0], '128.0.0.0')
- self.assertEqual(c2[-1], '255.255.255.255')
- self.assertEqual(c2.size(), 2147483648)
-
- c2.prefixlen = 0
-
- self.assertEqual(str(c2), '0.0.0.0/0')
- self.assertEqual(c2.prefixlen, 0)
- self.assertEqual(c2[0], '0.0.0.0')
- self.assertEqual(c2[-1], '255.255.255.255')
- self.assertEqual(c2.size(), 4294967296)
-
- def testExceptions(self):
- """CIDR() - Exception generation tests"""
-
- self.assertRaises(ValueError, CIDR, '192.0.2.0/192.0.2.0')
- self.assertRaises(ValueError, CIDR, '0.0.0.0/-1')
- self.assertRaises(ValueError, CIDR, '0.0.0.0/33')
- self.assertRaises(ValueError, CIDR, '::/-1')
- self.assertRaises(ValueError, CIDR, '::/129')
-
- for cidr in (None, [], {}):
- self.assertRaises(TypeError, CIDR, cidr)
-
- for cidr in ('', 'foo'):
- self.assertRaises(AddrFormatError, CIDR, cidr)
-
- def testUnicodeStrings(self):
- """CIDR() - unicode string tests"""
- self.assertEqual(CIDR(u'192.0.2.0/24'), CIDR('192.0.2.0/24'))
-
- def testSupernetSpanning(self):
- """CIDR() - spanning supernet functionality tests (IPv4 / IPv6)"""
- expected = (
- (['192.0.2.0', '192.0.2.0'], '192.0.2.0/32'),
- (['192.0.2.0', '192.0.2.1'], '192.0.2.0/31'),
- (['192.0.2.1', '192.0.2.0'], '192.0.2.0/31'),
- (['192.0.2.0/24', '192.0.3.0/24'], '192.0.2.0/23'),
- (['192.0.2.*', '192.0.3.0/24'], '192.0.2.0/23'),
- (['*.*.*.*', '192.0.2.0/24'], '0.0.0.0/0'),
- (['192.168.3.1/24', '192.168.0.1/24', '192.168.1.1/24'], '192.168.0.0/22'),
- (['192.168.1-2.*', '192.168.3.0/24'], '192.168.0.0/22'),
- (['::', '::255.255.255.255'], '::/96'),
- (['192.0.2.27', '192.0.2.28'], '192.0.2.24/29') # Yes, this is correct.
- )
-
- for comparison in expected:
- (arg, result) = comparison
- cidr = str(CIDR.span_addrs(arg))
- self.assertEqual(cidr, result)
-
- def testSupernetSpanningFailureModes(self):
- """CIDR() - spanning supernet failure mode tests (IPv4)"""
- # Mixing address types is not allowed!
- self.assertRaises(TypeError, CIDR.span_addrs, ['::ffff:192.0.2.0/24', '192.0.3.0/24', ])
-
- def testSupernetMembership(self):
- """CIDR() - supernet membership tests (IPv4)"""
- self.assertTrue(CIDR('192.0.2.0/24').issupernet(CIDR('192.0.2.0/24')))
- self.assertTrue(CIDR('192.0.2.0/23').issupernet(CIDR('192.0.2.0/24')))
- self.assertFalse(CIDR('192.0.2.0/25').issupernet(CIDR('192.0.2.0/24')))
-
- # Mix it up with IPGlob and CIDR.
- self.assertTrue(CIDR('192.0.2.0/24').issupernet(IPGlob('192.0.2.*')))
- self.assertTrue(IPGlob('192.0.2-3.*').issupernet(CIDR('192.0.2.0/24')))
- self.assertTrue(IPGlob('192.0.2-3.*').issupernet(IPGlob('192.0.2.*')))
- self.assertFalse(CIDR('192.0.2.0/25').issupernet(CIDR('192.0.2.0/24')))
- self.assertFalse(IPGlob('192.0.2.0-127').issupernet(CIDR('192.0.2.0/24')))
-
- def testSubnetMembership(self):
- """CIDR() - subnet membership tests (IPv4)"""
- self.assertTrue(CIDR('192.0.2.0/24').issubnet(CIDR('192.0.2.0/24')))
- self.assertTrue(CIDR('192.0.2.0/25').issubnet(CIDR('192.0.2.0/24')))
- self.assertFalse(CIDR('192.0.2.0/23').issubnet(CIDR('192.0.2.0/24')))
-
- def testOverlaps(self):
- """CIDR() - overlapping CIDR() object tests (IPv4)"""
- # A useful property of CIDRs is that they cannot overlap!
-#TODO!
- pass
-
- def testAdjacency(self):
- """CIDR() - adjacent CIDR() object tests (IPv4)"""
- self.assertTrue(CIDR('192.0.2.0/24').adjacent(CIDR('192.0.3.0/24')))
- self.assertTrue(CIDR('192.0.3.0/24').adjacent(CIDR('192.0.2.0/24')))
- self.assertFalse(CIDR('192.0.2.0/24').adjacent(CIDR('192.0.4.0/24')))
- self.assertFalse(CIDR('192.0.4.0/24').adjacent(CIDR('192.0.2.0/24')))
-
- def testSupernetsIPv4(self):
- """CIDR() - supernet() method tests (IPv4)"""
- expected = [
- '0.0.0.0/0',
- '128.0.0.0/1',
- '192.0.0.0/2',
- '192.0.0.0/3',
- '192.0.0.0/4',
- '192.0.0.0/5',
- '192.0.0.0/6',
- '192.0.0.0/7',
- '192.0.0.0/8',
- '192.128.0.0/9',
- '192.128.0.0/10',
- '192.160.0.0/11',
- '192.160.0.0/12',
- '192.168.0.0/13',
- '192.168.0.0/14',
- '192.168.0.0/15',
- '192.168.0.0/16',
- '192.168.128.0/17',
- '192.168.192.0/18',
- '192.168.224.0/19',
- '192.168.240.0/20',
- '192.168.248.0/21',
- '192.168.252.0/22',
- '192.168.252.0/23',
- '192.168.252.0/24',
- '192.168.252.0/25',
- '192.168.252.64/26',
- '192.168.252.64/27',
- '192.168.252.64/28',
- '192.168.252.64/29',
- '192.168.252.64/30',
- '192.168.252.64/31',
- ]
-
- cidr = CIDR('192.168.252.65/32')
- calculated = cidr.supernet(fmt=str)
-
- self.assertEquals(expected, calculated)
- self.assertEquals(cidr.supernet(31, fmt=str), ['192.168.252.64/31'])
- self.assertEquals(cidr.supernet(24, fmt=str)[0], '192.168.252.0/24')
-
- def testSubnetsIPv4(self):
- """CIDR() - subnet iterator tests (IPv4)"""
- expected = [
- ('192.0.2.0/31', ('192.0.2.0', '192.0.2.1')),
- ('192.0.2.2/31', ('192.0.2.2', '192.0.2.3')),
- ('192.0.2.4/31', ('192.0.2.4', '192.0.2.5')),
- ('192.0.2.6/31', ('192.0.2.6', '192.0.2.7')),
- ('192.0.2.8/31', ('192.0.2.8', '192.0.2.9')),
- ('192.0.2.10/31', ('192.0.2.10', '192.0.2.11')),
- ('192.0.2.12/31', ('192.0.2.12', '192.0.2.13')),
- ('192.0.2.14/31', ('192.0.2.14', '192.0.2.15'))
- ]
-
- calculated = []
- cidr = CIDR('192.0.2.0/28')
- for subnet in cidr.subnet(prefixlen=31):
- subnet.fmt=str
- calculated.append((str(subnet), tuple(subnet)))
-
- self.assertEquals(expected, calculated)
-
- cidrs = ['192.0.2.0/30', '192.0.2.4/30',
- '192.0.2.8/30', '192.0.2.12/30']
-
- # external str() calls - returns CIDR() objects.
- self.assertEqual(cidrs,
- [str(c) for c in CIDR('192.0.2.0/28').subnet(30)])
-
- # internal str() calls - returns CIDR string addresses.
- self.assertEqual(cidrs,
- list(CIDR('192.0.2.0/28').subnet(30, fmt=str)))
-
- def testAssignableIPv4(self):
- """CIDR() - assignable IP tests (IPv4)"""
- cidr = CIDR('192.0.2.0/28', fmt=str)
- cidrs = list(cidr.iter_host_addrs())
- self.assertTrue(('192.0.2.1' '192.0.2.14'), (cidrs[0], cidrs[-1]))
-
- def testSummarize(self):
- """CIDR() - summarization tests (IPv4)"""
- summaries = {
- ('192.0.128.0/24', '192.0.129.0/24') :
- ['192.0.128.0/23'],
-
- ('192.0.129.0/24', '192.0.130.0/24') :
- ['192.0.129.0/24', '192.0.130.0/24'], # bit boundary mismatch.
-
- ('192.0.2.112/30', '192.0.2.116/31', '192.0.2.118/31') :
- ['192.0.2.112/29'],
-
- ('192.0.2.112/30', '192.0.2.116/32', '192.0.2.118/31') :
- ['192.0.2.112/30', '192.0.2.116/32', '192.0.2.118/31'],
-
- ('192.0.2.112/31', '192.0.2.116/31', '192.0.2.118/31') :
- ['192.0.2.112/31', '192.0.2.116/30'],
-
- ('192.0.1.254/31', '192.0.2.0/28',
- '192.0.2.16/28',
- '192.0.2.32/28',
- '192.0.2.48/28',
- '192.0.2.64/28',
- '192.0.2.80/28',
- '192.0.2.96/28',
- '192.0.2.112/28',
- '192.0.2.128/28',
- '192.0.2.144/28',
- '192.0.2.160/28',
- '192.0.2.176/28',
- '192.0.2.192/28',
- '192.0.2.208/28',
- '192.0.2.224/28',
- '192.0.2.240/28', '192.0.3.0/28') : ['192.0.1.254/31', '192.0.2.0/24', '192.0.3.0/28'],
- }
-
- for actual, expected in summaries.items():
- calculated = CIDR.summarize(actual, fmt=str)
- self.assertEquals(expected, calculated)
-
- def testSummarizeExtended(self):
- """CIDR() - extended summarization tests (IPv4 and IPv6)"""
- # Start with a single /23 CIDR.
- orig_cidr_ipv4 = CIDR('192.0.2.0/23')
- orig_cidr_ipv6 = CIDR('::192.0.2.0/120')
-
- # Split it into /28 subnet CIDRs (mix CIDR objects and CIDR strings).
- cidr_subnets = []
- cidr_subnets.extend(list(orig_cidr_ipv4.subnet(28, fmt=str)))
- cidr_subnets.extend(list(orig_cidr_ipv4.subnet(28)))
- cidr_subnets.extend(list(orig_cidr_ipv6.subnet(124, fmt=str)))
- cidr_subnets.extend(list(orig_cidr_ipv6.subnet(124)))
-
- # Add a couple of duplicates in to make sure summarization is working OK.
- cidr_subnets.append('192.0.2.1/32')
- cidr_subnets.append('192.0.2.128/25')
- cidr_subnets.append('::192.0.2.92/128')
-
- # Randomize the order of subnets.
- _random.shuffle(cidr_subnets)
-
- # Perform summarization operation.
- new_cidr = CIDR.summarize(cidr_subnets)
-
- self.assertEqual([orig_cidr_ipv4, orig_cidr_ipv6], new_cidr)
-
-#-----------------------------------------------------------------------------
-class IPGlobTests(TestCase):
- """Tests on IPGlob() objects"""
-
- def testProperties(self):
- """IPGlob() - class interface check (properties)"""
- expected_properties = (
- 'ADDR_TYPES',
- 'STRATEGIES',
- 'addr_type',
- 'first',
- 'last',
- 'fmt',
- 'strategy',
- )
-
- for attribute in expected_properties:
- self.assertTrue(hasattr(IPGlob, attribute))
- self.assertFalse(callable(eval('IPGlob.%s' % attribute)))
-
-
- def testMethods(self):
- """IPGlob() - class interface check (methods)"""
- expected_methods = (
- 'adjacent',
- 'cidrs',
- 'format',
- 'iprange',
- 'is_valid',
- 'issubnet',
- 'issupernet',
- 'overlaps',
- 'size',
- 'ipglob',
- )
-
- for attribute in expected_methods:
- self.assertTrue(hasattr(IPGlob, attribute))
- self.assertTrue(callable(eval('IPGlob.%s' % attribute)))
-
- def testIPGlobPositiveValidity(self):
- """IPGlob() - positive validity tests"""
- valid_ipglobs = (
- ('192.0.2.1', 1),
- ('0.0.0.0', 1),
- ('255.255.255.255', 1),
- ('192.0.2.0-31', 32),
- ('192.0.2.*', 256),
- ('192.0.1-2.*', 512),
- ('192.0-1.*.*', 131072),
- ('*.*.*.*', 4294967296),
- )
-
- for ipglob, expected_size in valid_ipglobs:
- iglob = IPGlob(ipglob)
- self.assertEqual(iglob.size(), expected_size)
-
- def testIPGlobNegativeValidity(self):
- """IPGlob() - negative validity tests"""
- invalid_ipglobs = (
- '*.*.*.*.*',
- '*.*.*',
- '*.*',
- '*',
- '192-193.*',
- '192-193.0-1.*.*',
- '192.0.*.0',
- 'a.b.c.*',
- [],
- None,
- False,
- True,
- )
- for ipglob in invalid_ipglobs:
- self.assertRaises(AddrFormatError, IPGlob, ipglob)
-
- def testIPGlobToCIDRConversion(self):
- """IPGlob() - IPGlob -> CIDR coversion tests"""
- expected = (
- ('10.0.0.1', '10.0.0.1/32', 1),
- ('192.0.2.*', '192.0.2.0/24', 256),
- ('172.16-31.*.*', '172.16.0.0/12', 1048576),
- ('*.*.*.*', '0.0.0.0/0', 4294967296),
- )
-
- for ipglob, cidr, size in expected:
- w1 = IPGlob(ipglob)
- c1 = w1.cidrs()[0]
- w2 = c1.ipglob()
- self.assertEqual(w1.size(), size)
- self.assertEqual(str(w1), ipglob)
- self.assertEqual(str(c1), cidr)
- self.assertEqual(c1.size(), size)
- self.assertEqual(w1, w2) # Test __eq__()
- self.assertEqual(str(w1), str(w2)) # Test __str__() values too.
-
- def testIPGlobToMultipleCIDRConversion(self):
- """IPGlob() - IPGlob -> multiple CIDRs coversion tests"""
- # Example from RFC3171 - IANA IPv4 Multicast Guidelines :-
- # IANA reserved address space
- self.assertEqual(IPGlob('225-231.*.*.*').cidrs(),
- [CIDR('225.0.0.0/8'), CIDR('226.0.0.0/7'), CIDR('228.0.0.0/6')])
-
- self.assertEqual(IPGlob('225-231.*.*.*', fmt=str).cidrs(),
- ['225.0.0.0/8', '226.0.0.0/7', '228.0.0.0/6'])
-
- self.assertEqual(IPGlob('234-238.*.*.*').cidrs(),
- [CIDR('234.0.0.0/7'), CIDR('236.0.0.0/7'), CIDR('238.0.0.0/8')])
-
- self.assertEqual(IPGlob('234-238.*.*.*', fmt=str).cidrs(),
- ['234.0.0.0/7', '236.0.0.0/7', '238.0.0.0/8'])
-
- self.assertEqual(IPGlob('192.0.2.5-6').cidrs(),
- [CIDR('192.0.2.5/32'), CIDR('192.0.2.6/32')])
-
- self.assertEqual(IPGlob('192.0.2.5-6', fmt=str).cidrs(),
- ['192.0.2.5/32', '192.0.2.6/32'])
-
- def testIPGlobToCIDRComparisons(self):
- """IPGlob() - comparison against CIDR() object tests"""
- # Basically CIDRs and IPGlobs are subclassed from the same parent
- # class so should compare favourably.
- cidr1 = CIDR('192.0.2.0/24')
- cidr2 = CIDR('192.0.3.0/24')
- iglob1 = IPGlob('192.0.2.*')
-
- # Positives.
- self.assertTrue(cidr1 == iglob1)
- self.assertTrue(cidr1 >= iglob1)
- self.assertTrue(cidr1 <= iglob1)
- self.assertTrue(cidr2 > iglob1)
- self.assertTrue(iglob1 < cidr2)
-
- # Negatives.
- self.assertFalse(cidr1 != iglob1)
- self.assertFalse(cidr1 > iglob1)
- self.assertFalse(cidr1 < iglob1)
- self.assertFalse(cidr2 <= iglob1)
- self.assertFalse(cidr2 < iglob1)
- self.assertFalse(iglob1 >= cidr2)
- self.assertFalse(iglob1 > cidr2)
-
- def testIPGlobToIPEquality(self):
- """IPGlob() - equality tests with IP() objects"""
- # IPs and IPGlobs current do not compare favourably, regardless
- # of the operation.
- #
- # Logically similar, but fundamentally different at a Python and
- # netaddr level.
- ip = IP('192.0.2.1')
- iglob = IPGlob('192.0.2.1')
-
- # Direct object to object comparisons will always fail.
- self.assertFalse(ip == iglob)
- self.assertTrue(ip != iglob)
- self.assertFalse(ip > iglob)
- self.assertFalse(ip >= iglob)
- self.assertFalse(ip < iglob)
- self.assertFalse(ip <= iglob)
-
- # Compare with IPGlob object lower boundary.
- self.assertTrue(ip == iglob[0])
- self.assertTrue(ip >= iglob[0])
- self.assertTrue(ip <= iglob[0])
- self.assertFalse(ip != iglob[0])
- self.assertFalse(ip > iglob[0])
- self.assertFalse(ip < iglob[0])
-
- # Compare with IPGlob object upper boundary.
- self.assertTrue(ip == iglob[-1])
- self.assertTrue(ip >= iglob[-1])
- self.assertTrue(ip <= iglob[-1])
- self.assertFalse(ip != iglob[-1])
- self.assertFalse(ip > iglob[-1])
- self.assertFalse(ip < iglob[-1])
-
- def testIPGlobIncrements(self):
- """IPGlob() - address range increment tests"""
- expected = [
- '192.0.0.*',
- '192.0.1.*',
- '192.0.2.*',
- '192.0.3.*',
- ]
-
- actual = []
- iglob = IPGlob('192.0.0.*')
- for i in range(4):
- actual.append(str(iglob))
- iglob += 1
-
- self.assertEqual(expected, actual)
-
- def testOverlaps(self):
- """IPGlob() - overlapping IPGlob() object tests"""
- self.assertTrue(IPGlob('192.0.2.0-31').overlaps(IPGlob('192.0.2.16-63')))
- self.assertFalse(IPGlob('192.0.2.0-7').overlaps(IPGlob('192.0.2.16-23')))
-
- def testAdjacency(self):
- """IPGlob() - adjacent IPGlob() object tests"""
- self.assertTrue(IPGlob('192.0.2.*').adjacent(IPGlob('192.0.3.*')))
- self.assertTrue(IPGlob('192.0.3.*').adjacent(IPGlob('192.0.2.*')))
- self.assertFalse(IPGlob('192.0.2.*').adjacent(IPGlob('192.0.4.*')))
- self.assertFalse(IPGlob('192.0.4.*').adjacent(IPGlob('192.0.2.*')))
-
-#-----------------------------------------------------------------------------
-class nrangeTests(TestCase):
- """Tests on the nrange() function"""
- def testIPObjectIteration(self):
- """nrange() - iterator yielding IP() object test (IPv4)"""
- expected = [
- '192.0.2.0',
- '192.0.2.4',
- '192.0.2.8',
- '192.0.2.12',
- '192.0.2.16',
- '192.0.2.20',
- '192.0.2.24',
- '192.0.2.28',
- '192.0.2.32',
- ]
-
- start_addr = IP('192.0.2.0')
- stop_addr = IP('192.0.2.32')
- for i, addr in enumerate(nrange(start_addr, stop_addr, 4)):
- self.assertEqual(str(addr), expected[i])
-
- def testIntegerIteration(self):
- """nrange() - yield positive integer test (IPv6)"""
- expected_type = int
- expected_list = [0,4,8,12,16]
-
- saved_list = []
- # IPv6 addresses auto-detected, as int.
- for addr in nrange('::', '::10', 4, fmt=expected_type):
- self.assertEqual(type(addr), expected_type)
- saved_list.append(addr)
-
- self.assertEqual(saved_list, expected_list)
-
- def testNegativeIntegerIteration(self):
- """nrange() - yield negative integer test (IPv6)"""
- expected_type = int
- expected_list = [16,12,8,4,0]
-
- saved_list = []
- # IPv6 addresses auto-detected, negative step as int.
- for addr in nrange('::10', '::', -4, fmt=expected_type):
- self.assertEqual(type(addr), expected_type)
- saved_list.append(addr)
-
- self.assertEqual(saved_list, expected_list)
-
- def testHexadecimalIteration(self):
- """nrange() - yield hexdecimal values test (IPv6)"""
- expected_list = [
- '0xff000000000000000000000000000010',
- '0xff00000000000000000000000000000c',
- '0xff000000000000000000000000000008',
- '0xff000000000000000000000000000004',
- '0xff000000000000000000000000000000',
- ]
-
- saved_list = []
- # IPv6 addresses auto-detected multicast addresses,
- # negative step as hex values.
- for addr in nrange('ff00::10', 'ff00::', -4, fmt=hex):
- self.assertEqual(type(addr), str)
- saved_list.append(addr.lower().rstrip('l'))
-
- self.assertEqual(saved_list, expected_list)
-
- def testIPObjectIteration(self):
- """nrange() - yield IP() object test (IPv4)"""
- expected_list = [
- '192.0.2.0',
- '192.0.2.128',
- '192.0.3.0',
- '192.0.3.128',
- ]
-
- saved_list = []
- # IP class used to initialise generator with IPv4 addresses and a
- # step of 128 addresses,
- for addr in nrange(IP('192.0.2.0'), IP('192.0.3.255'), 128):
- self.assertTrue(isinstance(addr, IP))
- # Save addresses as string values for comparison.
- saved_list.append(str(addr))
-
- self.assertEqual(saved_list, expected_list)
-
-
-#-----------------------------------------------------------------------------
-class IPandCIDRDifferences(TestCase):
- """Tests on the nrange() function"""
- def testConstructor(self):
- """general - IP() versus CIDR() constructor parsing behaviour difference tests"""
- #!!! The difference here are subtle and are *NOT* bugs!
- #!!! IP() users inet_aton() whereas CIDR is employing customised
- #!!! abbreviation completion rules based on old classful addressing
- #!!! rules. Compatible with pgsql's cidr() function.
- self.assertEqual(IP('192.0.2/24'), IP('192.0.0.2/24'))
- self.assertEqual(CIDR('192.0.2/24'), CIDR('192.0.2.0/24'))
-
-#-----------------------------------------------------------------------------
-if __name__ == '__main__':
- unit_test_suite = TestSuite()
- for test_case in TestLoader().loadTestsFromName(__name__):
- unit_test_suite.addTest(test_case)
- TextTestRunner(verbosity=2).run(unit_test_suite)