Ë ÀudHˆùŠOãóZ—dZddlZddlZddlmZmZmZm Z m Z m Z d„Z d„Z Gd„de«Zy)z2Set based operations for IP addresses and subnets.éN)Ú IPNetworkÚ IPAddressÚIPRangeÚ cidr_mergeÚ cidr_excludeÚiprange_to_cidrscó,—|jj}||}|j|jkDr+|j||j|jdz f«|dz }|}|t |«krk||}||vrna|j dz|jk(rn.|j||j dz|jdz f«|dz }|}|t |«krŒk|j dz}|j } || kr|j||| f«|S)a®Calculate IPSet([supernet]) - IPSet(subnets). Assumptions: subnets is sorted, subnet_idx points to the first element in subnets that is a subnet of supernet. Results are appended to the ranges parameter as tuples of in format (version, first, last). Return value is the first subnet_idx that does not point to a subnet of supernet (or len(subnets) if all subsequents items are a subnet of supernet). é)Ú_moduleÚversionÚfirstÚappendÚlenÚlast) ÚsupernetÚsubnetsÚ subnet_idxÚrangesr ÚsubnetÚ prev_subnetÚ cur_subnetr rs ú4/usr/lib/python3.12/site-packages/netaddr/ip/sets.pyÚ _subtractrs€ð×Ñ×&Ñ&€GØ �ZÑ €FØ ‡|�|�h—n‘nÒ$Ø� ‰ �w §¡°· ± ¸qÑ0@ÐAÔBà�!�O€JØ€KØ ”s˜7“|Ò #ؘZÑ(ˆ à ˜XÑ %Ø Ø × Ñ ˜aÑ  :×#3Ñ#3Ò 3à à �M‰M˜7 K×$4Ñ$4°qÑ$8¸*×:JÑ:JÈQÑ:NÐOÔ Pà�a‰ˆ Ø ˆ ð ”s˜7“|Ó #ð × Ñ ˜qÑ €EØ �=‰=€DØ �‚}Ø� ‰ �w  tÐ,Ô-à Ðóc#óÔK—|sy|d\}}}|ddD]6\}}}||dzk(r||k(r|}Œt||«t||«f–—|}|}|}Œ8t||«t||«f–—y­w)aqIterate over sorted_ranges, merging where possible Sorted ranges must be a sorted iterable of (version, first, last) tuples. Merging occurs for pairs like [(4, 10, 42), (4, 43, 100)] which is merged into (4, 10, 100), and leads to return value ( IPAddress(10, 4), IPAddress(100, 4) ), which is suitable input for the iprange_to_cidrs function. Nrr )r)Ú sorted_rangesÚcurrent_versionÚ current_startÚ current_stopÚ next_versionÚ next_startÚ next_stops rÚ_iter_merged_rangesr#6s˜èø€ñ Øà3@ÀÑ3CÑ0€O�] Là/<¸Q¸RÓ/@Ñ+ˆ �j )Ø ˜¨Ñ)Ò )¨l¸oÒ.Mà$ˆLØ ä˜¨Ó8¼)ÀLÐRaÓ:bÐcÒcØ"ˆ Ø ˆ Ø&‰ð0Aô �] OÓ 4´iÀ ÈoÓ6^Ð _Ó_ùs‚A&A(có—eZdZdZdZd%d„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd&d„Zd&d„Zd„Zd„Zd„Zd&d„Zd„Zd„Zd„Zd„Zd„ZeZd„Zd„ZeZd„ZeZd„Z e Z!d„Z"e"Z#d„Z$e$Z%d„Z&e'd „«Z(d!„Z)e)Z*d"„Z+d#„Z,d$„Z-y)'ÚIPSetz[ Represents an unordered collection (set) of unique IP addresses and subnets. )Ú_cidrsÚ __weakref__Ncóø—t|t«r|jdi|_yt|t«r,t j t|d|d«d«|_yt|t«r*t j |j«d«|_yi|_|�Wg}|D]0}t|t«r t||¬«}|j|«Œ2t|«D]}d|j|<Œyy)aH Constructor. :param iterable: (optional) an iterable containing IP addresses, subnets or ranges. :param flags: decides which rules are applied to the interpretation of the addr value. See the :class:`IPAddress` documentation for supported constant values. TréÿÿÿÿN©Úflags)Ú isinstancerÚcidrr&rÚdictÚfromkeysrr%Ú iter_cidrsÚintrrr©ÚselfÚiterabler+Ú mergeableÚaddrr-s rÚ__init__zIPSet.__init__ZsÔ€ô �h¤ Ô *Ø#Ÿ=™=¨$Ð/ˆD�KÜ ˜¤'Ô *ÜŸ-™-Ô(8¸À!¹ÀhÈrÁlÓ(SÐUYÓZˆD�KÜ ˜¤%Ô (ÜŸ-™-¨×(;Ñ(;Ó(=¸tÓDˆD�KàˆDŒKØÐ#Ø� Û$�DÜ! $¬Ô,Ü(¨°UÔ;˜Ø×$Ñ$ TÕ*ð%ô ' yÖ1�DØ(,�D—K‘K Ò%ñ2ð$rcón—t|jD�cgc]}|j«‘Œc}«Scc}w)z.:return: Pickled state of an ``IPSet`` object.)Útupler&Ú __getstate__©r3r-s rr:zIPSet.__getstate__xs,€ä°d·k²kÓB±k¨d�d×'Ñ'Õ)°kÑBÓCÐCùÒBs”2cóH—tjd„|D«d«|_y)zR :param state: data used to unpickle a pickled ``IPSet`` object. c3óBK—|]\}}}t||f|¬«–—Œy­w))r N)r)Ú.0ÚvalueÚ prefixlenr s rÚ z%IPSet.__setstate__..‚s*èø€Ð cÑ]bÑ@YÀÀyÐRYŒY˜˜yÐ)°7× ;Ð ;Ñ]bùs‚TN)r.r/r&)r3Ústates rÚ __setstate__zIPSet.__setstate__|s €ô —m‘mÙ cÑ]bÓ cØ ó ˆ� rcóê—|j}|j}|j}|j|jj k(r3|j «D]}||jvsŒ|j|=yn˜g}|jD]s}|jj|k7s||k(rŒ"|j}|j} ||k\r| |kr|j|«ŒV||ksŒ\| |k\sŒb|j|=|rJ‚y|D]} |j| =Œ|jj |jz } |jdk7r¯|j| z dz} | r|j«} n|j«} | |jvry|j| =|j|=|xjdzc_ | dz } |j| z | z|_ d|j|<|jdk7rŒ®yy)a Same as compact(), but assume that added_network is the only change and that this IPSet was properly compacted before added_network was added. This allows to perform compaction much faster. added_network must already be present in self._cidrs. Nrr T) r rr Ú _prefixlenr Úwidthrr&rr@Ú_valueÚpreviousÚnext)r3Ú added_networkÚ added_firstÚ added_lastÚ added_versionÚpotential_supernetÚ to_remover-r rÚitemÚ shift_widthÚthe_bitÚ candidates rÚ_compact_single_networkzIPSet._compact_single_network†sì€ð$×)Ñ)ˆ Ø"×'Ñ'ˆ Ø%×-Ñ-ˆ ð × #Ñ # }×'<Ñ'<×'BÑ'BÒ Bð'4×&<Ñ&<Ö&>Ð"Ø%¨¯©Ò4ØŸ ™  MÐ2Ùñ'?ð ˆIØŸ œ �Ø—<‘<×'Ñ'¨=Ò8¸DÀMÒà×$Ñ$ TÕ*ؘkÓ)¨d°jÓ.@àŸ ™  MÐ2ñ )Ð(˜=Ùð$ó "�Ø—K‘K Ñ%ð"ð$×+Ñ+×1Ñ1°M×4KÑ4KÑKˆ Ø×%Ñ%¨Ò*à$×+Ñ+¨{Ñ:¸aÑ?ˆGÙØ)×2Ñ2Ó4‘ à)×.Ñ.Ó0� à § ¡ Ñ+àà— ‘ ˜IÐ&Ø— ‘ ˜MÐ*Ø × #Ò # qÑ (Õ #ð ˜1Ñ ˆKØ$1×$8Ñ$8¸KÑ$GÈKÑ#WˆMÔ Ø)-ˆD�K‰K˜ Ñ &ð)×%Ñ%¨Õ*rcód—t|j«}tj|d«|_y)zR Compact internal list of `IPNetwork` objects using a CIDR merge. TN)rr&r.r/©r3Úcidrss rÚcompactz IPSet.compactÐs$€ô˜4Ÿ;™;Ó'ˆÜ—m‘m E¨4Ó0ˆ� rcó—td«‚)zÁ Raises ``TypeError`` if this method is called. .. note:: IPSet objects are not hashable and cannot be used as dictionary keys or as members of other sets. zIP sets are unhashable!)Ú TypeError©r3s rÚ__hash__zIPSet.__hash__×s€ôÐ1Ó2Ð2rcó²—t|«}||jvry|jr1|xjdzc_||jvry|jrŒ1y)z„ :param ip: An IP address or subnet. :return: ``True`` if IP address or subnet is a member of this IP set. Tr F)rr&rE)r3Úiprs rÚ __contains__zIPSet.__contains__àsU€ô˜R“=ˆØ �t—{‘{Ñ "ØØ×!Ò!Ø × Ò  1Ñ $Õ Ø˜4Ÿ;™;Ñ&Øð×!Ó!ðrcó,—t|j«S)z9Return True if IPSet contains at least one IP, else False)Úboolr&r[s rÚ__bool__zIPSet.__bool__ós€ä�D—K‘KÓ Ð rcóL—tjt|j«ŽS)zP :return: an iterator over the IP addresses within this IP set. )Ú _itertoolsÚchainÚsortedr&r[s rÚ__iter__zIPSet.__iter__÷s€ô×Ѥ¨¯ © Ó!4Ð5Ð5rcó,—t|j«S)zU :return: an iterator over individual IP subnets within this IP set. )rfr&r[s rr0zIPSet.iter_cidrsýs€ô�d—k‘kÓ"Ð"rcó¦—t|t«rRtjt |d|d«d«}|j j |«|j«yt|t«r |j}n2t|t«rtt||¬««}n t|«}d|j |<|j|«y)a8 Adds an IP address or subnet or IPRange to this IP set. Has no effect if it is already present. Note that where possible the IP address or subnet is merged with other members of the set to form more concise CIDR blocks. :param addr: An IP address or subnet in either string or object form, or an IPRange object. :param flags: decides which rules are applied to the interpretation of the addr value. See the :class:`IPAddress` documentation for supported constant values. rr)TNr*) r,rr.r/rr&ÚupdaterXrr-r1rrT)r3r6r+Ú new_cidrss rÚaddz IPSet.addsŸ€ô �dœGÔ $ÜŸ ™ Ô&6°t¸A±wÀÀRÁÓ&IÈ4ÓPˆIØ �K‰K× Ñ ˜yÔ )Ø �L‰LŒNØ Ü �dœIÔ &à—9‘9‰DÜ ˜œcÔ "ÜœY t°5Ô9Ó:‰Dä˜T“?ˆDà ˆ� ‰ �DÑØ ×$Ñ$ TÕ*rcóŒ—t|t«r+t|d|d«}|D]}|j|«Œyt|t«rt ||¬«}n t |«}|j|«d}d}|jD]}||vsŒt||«}|}n|�$|j|=|D]}d|j|<Œyy)a  Removes an IP address or subnet or IPRange from this IP set. Does nothing if it is not already a member. Note that this method behaves more like discard() found in regular Python sets because it doesn't raise KeyError exceptions if the IP address or subnet is question does not exist. It doesn't make sense to fully emulate that behaviour here as IP sets contain groups of individual IP addresses as individual set members using IPNetwork objects. :param addr: An IP address or subnet, or an IPRange. :param flags: decides which rules are applied to the interpretation of the addr value. See the :class:`IPAddress` documentation for supported constant values. rr)Nr*T) r,rrÚremover1rrrlr&r)r3r6r+rWr-Ú remainderÚ matching_cidrs rrnz IPSet.remove#sÍ€ô& �dœGÔ $Ü$ T¨!¡W¨d°2©hÓ7ˆEÛ�Ø— ‘ ˜DÕ!ðà ä �dœCÔ Ü˜T¨Ô/‰Dä˜T“?ˆDð �‰�Œàˆ ؈ ð—K”KˆDØ�tŠ|Ü(¨¨tÓ4� Ø $� Ùð  ð Ð Ø— ‘ ˜MÐ*Û!�Ø$(�— ‘ ˜DÒ!ñ"ð !rcó<—|jj«dS)zŒ Removes and returns an arbitrary IP address or subnet from this IP set. :return: An IP address or subnet. r)r&Úpopitemr[s rÚpopz IPSet.pop[s€ð�{‰{×"Ñ"Ó$ QÑ'Ð'rcó*—|j|«}| S)zÑ :param other: an IP set. :return: ``True`` if this IP set has no elements (IP addresses or subnets) in common with other. Intersection *must* be an empty set. )Ú intersection)r3ÚotherÚresults rÚ isdisjointzIPSet.isdisjointds€ð×"Ñ" 5Ó)ˆØˆzÐrcóp—|j«}|jj|j«|S)z':return: a shallow copy of this IP set.)Ú __class__r&rj)r3Úobj_copys rÚcopyz IPSet.copyos)€à—>‘>Ó#ˆØ�‰×јtŸ{™{Ô+؈rc ó¦—t|t«rptjd„t t j |jj«|jj«««D«d«|_yt|ttf«r|j|«yt|d«s td«‚g}|D]0}t|t«r t||¬«}|j!|«Œ2t t j |jj«|««D]}d|j|<Œ|j#«y)az Update the contents of this IP set with the union of itself and other IP set. :param iterable: an iterable containing IP addresses, subnets or ranges. :param flags: decides which rules are applied to the interpretation of the addr value. See the :class:`IPAddress` documentation for supported constant values. c3ó K—|]}|–—Œy­w)N©)r>r^s rrAzIPSet.update..ƒsèø€ðñ˜ôñùs‚ TNrgzan iterable was expected!r*)r,r%r.r/rrdrer&ÚkeysrrrlÚhasattrrZr1rrrXr2s rrjz IPSet.updateus€ô �h¤Ô &ÜŸ-™-ñä(Ü"×(Ñ(¨¯©×)9Ñ)9Ó);¸X¿_¹_×=QÑ=QÓ=SÓTôóð óˆDŒKð Ü ˜¤9¬gÐ"6Ô 7Ø �H‰H�XÔ Ø ä�x Ô,ÜÐ7Ó8Ð 8àˆ ÛˆDܘ$¤Ô$Ü  ¨UÔ3�Ø × Ñ ˜TÕ "ðô œz×/Ñ/°· ± ×0@Ñ0@Ó0BÀIÓNÖOˆDØ $ˆD�K‰K˜Ò ðPð � ‰ �rcó—i|_y)z5Remove all IP addresses and subnets from this IP set.N©r&r[s rÚclearz IPSet.clearžs €àˆ� rcó`— |j|jk(S#t$r tcYSwxYw)z› :param other: an IP set :return: ``True`` if this IP set is equivalent to the ``other`` IP set, ``False`` otherwise. ©r&ÚAttributeErrorÚNotImplemented©r3rvs rÚ__eq__z IPSet.__eq__¢ó/€ð "Ø—;‘; %§,¡,Ñ.Ð .øÜò "Ü!Ò !ð "úó ‚›-¬-có`— |j|jk7S#t$r tcYSwxYw)z› :param other: an IP set :return: ``False`` if this IP set is equivalent to the ``other`` IP set, ``True`` otherwise. r†r‰s rÚ__ne__z IPSet.__ne__®r‹rŒcó~—t|d«stS|j|jkxr|j|«S)z— :param other: an IP set :return: ``True`` if this IP set is less than the ``other`` IP set, ``False`` otherwise. r&)r�rˆÚsizeÚissubsetr‰s rÚ__lt__z IPSet.__lt__ºs5€ô�u˜hÔ'Ü!Ð !à�y‰y˜5Ÿ:™:Ñ%Ò>¨$¯-©-¸Ó*>Ð>rcó2—|jD]}||vsŒyy)zš :param other: an IP set. :return: ``True`` if every IP address and subnet in this IP set is found within ``other``. FTrƒ©r3rvr-s rr‘zIPSet.issubsetÆs"€ð—K”KˆDؘ5Ò Ùð ðrcó~—t|d«stS|j|jkDxr|j|«S)z› :param other: an IP set. :return: ``True`` if this IP set is greater than the ``other`` IP set, ``False`` otherwise. r&)r�rˆr�Ú issupersetr‰s rÚ__gt__z IPSet.__gt__Ôs5€ô�u˜hÔ'Ü!Ð !à�y‰y˜5Ÿ:™:Ñ%Ò@¨$¯/©/¸%Ó*@Ð@rcóV—t|d«stS|jD]}||vsŒyy)zš :param other: an IP set. :return: ``True`` if every IP address and subnet in other IP set is found within this one. r&FT)r�rˆr&r”s rr–zIPSet.issupersetàs2€ô�u˜hÔ'Ü!Ð !à—L”LˆDؘ4ÒÙð!ðrcóH—|j«}|j|«|S)z± :param other: an IP set. :return: the union of this IP set and another as a new IP set (combines IP addresses and subnets from both sets). )r|rj)r3rvÚip_sets rÚunionz IPSet.unionñs €ð—‘“ˆØ� ‰ �eÔØˆ rcóx—i}t|j«}t|j«}d}d}t|«}t|«}||kr]||krX||} ||} | | k(rd|| <|dz }|dz }n.| | vr d|| <|dz }n| | vr d|| <|dz }n| | kr|dz }n|dz }||kr||krŒXt«} || _| S)zµ :param other: an IP set. :return: the intersection of this IP set and another as a new IP set. (IP addresses and subnets common to both sets). rTr )rfr&rr%) r3rvÚ result_cidrsÚown_netsÚ other_netsÚown_idxÚ other_idxÚown_lenÚ other_lenÚown_curÚ other_currws rruzIPSet.intersectionþs€ðˆ ä˜$Ÿ+™+Ó&ˆÜ˜EŸL™LÓ)ˆ ؈؈ Ü�h“-ˆÜ˜ “Oˆ ؘҠI° Ò$9ؘwÑ'ˆGØ" 9Ñ-ˆIà˜)Ò#Ø(,� ˜WÑ%ؘ1‘ �ؘQ‘‘ ؘIÑ%Ø(,� ˜WÑ%ؘ1‘ ‘ؘgÑ%Ø*.� ˜YÑ'ؘQ‘‘ ð˜YÒ&ؘq‘L‘Gà ‘N�Ið'˜Ò I° Ó$9ô.“ˆØ$ˆŒ ؈ rcó"—g}t|j«}t|j«}d}d}t|«}t|«}||krâ||krÝ||} ||} | | k(r |dz }|dz }n¸| | vrt| |||«}|dz }n | | vrt| |||«}|dz }nˆ| | krB|j | j j | j| jf«|dz }nA|j | j j | j| jf«|dz }||kr||krŒÝ||krL||} |j | j j | j| jf«|dz }||krŒL||krL||} |j | j j | j| jf«|dz }||krŒLt«} t|«D]'\} } t| | «}|D]}d| j|<ŒŒ)| S)zÜ :param other: an IP set. :return: the symmetric difference of this IP set and another as a new IP set (all IP addresses and subnets that are in exactly one of the sets). rr T) rfr&rrrr r r rr%r#r)r3rvÚ result_rangesržrŸr r¡r¢r£r¤r¥rwÚstartÚstoprWr-s rÚsymmetric_differencezIPSet.symmetric_difference*s*€ðˆ ä˜$Ÿ+™+Ó&ˆÜ˜EŸL™LÓ)ˆ ؈؈ Ü�h“-ˆÜ˜ “Oˆ ؘҠI° Ò$9ؘwÑ'ˆGØ" 9Ñ-ˆIà˜)Ò#ؘ1‘ �ؘQ‘‘ ؘIÑ%Ü# I¨x¸À-ÓP�ؘQ‘‘ ؘgÑ%Ü% g¨z¸9ÀmÓT� ؘ1‘ ‘ð˜YÒ&Ø!×(Ñ(¨'¯/©/×*AÑ*AÀ7Ç=Á=ÐRY×R^ÑR^Ð)_Ô`ؘq‘L‘Gà!×(Ñ(Ø"×*Ñ*×2Ñ2°I·O±OÀYÇ^Á^ÐTôð ‘N�Ið-˜Ò I° Ó$9ð4˜ÒؘwÑ'ˆGØ × Ñ  '§/¡/×"9Ñ"9¸7¿=¹=È'Ï,É,Ð!WÔ XØ �q‰LˆGð˜Óð˜)Ò#Ø" 9Ñ-ˆIØ × Ñ  )×"3Ñ"3×";Ñ";¸Y¿_¹_ÈiÏnÉnÐ!]Ô ^Ø ˜‰NˆIð˜)Ó#ô “ˆÜ.¨}Ö=‰KˆE�4Ü$ U¨DÓ1ˆEÛ�Ø&*�— ‘ ˜dÒ#ñð>ðˆ rcó—g}i}t|j«}t|j«}d}d}t|«}t|«} ||kra|| kr\||} ||} | | k(r |dz }|dz }n7| | vr|dz }n-| | vrt| |||«}|dz }n| | kr d|| <|dz }n|dz }||kr|| krŒ\||krd|||<|dz }||krŒt |«D]\} } t | | «D]}d||<Œ Œt «}||_|S)zæ :param other: an IP set. :return: the difference between this IP set and another as a new IP set (all IP addresses and subnets that are in this IP set but not found in the other.) rr T)rfr&rrr#rr%)r3rvr§r�ržrŸr r¡r¢r£r¤r¥r¨r©r-rws rÚ differencezIPSet.differencels]€ðˆ ؈ ä˜$Ÿ+™+Ó&ˆÜ˜EŸL™LÓ)ˆ ؈؈ Ü�h“-ˆÜ˜ “Oˆ ؘҠI° Ò$9ؘwÑ'ˆGØ" 9Ñ-ˆIà˜)Ò#ؘ1‘ �ؘQ‘‘ ؘIÑ%ؘ1‘ ‘ؘgÑ%Ü% g¨z¸9ÀmÓT� ؘ1‘ ‘ð˜YÒ&Ø,0�L Ñ)ؘq‘L‘Gà ‘N�Ið%˜Ò I° Ó$9ð,˜ÒØ.2ˆL˜ 'Ñ*Ñ +Ø �q‰LˆGð˜Óô/¨}Ö=‰KˆE�4Ü(¨°Ö5�Ø%)� ˜TÒ"ñ6ð>ô“ˆØ$ˆŒ ؈ rcó|—|j}|tjkDrtdtjz«‚|S)zç :return: the cardinality of this IP set (i.e. sum of individual IP addresses). Raises ``IndexError`` if size > maxsize (a Python limitation). Use the .size property for subnets of any size. zVrange contains more than %d (sys.maxsize) IP addresses!Use the .size property instead.)r�Ú_sysÚmaxsizeÚ IndexError)r3r�s rÚ__len__z IPSet.__len__¡s?€ð �y‰yˆØ ”$—,‘,Ò Üð2Ü48·L±LñAóð ðˆ rcóf—t|jD�cgc]}|j‘Œc}«Scc}w)z˜ The cardinality of this IP set (based on the number of individual IP addresses including those implicitly defined in subnets). )Úsumr&r�r;s rr�z IPSet.size¯s)€ô ¨$¯+ª+Ó6©+ $�D—I“I¨+Ñ6Ó7Ð7ùÒ6s”.cój—dt|j«D�cgc] }t|«‘Œc}zScc}w)z8:return: Python statement to create an equivalent objectz IPSet(%r))rfr&Ústr)r3Úcs rÚ__repr__zIPSet.__repr__·s.€à¬f°T·[±[Ô.AÓBÑ.A¨œc !�fÐ.AÑBÑBÐBùÒBs™0có‚—|j«}t|«dkDr!|dd}|D]}|d|k7ry|ddz}Œy)zÆ Returns True if the members of the set form a contiguous IP address range (with no gaps), False otherwise. :return: ``True`` if the ``IPSet`` object is contiguous. r rFr)T)r0r)r3rWrHr-s rÚ iscontiguouszIPSet.iscontiguous½sS€ð—‘Ó!ˆÜ ˆu‹:˜Š>ؘQ‘x ‘{ˆHÛ�ؘ‘7˜hÒ&Ù Ø ™8 a™<‘ððrcóŽ—|j«r+|j«}|syt|dd|dd«Std«‚)zì Generates an IPRange for this IPSet, if all its members form a single contiguous sequence. Raises ``ValueError`` if the set is not contiguous. :return: An ``IPRange`` for all IPs in the IPSet. Nrr)zIPSet is not contiguous)r¹r0rÚ ValueErrorrVs rÚiprangez IPSet.iprangeÍsK€ð × Ñ Ô Ø—O‘OÓ%ˆEÙØÜ˜5 ™8 A™;¨¨b© °"© Ó6Ð 6äÐ6Ó7Ð 7rc#óèK—|j«D�cgc]/}|jj|j|jf‘Œ1}}t |«D]\}}t ||«–—Œycc}w­w)zùGenerate the merged IPRanges for this IPSet. In contrast to self.iprange(), this will work even when the IPSet is not contiguous. Adjacent IPRanges will be merged together, so you get the minimal number of IPRanges. N)r0r r r rr#r)r3r-rr¨r©s rÚ iter_iprangeszIPSet.iter_iprangesÞsnèø€ðGKÇoÁoÔFWó ÙFW¸dˆT�\‰\× !Ñ ! 4§:¡:¨t¯y©yÒ 9ÐFWð ð ô/¨}Ö=‰KˆE�4ܘ% Ó&Ó &ñ>ùò  ùs‚A2•4A-Á )A2)Nr)r).Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__r7r:rCrTrXr\r_rbrgr0rlrnrsrxr|rjr„rŠrŽr’r‘Ú__le__r—r–Ú__ge__r›Ú__or__ruÚ__and__rªÚ__xor__r¬Ú__sub__r±Úpropertyr�r·Ú__str__r¹r¼r¾rrrr%r%Qsþ„ñð *€Ió-ò<Dò òH.òT1ò3òò&!ò6ò #ó +ó@4)òp(ò òó 'òRò "ò "ò ?ò ð€Fò Aò ð€Fò ð€Fò(ðT€Gò>ð@#€Gò1ðf€Gò ðñ8óð8òCð€Gòò 8ó" 'rr%)rÂÚ itertoolsrdÚsysr®Ú netaddr.iprrrrrrrr#Úobjectr%rrrÚrÐs0ðñ 9ãÛç`×`ò%òP`ô6Y 'ˆFõY 'r