Files
archy/core/target/debug/deps/libipnet-5f51989acd5e8999.rmeta
T

473 lines
217 KiB
Plaintext
Raw Normal View History

2026-01-24 22:59:20 +00:00
rust
ź`#rustc 1.93.0 (254b59607 2026-01-19)ÁłVOĐęů˙˛?ŃLĽŹ§Ě±-a7a40eb546f9e2b0Áő…·fĘ ¦%g--c48c539199cbc88bÁá\¦č3$|]ĺŚ[IÚ tć-14b12edc9f8cd90bÁë&Gf·Ă ¬ëńq:¤»b-bb76018b1173caf6ÁĂ 9m Ů„«ĐŇţá•cB;-030c5b0bba47cc8fÁrustc_std_workspace_coreÁŰąţÓ7>H%¸ÚÉ­-4b81d37a5530864dÁüĂůs<Uß7VyóHr#QĎ-c66cc7807550ce25Á miniz_oxideÁőFÖڙދ"ŢXzLVŞ-62cbc7af83058505Áadler2Á—wÉD‘嵯|6¨%Ś
+-2f171dd2394b4b62Á hashbrownÁ,ďcVĽ¨ř˘:Ę\'Čß-9571ba9e0f6c7a90Árustc_std_workspace_allocÁ%ĄČxµů·Ľ5Ä3Bś-aac566ad65903fa4Á
std_detectÁMmáýZ^9ő Îŕ§e÷e-2edb296e590136d8Árustc_demangleÁ@Ľ§VÉNbć¨fHĚ+V3-53b132e4a2fa6e26Ácfg_ifÁfÝvť.Ĺ"ŇÜuPpą-f76b385d7d4d7f3eÁ addr2lineÁŐú-WiúQVÓ¬
µT§Ť5-fe25100bd73e48e4ÁgimliÁąxLáÇí÷‘o±Ń8ŁĹ-265ba9e6e4f70b3fÁobjectÁÔłÝzÓ˙¶ň°öM›Ľňü`-9ae0d1f8ea52a318ÁmemchrÁRÎ÷׎™te~QÓżŘC\Ň-0bff3c8e8f4e489eÁ  –©HŤtGNĎ·!á-d69228d077d46f36ÁserdeÁ,ĹŚŕschemarsÁD˛čT¤Ž¸4‚ŚŢą#!şD”><:8:testsÁ,ť¬ŕ$’¬zŚĐz¸Ś´zą#!zş><:8:zç,Şŕ$ö©§Ś·§ąŚ›§ş$" ¸4H<%,/|%Ś$ąDPşDZ:9879‡ç
ŕ$¸
 ipnet_serdeÁ\É!<±!Ĺ<»!ڱ!ipnet_schemarsÁt÷!<Ü!čTć!¤Ü!łá 
  
ipextÁ 
IpAddÁ&RHSÁ&Ř&˙IpSubÁ*đ
*Ř*IpBitAndÁ.đ
.Ř.ëIpBitOrÁ2đ
2Ř2í ip_add_implÁ ip_sub_implÁip_bitops_implÁIpStepÁ9 replace_oneÁ9 replace_zeroÁ9add_oneÁ9sub_oneÁ>>Č>Ű>éCCČCŰCéHďJďL L count_u64ÁO O
count_u128ÁOcan_count_u128ÁS˝SĄ SĂS¸ SmaxÁSminÁSnthÁS size_hintÁ\˝\Ą \Ă\¸ \ą\Ă\Í\×e˝eĄ eĂe¸ eąeĂeÍe× n next_backÁnnth_backÁ
qăqó tătó 
ipnetÁzzzzzzzzzz z
z z z
zzzzzzzzzzzzzzzzÍzz 
new_assertÁ with_netmaskÁtruncÁaddrÁ
prefix_lenÁmax_prefix_lenÁnetmaskÁhostmaskÁnetworkÁ broadcastÁsupernetÁ
is_siblingÁhostsÁsubnetsÁcontainsÁ« aggregateÁz®>z°Íz˛Íz´ďzďz¸ďz ş şĎşáşőşşŽş şş netmask_u32ÁşĹş hostmask_u32ÁşŐşäşőČ şşş¤şłÍşintervalÁşËĐ z
Ň>z ÔÍz ÖÍz
ŘďzÚ ÚĎÚáÚőÚÚŽÚ ÚÚ netmask_u128ÁÚĹÚ
hostmask_u128ÁÚŐÚäÚőč ÚÚÚ¤ÚłíÚŰÚËđ zň>zôÍzöÍzřďzContainsÁúúłzý'aÁýłzČłzČłzČłzČłzŚČŚłzŹ z zďzďz˝Ą znext_ipv4_subnetÁznext_ipv6_subnetÁzś˝śĄ zź˝źĄ z z!z"zmerge_intervalsÁĄparserÁ§§§§§§§§§§ §
§ §ParserÁ´Č´ö´posÁ§¸Č¸ ¸is_eofÁ¸read_atomicallyÁĽĽ¸
read_till_eofÁżżż ¸read_orÁĂĂ ¸
read_seq_3ÁĆĆĆkĆPAÁĆPBÁĆPCÁĆ ¸ read_charÁ¸read_given_charÁĎ ¸
read_digitÁŃ parse_digitÁŃ Ó ¸read_number_implÁ¸ read_numberÁÖ ¸read_ipv4_addr_implÁŘ Ř ¸read_ipv4_addrÁŰ ¸read_ipv6_addr_implÁÝipv6_addr_from_head_tailÁŢ Ý read_groupsÁŕ ŕ ŕ ă Ý Ý ¸read_ipv6_addrÁç ¸
read_ipv4_netÁé é é ě é ¸
read_ipv6_netÁď ď ď ň ď ¸ read_ip_netÁő ő §řř÷ú §üü÷ţ §÷ §Í§maskÁip_mask_to_prefixÁipv4_mask_to_prefixÁipv6_mask_to_prefixÁŘ˙Ř˙Ř؜؜źŘź˘Ř˘ëĄŘĄí¨Ř¨ë«Ř«í®Ř®ë±Ř±í´Ř´ë·Ř·í IpAddrRangeÁşV4Á»
»ěşV6Áľ
ľěĂČ Ĺ!"ČŐ#ĘĐ$̤ %΢ϵ&ŃÍ
Ipv4AddrRangeÁÓŚÓĎ'()ŘČ*Ú+,ÝŐ-ßĐ.ᤠ/ă˘äµ0ćÍ
Ipv6AddrRangeÁčŚčĎ123íČ4ď56ňŐ7ôĐ8ö¤ 9ř˘ůµ:űÍzIpNetÁýˇ(ţ
ţěý¸(
ěz#z$z%Čz&z'z(Őz)ŤĐz*ʤ z+˘µzIpv4NetÁŽz,z-z.Čz/z0z1žŐz2 Đz3˘¤ z4¤˘ĄµzIpv6NetÁ§§Žz5z6z7¬Čz8®z9z:±Őz;łĐz<µ¤ z=·˘¸µzPrefixLenErrorÁş
z>ĽÍz?ľČz@zAÁŐzBĂz IpSubnetsÁš(Ć
ĆěŸ(É
ÉězCzDzEÎČzFĐzGzHÓŐzIŐĐzJפ zK٢ڵzLÜÍz Ipv4SubnetsÁŢŚŢĎŢmin_prefix_lenÁzMzNzOäČzPćzQzRéŐzSëĐzTí¤ zUď˘đµzVňÍz Ipv6SubnetsÁôŚôĎôç0zWzXzYúČzZüz[z\˙Őz]Đz^¤ z_˘µz`ͧAddrParseErrorÁŠ
Šě§ŤÍ§ŹČ§§ Ő§
:
;
<
=
?
@
A
B
D
E
F
G
N
Q
R
U
Z
[
^
c
d
g
l
m
o
p
r
s
u
v



ź
 
ˇ
˘
Ł
¤
Ą
¦
§
¨
¨
©
Ş
«
­
±
±
±
ł
ł
ł
ľ
ż
Ŕ
Á
Â
Ă
Ä
Ĺ
Ć
Ç
Č
Ę
Ę
Ë
Ě
Í
Ď
Đ
Ő
Ő
Ő
×
×
×
Ţ
ß
ŕ
á
â
ă
ä
ĺ
ć
ç
č
ę
ę
ë
ě
í
ď
đ
ő
ő
ő
÷
÷
÷
ü
˙
˙





Ž

ž
ˇ
»
Ľ
Ľ
Ľ
ż
ż
ż
Ă
Ă
Ă
Ă
Ă
Ă
Ć
Ć
Ć
Ć
Ć
Ć
Ć
Î
Ď
Ń
Ő
Ö
Ř
Ű
Ý
Ţ
Ţ
ŕ
ŕ
ŕ
ç
é
é
é
é
é
é
é
ď
ď
ď
ď
ď
ď
ď
ő
ő
ő
ő
ő
ú
ţ




Ä
Ć
É
É
Ë
Ë
Í
Í
Ď
Ď
Ň
Ň
Ň
Ů
Ű
Ţ
Ţ
ŕ
ŕ
â
â
ä
ä
ç
ç
ç
î
đ
ó
ó
ő
ő
÷
÷
ů
ů
ü
ü
ü


Ś
Ś
Ž
Ž




š
ś
ź
ź
ˇ
ˇ
Ł
Ł
Ą
Ą
­
Ż
˛
˛
´
´


¸
¸
˝
˝
˝
ż
Â
Â
Ä
Ď
Ń
Ô
Ô
Ö
Ö
Ř
Ř
Ú
Ú
Ý
Ý
Ý
ĺ
ç
ę
ę
ě
ě
î
î
đ
đ
ó
ó
ó
ű
ý











Ž
Ž
Ž




&*.29ú&€Ż€ŻąŻoctetsÁ“OÉSU‡ŕfZ&ŽŻŽŻşŹŻ”?“O\däµa*ţ?ţ?*ţ?´@*˝@˝@*˝@í@.ţ?ţ?2ţ?ţ?.ţ?´@2ţ?´@.˝@˝@2˝@˝@.˝@í@2˝@í@9ţ?9˝@ţş»Ľˇ(˝ěľż¸(Ŕě8+ýqÎJ&řá™BŢ™BŁ™B¬â™Bž™B™BĂ™BÉ™B™B»b™Bŕ`™BţÓÓ¶)ÔŚŐĎ*5Aš|ŤĂáČCŢČCŁČC¬âČCžČCČCĂČCÉČCČC»bČCŕ`ČCţččÂ*éŚęĎ=_,±9Ę1#áçDŢçDŁçD¬âçDžçDçDĂçDÉçDçD»bçDŕ`çDú™BČCú™BçDŢK™BŢKČCŢKçDňJ™BňJČCňJçDÖN™BÖNČCÖNçDţýţ˙ˇ(ě¸(ěôÖĄ?µTáúFŢúFŁúF¬âúFžúFúFĂúFÉúFúF»búFţŕ,zŽz´÷”óJńnáźHŢźHŁźH¬âźHžźHźHĂźHÉźHźH»bźHţ§§Ú-¨z©Žzy?ť<tŘ÷á´IŢ´IŁ´I¬â´Iž´I´IĂ´IÉ´I´I»b´Iŕ`şş»Ô. „ÍWb„Q ¤ŢÉJ¬âÉJžÉJÉJŁÉJĺ`ÉJĎÉJÄúFŕ`úFĺ`úFúúFźHúúF´IúúFé®ę®ë®ˇ(ě®ěí®î®¸(ď®ěkT(/-hÄźHŕ`źHĺ`źHúźHţ?Ä´Iŕ`´Iĺ`´Iú´I˝@úúF ČúFúúF ČđKúźH ČźHúźH Čţ?ú´I Č´Iú´I Č˝@ţĹĆǡ(ČěÉʸ(Ëěž$• Ü˙Üá“NŢ“NŁ“N¬â“Nž“N“NĂ“NÉ“N“N»b“Nŕ`“NţŢŢÄ0ߌzŕĎzáç0zF Ž˘Đ?6áÂOŢÂOŁÂO¬âÂOžÂOÂOĂÂOÉÂOÂO»bÂOŕ`ÂOţôôä1őŚzöĎz÷ç0zw+ĹUdiáěPŢěPŁěP¬âěPžěPěPĂěPÉěPěP»běPŕ`ěPú“NÂOú“NěPŢK“NŢKÂOŢKěPÖN“NÖNÂOÖNěPÔvúFÔvźHÔv´Iŕ`ŠŠ÷2Śě§ \Ł „]×vŢŠS¬âŠSžŠSŠSŁŠSĺ`ŠSĎŠS€ŻŽŻ€Ż€ŻśŽŻźŽŻ˘€Ż¨€Ż®ŽŻ

T®-  /
6ś—-
Ü
B 4 X »,ˇ(ţ?üË," ß,Tâ,/
6śË,
ĽB4X ě,üÁ,-
ý í, ¸- 
üŤ--
ý ą- Ë-ťüŇ+ůü°,>üü,> úF,‰,đKę+Tö+l°,ţ?HźH3ţ?2¤a'˝@á´IĚ˝@ˤaŔipÁ`Žd¨–a-şü­›F|°›T°› ˝› ¤a9 ľ›tŮ› 
şśŐ›
ęłźHÉJ ç› ň› ˛śeó› 4:ü˙›,Źś  Tźś

2
 
Şś
  üü›0
ęłźHÉJ «ś±ş»üŃšá ęłíłîłŇďłěđłńłňłěäs{©¶źHÉJüţ?⚤aTđš‡dôń¤ađüŔ›3ÉJ»źHBţ?@¤a4ú`XŽ[Űř=…ĄT„ŤĄTŤĄ ›Ą ¤a9 śĄ=ŮĄ ‡d=ŘĄ
óĄ T¦ üăĄ,
 ަ •¦ŠńAÍ#
ÁAÍ#
łUüźĄ97 <Ľüş¤Ű źH<ó¤ţ?Ҥ¤aTइdXT¤aSŚţ?ö¤aéú`BŽEsLúŻţ?‰°żüËŻ>ţ?DçŻ źH,ÝŻ 2|ď°¤a„±ŔüŔ°D¤aâ°ýj,ذ /ü±  ¤a„˛Áüɱ;¤aď±ýj,ĺ± /ü‹ůG„ŽůTŽů ›ů€¤a9 ťůt¸ů 
şś´ů
ęł´IÉJ Ćů Ńů ‘úeŇů ‡d4:üŢů,îů  Tţů

2
§ 
‰ú
  üŰů0
ęł´IÉJ Šú±şŰüŻřâ ęłíłîłŇďłěđłńłňłěäs{©¶´IÉJüář˝@Ŕř¤aTÎř‡dôń¤ađüźů3ÉJ»´IB˝@@¤a4ú`XŽ[ŰřD Vڍ €¤a9 ¸ ‡d
 T „ ü€„,
§ «„ ˛„ŠńGÍ#
ÁGÍ#iü»:8Şi
7ÜüŐ‚Ý ´I˝@키aTű‚‡dSO¤aN˝@ń¤aäú`BŽEsL莽@÷ŽßüąŽ>˝@DŐŽ ´I,ËŽ 2|ÝŹ¤aňŹŕü®ŹD¤aĐŹŞu,ĆŹ /î €¤a÷áü»<¤aáŞu /ŁwŁwŁwŁw÷F
şĽ%™B0ČC7>ŽG
şż%™B0çD7>

ý˙%úF0źH7>

ý%úF0´I7>€đ
ĹÇ&“N1ÂO8?•đ
ĹĘ&“N1ěP8?Ě‘U
Š%ŠS0‡d7>ł˘áä
&*©.Í2 Ž(\ôş
¶)lÓ Â*lč Î+,¶ýŕ,<˝Ú-<ƧÔ.tĎşÔ.»˘/LßĹÄ0\ęŢä1\÷ô÷2t› Ѝ%ŚŔ ŤÁ%śÓ ŽÜ%śč Źü†"ˇ  58ąl 7https://docs.rs/ipnet/2.11.0Áôü7ü8.+ Types for IPv4 and IPv6 network addresses.ÁgËükGD This module provides types and useful methods for working with IPv4ÁüłDA and IPv6 network addresses, commonly called IP prefixes. The newÁüřGD [`IpNet`], [`Ipv4Net`], and [`Ipv6Net`] types build on the existingÁüŔHE [`IpAddr`], [`Ipv4Addr`], and [`Ipv6Addr`] types already provided inÁü‰=: Rust's standard library and align to their design to stayÁ consistent.Á$× ÁüÜDA The module also provides the [`IpSubnets`], [`Ipv4Subnets`], andÁüˇEB [`Ipv6Subnets`] types for iterating over the subnets contained inÁüçDA an IP address range. The [`IpAddrRange`], [`Ipv4AddrRange`], andÁü¬GD [`Ipv6AddrRange`] types for iterating over IP addresses in a range.ÁüôEB And traits that extend `Ipv4Addr` and `Ipv6Addr` with methods forÁüşFC addition, subtraction, bitwise-and, and bitwise-or operations thatÁü+( are missing in Rust's standard library.Á­Ëü±GD The module only uses stable features so it is guaranteed to compileÁüů using the stable toolchain.ÁË”ť # OrganizationÁ°Ëü´FC * [`IpNet`] represents an IP network address, either IPv4 or IPv6.ÁüűHE * [`Ipv4Net`] and [`Ipv6Net`] are respectively IPv4 and IPv6 networkÁ„Ä
addresses.ÁüŐ GD * [`IpSubnets`], [`Ipv4Subnets`], and [`Ipv6Subnets`] are iteratorsÁüť
HE that generate the smallest set of IP network addresses bound by anÁüć
FC IP address range and minimum prefix length. These can be createdÁü­ =: using their constructors. They are also returned by theÁüë HE [`subnets()`] methods and used within the [`aggregate()`] methods.Áü´ C@ * [`IpAddrRange`], [`Ipv4AddrRange`], and [`Ipv6AddrRange`] areÁüř FC iterators that generate IP addresses. These can be created usingÁüż
C@ their constructors. They are also returned by the [`hosts()`]Át methods.Áü’GD * The [`IpAdd`], [`IpSub`], [`IpBitAnd`], [`IpBitOr`] traits extendÁüÚEB the [`Ipv4Addr`] and [`Ipv6Addr`] types with methods to performÁĽ  these operations.Á¸ËôĽ [`IpNet`]: enum.IpNet.htmlÁüŰ$! [`Ipv4Net`]: struct.Ipv4Net.htmlÁü€$! [`Ipv6Net`]: struct.Ipv6Net.htmlÁüĄB? [`IpAddr`]: https://doc.rust-lang.org/std/net/enum.IpAddr.htmlÁüčHE [`Ipv4Addr`]: https://doc.rust-lang.org/std/net/struct.Ipv4Addr.htmlÁü±HE [`Ipv6Addr`]: https://doc.rust-lang.org/std/net/struct.Ipv6Addr.htmlÁüú&# [`IpSubnets`]: enum.IpSubnets.htmlÁüˇ,) [`Ipv4Subnets`]: struct.Ipv4Subnets.htmlÁüÎ,) [`Ipv6Subnets`]: struct.Ipv6Subnets.htmlÁüű1. [`subnets()`]: enum.IpNet.html#method.subnetsÁü­52 [`aggregate()`]: enum.IpNet.html#method.aggregateÁüă*' [`IpAddrRange`]: enum.IpAddrRange.htmlÁüŽ0- [`Ipv4AddrRange`]: struct.Ipv4AddrRange.htmlÁüż0- [`Ipv6AddrRange`]: struct.Ipv6AddrRange.htmlÁüđ-* [`hosts()`]: enum.IpNet.html#method.hostsÁüž [`IpAdd`]: trait.IpAdd.htmlÁüľ [`IpSub`]: trait.IpSub.htmlÁüŢ%" [`IpBitAnd`]: trait.IpBitAnd.htmlÁü„# [`IpBitOr`]: trait.IpBitOr.htmlÁ¨Ëś¬ # Serde supportÁŔËüÄEB This library comes with support for [serde](https://serde.rs) butÁüŠEB it's not enabled by default. Use the `serde` [feature] to enable.Á‚ ```tomlÁ”á [dependencies]Áüô30 ipnet = { version = "2", features = ["serde"] }Á ```Á°Ëü´FC For human readable formats (e.g. JSON) the `IpNet`, `Ipv4Net`, andÁüű>; `Ipv6Net` types will serialize to their `Display` strings.Á‚üż?< For compact binary formats (e.g. Bincode) the `Ipv4Net` andÁü˙EB `Ipv6Net` types will serialize to a string of 5 and 17 bytes thatÁüĹA> consist of the network address octects followed by the prefixÁü‡HE length. The `IpNet` type will serialize to an Enum with the V4 or V6ÁüĐ?< variant index prepending the above string of 5 or 17 bytes.ÁËü”[X [feature]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-sectionÁł_`á_ä
^&]*©\.Í[2 Ž(Zş
¶)YÓ Â*Xč Î+Wýŕ,VÚ-U§Ô.TşÔ.d»˘/TĹÄ0SŢä1Rô÷2QЍ%P ŤÁ%O ŽÜ%N Ź˝ŔĂ„•ş”ĹŻüĹYĄ¨žŠ}rugjü¨[adVYKN@C$'äŤ üł Iţóöčë,!&*.29şÓčLessÁ$ýŐ¤ţŐ,€ÖÖŁÖNŚś°ňJ memÁĐŐ!¸é®#ą€Ż$şŽŻ%üě"Ëͦ¨ü”0xzLĘjü»&^`NP>@Üł
üäGD Provides a `saturating_add()` method for `Ipv4Addr` and `Ipv6Addr`.Á¬Ëü°GD Adding an integer to an IP address returns the modified IP address.ÁüřEB A `u32` may added to an IPv4 address and a `u128` may be added toÁ¤ľ an IPv6 address.ÁÓËt× # ExamplesÁćËÓšüň" # #[cfg(not(feature = "std"))]Áü•*' # use core::net::{Ipv4Addr, Ipv6Addr};ÁěŔ # #[cfg(feature = "std")]ÁüŢ'$ use std::net::{Ipv4Addr, Ipv6Addr};Á¬† use ipnet::IpAdd;ÁśËü 74 let ip0: Ipv4Addr = "192.168.0.0".parse().unwrap();ÁüŘ74 let ip1: Ipv4Addr = "192.168.0.5".parse().unwrap();Áü;8 let ip2: Ipv4Addr = "255.255.255.254".parse().unwrap();ÁüĚ;8 let max: Ipv4Addr = "255.255.255.255".parse().unwrap();Á ËüŚ +( assert_eq!(ip0.saturating_add(5), ip1);Áü¸ +( assert_eq!(ip2.saturating_add(1), max);Áüä +( assert_eq!(ip2.saturating_add(5), max);Á
Ëü”
2/ let ip0: Ipv6Addr = "fd00::".parse().unwrap();矂
30 let ip1: Ipv6Addr = "fd00::5".parse().unwrap();Áüű
SP let ip2: Ipv6Addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe".parse().unwrap();ÁüĎ SP let max: Ipv6Addr = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff".parse().unwrap();ÁŁ Ëü§ +ɬüÓ +ý¬ü˙ +±­
Óš
&đ
''&Şâüł
g©âđ
&ü±+ü±1()()©â„˛—˛(
²)JĂ
„˛

&&üć
2
„˛—˛ʲ&&
)„˛—˛
rhsÁţ
Ü®üśGD Provides a `saturating_sub()` method for `Ipv4Addr` and `Ipv6Addr`.ÁäËüčEB Subtracting an integer from an IP address returns the modified IPÁü®HE address. A `u32` may be subtracted from an IPv4 address and a `u128`Áü÷+( may be subtracted from an IPv6 address.ÁŁËü§FC Subtracting an IP address from another IP address of the same typeÁüîGD returns an integer of the appropriate width. A `u32` for IPv4 and aÁü¶C@ `u128` for IPv6. Subtracting IP addresses is useful for gettingÁüú'$ the range between two IP addresses.Á˘Ë­¨µËÓšüÁ"ۨüä*†©ěʏ©ü­'Ţ©¬Ő use ipnet::IpSub;ÁëËüď30 let min: Ipv4Addr = "0.0.0.0".parse().unwrap();ÁüŁ74 let ip1: Ipv4Addr = "192.168.1.5".parse().unwrap();ÁüŰ96 let ip2: Ipv4Addr = "192.168.1.100".parse().unwrap();ÁËü™+( assert_eq!(min.saturating_sub(ip1), 0);ÁüĹ,) assert_eq!(ip2.saturating_sub(ip1), 95);Áüň+( assert_eq!(min.saturating_sub(5), min);Áüž,) assert_eq!(ip2.saturating_sub(95), ip1);Á‚üĐ.+ let min: Ipv6Addr = "::".parse().unwrap();Áü˙3«®üł41 let ip2: Ipv6Addr = "fd00::64".parse().unwrap();ÁčËüě+şü,ĚşüĹ/, assert_eq!(min.saturating_sub(5u128), min);Áüő0- assert_eq!(ip2.saturating_sub(95u128), ip1);ÁÓš,¸*đ
+*+ü±ü®gʞ*ü± ü±&,-,-©â„˛—˛,éż-Jľ„˛**üá2„˛—˛ńż**
-„˛—˛۲ůôĘ ü—?< Provides a `bitand()` method for `Ipv4Addr` and `Ipv6Addr`.Á×Ë­¨ęËÓšüö"ۨü™*†©ěĸ©üâ'ީĊ use ipnet::IpBitAnd;ÁŁËü§63 let ip: Ipv4Addr = "192.168.1.1".parse().unwrap();ÁüŢ85 let mask: Ipv4Addr = "255.255.0.0".parse().unwrap();Áü—74 let res: Ipv4Addr = "192.168.0.0".parse().unwrap();ÁĎËüÓ%" assert_eq!(ip.bitand(mask), res);Áüů+( assert_eq!(ip.bitand(0xffff0000), res);Á‚üŞ74 let ip: Ipv6Addr = "fd00:1234::1".parse().unwrap();Áüâ30 let mask: Ipv6Addr = "ffff::".parse().unwrap();Áü–2/ let res: Ipv6Addr = "fd00::".parse().unwrap();ÁÉËüÍ%¶ĂüóNK assert_eq!(ip.bitand(0xffff_0000_0000_0000_0000_0000_0000_0000u128), res);ÁÓš.đ
/./ü±üĘ bʞ.ü± ü±&0101©â„˛—˛0¦Č1JÝ „˛..ü€!*4!„˛—˛®Č..
1„˛—˛$Š!۲!ěĘ'ü®!>; Provides a `bitor()` method for `Ipv4Addr` and `Ipv6Addr`.Áí!Ëtń!­¨€"Ë<„"ÓšüŚ""ۨüŻ"*†©ěÚ"¸©üř"'Ţ©Ľ # use ipnet::IpBitOr;Á¸#ËüĽ#30 let ip: Ipv4Addr = "10.1.1.1".parse().unwrap();Áüđ#63 let mask: Ipv4Addr = "0.0.0.255".parse().unwrap();Áü§$63 let res: Ipv4Addr = "10.1.1.255".parse().unwrap();ÁŢ$Ëüâ$$! assert_eq!(ip.bitor(mask), res);Áü‡%*' assert_eq!(ip.bitor(0x000000ff), res);Á$˛%‚ü·%2/ let ip: Ipv6Addr = "fd00::1".parse().unwrap();Áüę%85 let mask: Ipv6Addr = "::ffff:ffff".parse().unwrap();ÁüŁ&;8 let res: Ipv6Addr = "fd00::ffff:ffff".parse().unwrap();Áß&Ëüă&$ëËü'96 assert_eq!(ip.bitor(u128::from(0xffffffffu32)), re
8$)8ä
,‡) Ś), Ť)8۲Ž) )8
“), —)8Á ) ś) ©+
8!$Ş)8Ř4Ż) ¶), ¸)8ďŃ4ą)% ż)8 Î)8˙tŃ) ß) ď)8$ŕ)$ ä)8۲ć)& é), ë)8۲ě)(ń), ô)8ďŃ4ő) ü) ź+8Ž*8Á *& •*, —*8 Ň,* ž*8$ * ¤*8intoÁ$Ą* ©* Ş*% «*8˝*8۲Á*& Ä*, Ć*8 Ň,Ç* Í*8۲Ď* Ň*8˛Ő$Ó* ×* Ř*% Ů* ë* Š+8Á ě* ď*8˙tđ* ţ* ‰+8۲˙* ‚+8˛Ő$+ ‡+ + +8˛Ő$Ś+ + +Ä´+\Á+ Í+ ą. Ó+ ű+, Ô+8Á Ő+& Ř+8Ů+$ Ű+, Ý+8۲Ţ+& á+8â+$ ä+, ć+8ďŃ4ç+& í+8î+$ đ+, ň+8 Ň,ó+& ř+8ů+*ý+ €, ·.
8$Š,8,Ź, ”,, •,8۲, ™,8
,, ź,8Á  , ¤, ±.
8!$˛,8Ř4·, ľ,, Ŕ,8ďŃ4Á,% Ç,8 Ö,8tŮ, ç, ÷,8$č,$ ě,8۲î,& ń,, ó,8۲ô,(ů,, ü,8ďŃ4ý, „- §.8-8Á š-& ť-, ź-8 Ň, - ¦-8$¨- ¬-8˛Ő$­- ±- ˛-% ł-8Ĺ-8۲É-& Ě-, Î-8 Ň,Ď- Ő-8۲×- Ú-8˛Ő$Ű- ß- ŕ-% á- ó- .8Á ô- ÷-8tř- †. .8۲‡. Š.8˛Ő$. Ź. . “.8˛Ő$”. . ™.ÜĚ0tŮ0 č0 ą5 î0 Ť1, ď0 đ0 1 ń0 ‰1, ň08Á ó0& ö08÷0$ ů0, ű08۲ü0& ˙08€1$ 1, „18 …1& †18‡1$ Š1
Ś1*Ź1 1 ·5, 1 ™1 °58$Ł18©D¨1 °1, ±18۲˛1 µ18
·1, »18Á Ľ1 Ŕ1 ˘3
8!$Î18Ř4Ó1 Ú1, Ü18Á Ý1% ŕ18 ď18ë4ň1 ř1 28$ů1$ ý18۲˙1& 2, „28۲…2(Š2, Ť28Á Ž2 2 38¤28Á ¨2& «2, ­28¨ß ®2 °28$˛2 ¶28˛Ő$·2 »2 Ľ2% ˝28Ď28۲Ó2& Ö2, Ř28¨ß Ů2 Ű28۲Ý2 ŕ28˛Ő$á2 ĺ2 ć2% ç2 ů2 38Á ú2 ţ28۲€3 „38˛Ő$…3 ‰3 Š38$­38Í<˛3 ą3, ş38۲»3 ľ38
Ŕ3, Ä38Á Ĺ3 É3 Ş5
8!$×38Ř4Ü3 ă3, ĺ38Á ć3% é38 ř38í,ű3 €4 48$4$ …48۲‡4& Š4, Ś48۲Ť4(4, •48Á 4 š4  58¬48Á °4& ł4, µ48¨ß ¶4 ¸48$ş4 ľ48˛Ő$ż4 Ă4 Ä4% Ĺ48×48۲Ű4& Ţ4, ŕ48¨ß á4 ă48۲ĺ4 č48˛Ő$é4 í4 î4% ď4 5 58Á 5 †58۲5 Ś58˛Ő$Ť5 5 5
±5„ę74ô799ü±üę7ˇ9ü±ü±:;<=:;<==<:;ü8"\„8 „˛„˛9 89
:„˛$•8ü¨8#d«8 „˛„˛9 ¸89
;„˛$˝8ÔĐ8<Ó8 „˛„˛9 Ű89
<„˛$Ü8Ôď8<ň8 „˛„˛9 ú89
=„˛$ű8ÄŤ9ţ??@AB:;<=B@A?ü¬9!\Ż9š šţ?ţ?> »9>
?$Ŕ9ü:"d“: ţ?ţ?>  :>
@$Ą:Ěő:<ř:ś śţ?ţ?> €;>
A$;Ěş;<˝;ť ťţ?ţ?> Ĺ;>
B$Ć;Äţ;˝@DEFG:;<=DFGEüť<!\ <ž ž˝@˝@C ¬<C
D$±<üŤ="d=ź ź˝@˝@C ť=C
E$˘=Ěţ=<>   ˝@˝@C ‰>C
F$Š>ĚĂ><Ć>ˇ ˇ˝@˝@C Î>C
G$Ď>üĎR(™BIüIüţR($SČC™BHH
I» †SüÍS(™BKüKüüS($˙SçD™BJJ
K» „T”ËTČCMNüäT2ëTţ?ţ?ČCLL
MŚ,ďTĎ€UÔÜVLßV˘ ˘ČCL éVL
N$ęV”¸YçDPQRüŃY2ŘY˝@˝@çDOO
PŚ,ÜYĎíYäě[Tď[Ł ŁçDí@O ú[O
Q$ű[üä^ tç^¤ ¤çDO ö^O
R$÷^ě±`™BTUVWXYZ[ßKŕKĺKçKM—MôKäKXVZ[YWULŐ`$Ú`SSđKüî`($ń`Ą Ą™Bř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>™BßKS ö`S
U$ű`ĽĚb,Ďb™BŁwSS
V$Őbüęc#$íc
¤aT›§´´ŁwśŞČąąę›ş»ĽżĂĆÎĎŃŐÖŘŰÝçéďőŻüÄ Ç§ Č꛸¸
şČö ËÄľ§ ꛸ ȸ
»ČüŻj§ ę›ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>ß„¸˝ľľ˝ ȸׄ ©⾟ ĹŠľź ´´Ëö§·é§źm]權üř Šľźě Ăź
ĽČß„ľźcbÁÓĂĹżÁüŐ h§Ž Žę›ľźĂź¸ŔÁŔÁ ě ¸ׄ ć Ć  é ŚŤľź Ś´´Ëö§·é§źm]欍üś
ŚŤľź˛ŁĂź

żČß„ľźü ÷ ą»ľŔ
ż’›Â«›ÂÉ›ÂÂżÂß„ľź ´´Ëö§·é§źm]ć¬Ăźľźü¸ x § ę› 
ăěšílŐ°Ů[˘'ő ´´Ëö§·é§źm]欰§ĂźťóĂź¸ÄÄ Ć ¸ׄ Ă 
ĂČß„ parsersÁ<Ń )+Ă’›Ĺ«›ĹÉ›ĹĹĂĹ߄¥  ăěšílŐ°Ů[˘'ő°§°§ĂźťóüŹT’§ ę›° ş Ä ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>  k¸Ç  Čkɰ Ęş ËÄ ĚČÉÇËĚĘ ˛¸ ©âă« ť©âč«  ©âí« Ł©âŽ«¦©â“«Ş©â«®Ž« ´´Ëö§·é§źm]ć¬ü Ž«Ű­ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>ă«“« ´´Ëö§·é§źm]ć¬üĆ “«©Żř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>諚« ´´Ëö§·é§źm]欚üô š«÷°ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>í«L
ĆČă«č«í«Ž«“««paÁäpbÁpcÁ   
Ć’›Í«›ÍÉ›Í Í ĆÍ
ă«č«í«Ž«“««ÉĄť«Ž«“««ü‰'§ś śę›ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>¸ ¸
ÎČ$›üĄ6§ť ťę›ʵ¸ ¸¸
ĎČŠ ĂűĎ’›Đ«›ĐÉ›ĐĐĎĐÉĄʵ ü«1§ž žę›¤ař°ú°ű°Đü°ý°Źţ°ěHŹËXęE>¤a¸ ą¸
ŃČradixÁ,Äüç0§¤a„¸
ŇŠ öó·íŃ’›Ó«›ÓÉ›ÓÓŃÓÉĄ„¸ ¤aŃ’›Ô«›ÔÉ›ÔÔŃÔ„¸­şüÇT„Ę§ź źę›¤a´@´@ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>´@¸ ۸
ŐČó·
max_digitsÁTńuptoÁ$üŇ$O\Ő$§   ę›¤a´@´@Ô»¸ á$¸
ÖČ$ć$ó·,ě$Ě»T÷$Ţ»$%Á%Ö’›×«›×É›××Ö×ÉĄÔ»Żş ´@Óľüý%5ś€&§ˇ ˇę›ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>ţ?¸ ”&¸
ŘČ$™& Î&ŘŘŁwĄ(Ř’›Ú«›ÚÉ›ÚÚŘÚ´@¤a‡düˇ*0t¤*§˘ ˘ę›Žż¸ ł*¸
ŰČ$¸*ń*Ű’›Ü«›ÜÉ›ÜÜŰÜÉĄŽż‡dü™+5śś+§Ł Łę›ř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>˝@¸ °+¸
ÝČ$µ+üŮ+CÄÜ+§¤Ą ¤
 ĄÄ˝@ ű+
ŢheadÁ$ő+tailÁ$, ď,ŢŢŁwüÉ.k\Ě.§¦§¨ ¦´´Ëö§·é§źm]欧 ¨ŁwŁwŁw Ű.
ŕ Ř.groupsÁ4č.limitÁ,˙. ű.ŁwÄ0ŕ’›â«›âÉ›ââŕâŞÂ ŁwÓ5ŕ’›ă«›ăÉ›ăăŕăÉĄř°ú°ű°Đü°ý°Źţ°ěHŹËXęE>źÇ×6ŕ’›ä«›äÉ›ääŕäęŔ‡d ¸9ÝÝŁw ý=ÝÝŁwüĄ?0t¨?§© ©ę›đ¸ ·?¸