rust &#rustc 1.81.0 (eeb90cda1 2024-09-04) œm̫Ų޳<-0f9bda72675979e42vKfw-d8cea91d43634f65Yi1-b1f27438890f45b3rustc_std_workspace_core谼n&,5wtEC-a22427de72ab3630j{!1e'-3d4e98832b983b89A~mf\e`B-4484e05b7089b5ef]XX2_jr-85a6d450f72e1aabcfg_ifмɊra-cf81a5498b42604d miniz_oxideu/#y, -a1543c9c7e6c02bbadlerѹQpC@-7efc4608b0bc96f7 hashbrownb]Ұ.1zPd~-44fc4705e85ac7carustc_std_workspace_alloca+^SΗ%B&-f11d6ba5d61218f4 std_detect"d&+Olb-bd30e1a2296ebf34rustc_demangle{ `*2{-6e14ac007075e94c addr2lineNc:bYǛ-12c2628c83917178gimli}:O^-34000eb5b4402af9objectLL7# 7-79130ad3ad7802b2memchr} wC,-81f43cdd1f7d7095 w9͟IBj6N-51773ba94f264ce4 RNnw\&^M-644886cce80d4776 proc_macro2rg&^>U-6dda14aea4300cb8 unicode_identM~rD3)-3cb01d1e297c2d6e  \5  \  extTokenStreamExt append U  append_allI append_separated   append_terminated            private!!Sealed!% format_ident%format_ident_implident_fragment(((((( IdentFragment..span(11 1(55 5(9 9(<< <(ident_fragment_display to_tokensAAAAAAAAAA A A A A AAToTokensQ Qto_token_streamQinto_token_streamAU'aUU AYYY A]]] Aaa Add Agg Aj Al An A p A r A t A v A x Az A| A~ A A A A A A A A A A A A A A A  __private      DelimiterSpan HasIterator ThereIsNoIteratorInRepetition  RepIteratorExtquote_into_iterRepToTokensExt RepAsIteratorExt'qIter   get_spanGetSpan  GetSpanInner  GetSpanBase  __into_span push_grouppush_group_spannedparse parse_spanned respan_token_tree  push_identpush_ident_spanned push_lifetimeLifetime   push_lifetime_spanned     push_punctpush_underscorepush_underscore_spannedmk_identident_maybe_raw     spannedSpanned__span    join_spans     __quote__quote_spannedpounded_var_namespounded_var_names_with_contextpounded_var_with_contextquote_bind_into_iterquote_bind_next_or_breakquote_each_tokenquote_each_token_spannedquote_tokens_with_context!quote_tokens_with_context_spannedquote_token_with_context quote_token_with_context_spanned quote_tokenquote_token_spanned(((((( ( ( ( (  RepInterp  push_addpush_add_spanned push_add_eqpush_add_eq_spannedpush_andpush_and_spanned push_and_andpush_and_and_spanned push_and_eqpush_and_eq_spannedpush_atpush_at_spanned push_bangpush_bang_spanned push_caretpush_caret_spanned push_caret_eqpush_caret_eq_spanned push_colonpush_colon_spanned push_colon2push_colon2_spanned push_commapush_comma_spannedpush_divpush_div_spanned push_div_eqpush_div_eq_spannedpush_dotpush_dot_spanned push_dot2push_dot2_spanned push_dot3push_dot3_spannedpush_dot_dot_eqpush_dot_dot_eq_spannedpush_eqpush_eq_spanned push_eq_eqpush_eq_eq_spannedpush_gepush_ge_spannedpush_gtpush_gt_spannedpush_lepush_le_spannedpush_ltpush_lt_spanned push_mul_eqpush_mul_eq_spannedpush_nepush_ne_spannedpush_orpush_or_spanned push_or_eqpush_or_eq_spanned push_or_orpush_or_or_spanned push_poundpush_pound_spanned push_questionpush_question_spanned push_rarrowpush_rarrow_spanned push_larrowpush_larrow_spannedpush_rempush_rem_spanned push_rem_eqpush_rem_eq_spannedpush_fat_arrowpush_fat_arrow_spanned push_semipush_semi_spannedpush_shlpush_shl_spanned push_shl_eqpush_shl_eq_spannedpush_shrpush_shr_spanned push_shr_eqpush_shr_eq_spanned push_starpush_star_spannedpush_subpush_sub_spanned push_sub_eqpush_sub_eq_spannedIdentFragmentAdapter   quote_spanned 77777777/7/7/70717374747475777878787:7;7;7;7<7>7?7?7?7R7R7S7X7X7\7\7`7`7c7c7f7f7i7i7k7k7m7m7o7o7q7q7s7s7u7u7w7w7y7y7{7{7}7}7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777Q .# inner_markerءh#E. 7. 7E.IdentDDʥ㒉.BorrowedOwned7E...===,.......Q EQ EQEEEQBoxlޥb:::Global CQ''' &'phantom&'&ۣIIQIQQGQQQQQQQGQGQGQGQGQGQQQQQkD)Q<<CString<D%٦QGroupD҅3QEQPunctchspacing 4QLiteralDDGQLDLMѳ㩣QE ͂⒓גO ŕǮOOOOOII  P E888buf383鸓EIe̒EI% עبсE% עبсIRCRQR I Ѡ׊IC  ˍ󙿄kC   5 皨˩IUTUTUTUTUTUDDٛڪĽf DelimSpanDDлԳԧ+IVVId'gY zjrx <pd  x, r6xrr$ x| 4 s3 # ? Ts\ z, t rIxs \ܧL Rq$/4 S^E\q,ET]]"tokens,k||E$| Sq' sTE\q$q@~qpquD ԛL RE&4XY]r,]4]gr"|&PD  ԴL-4\Y]v,]4]brv )|-WDx,L54`Y]z,]4]br"|&PxD  Unique D⛐ͬI Ƀ؛I IL RI4cY] H,]4]j IH$,5|9fD I,"L<4fY] I,]4]f#|'T$ < IL 4i,] J,]4K]*|.t~| XOSqO|q$ 0T qBqlq, o XOeqOĒq, 0, /( P,'}PO  PDލ G,  /(1 }ƍ  PDލvC\$ eE$4 XOd]]] \] end_or_len\]D\ɚąլCEO QDȏ\  Q$ "'$ ȏ"4   XO d  QD@ȏ\"$" EI$"4"" XO"!dЈuEO! QD!ӓi4#E#|# E/#$#fEO# RD#r~C( %I I*2( % I %+R6 R@I}Xb4(Id( I((;JL(R$(IZ34)Il)$) CI.4)))FIC) RL) I4*I*L*(4**+*W]*֖,*]4*]e#|'R+ I+ I+( I++ZST+I$+Sc čI Jkt. Ѡ׊V čVV/.GV$. V$. [T/ čVV/$0 ^400/KV$/  Ѡ׊V,/ Vi !D  !  L !* (internal error: entered unreachable code(( >_0EI 1 ,06<2S22@ Sl2 S,2 2<343@ޡl3,3 .(:vI%-(:v I:v+U6 U@IxXb4wIlw$w 0I,4www@pdw,wm5uDK This crate provides the [`quote!`] macro for turning Rust syntax tree dataN' structures into tokens of source code.* [`quote!`]: macro.quote.html G Procedural macros in Rust receive a stream of tokens as input, executeJM arbitrary Rust code to determine how to manipulate those tokens, and producePM a stream of tokens to hand back to the compiler to compile into the caller'sPJ crate. Quasi-quoting is a solution to one piece of that — producingM" tokens to return to the compiler.%K The idea of quasi-quoting is that we write *code* that we treat as *data*.NI Within the `quote!` macro, we can write what looks like code to our textLG editor or IDE. We get all the benefits of the editor's brace matching, JL syntax highlighting, indentation, and maybe autocompletion. But rather than OM compiling that as code into the current crate, we can treat it as data, pass PL it around, mutate it, and eventually hand it back to the compiler as tokens O* to compile into the macro caller's crate. - C This crate is motivated by the procedural macro use case, but is a FM general-purpose Rust quasi-quoting library and is not specific to procedural P macros.\   ```toml\  [dependencies]  quote = "1.0"  ```<  D   # Examplel  L The following quasi-quoted block of code is something you might find in [a]OL procedural macro having to do with data structure serialization. The `#var`OK syntax performs interpolation of runtime variables into the quoted tokens.NJ Check out the documentation of the [`quote!`] macro for more detail aboutMI the syntax. See also the [`quote_spanned!`] macro which is important forL) implementing hygienic procedural macros., [a]: https://serde.rs/Խ- [`quote_spanned!`]: macro.quote_spanned.html0< # use quote::quote; #, # let generics = "";ij # let where_clause = ""; # let field_ty = ""; # let item_ty = ""; # let path = ""; # let value = "";, let tokens = quote! {3 struct SerializeWith #generics #where_clause {6 value: &'a #field_ty,!6 phantom: core::marker::PhantomData<#item_ty>,9 }LP impl #generics serde::Serialize for SerializeWith #generics #where_clause {SI fn serialize(&self, serializer: S) -> ResultL where" S: serde::Serializer,% {l* #path(self.value, serializer)- }lL SerializeWith { value: #value,8 phantom: core::marker::PhantomData::<#item_ty>,;L };4<D # Non-macro code generatorsL When using `quote` in a build.rs or main.rs and writing the output out to aOA file, consider having the code generator pass the tokens throughDL [prettyplease] before writing. This way if an error occurs in the generatedO5 code it is convenient for a human to read and debug.88 [prettyplease]: https://github.com/dtolnay/prettyplease;   l https://docs.rs/quote/1.0.377%(A   & '   .Q!!"""""####$$ 5IXORI>< !D Q$+\7 TokenTreeLD |TTD)%X;=$&)? TokenStream extension trait with methods for appending tokens.QBM This trait is sealed and cannot be implemented outside of the `quote` crate.Pt  #q| #  G' For use by `ToTokens` implementations.*4 Appends the token specified to this list of tokens.747 7qf]     f fN| qf$],.0b*<0 # use quote::{quote, TokenStreamExt, ToTokens};3 # use proc_macro2::TokenStream;#, struct X;l impl ToTokens for X {̠4 fn to_tokens(&self, tokens: &mut TokenStream) {7+ tokens.append_all(&[true, false]);.L }, let tokens = quote!(#X);. assert_eq!(tokens.to_string(), "true false");1<T7 7q ]     BdQBD q$$CE *F Appends all of the items in the iterator `I`, separated by the tokensI `U`.D  7 7q ]       d D QD  q$ $ i XZVX  * A Appends all tokens in the iterator `I`, appending `U` after each D; element, including after the last element of the iterator. > 7 7q]       d D D  q$ $ n$ HJOQ #XE G4 7 7E[]  [ [N|  [$ ]^.*,bT7 7E^]  ^ B^dQ_D ^$,0577 7E^f]     dDQfD ^f$3i3GINP7 7E^f]      dDD ^f$6n6ACHJ\<#\!"4###ܒXET4, Formatting macro for constructing `Ident`s./0D4= # SyntaxdANL Syntax is copied from the [`format!`] macro, supporting both positional andRO named arguments.K Only a limited set of formatting traits are supported. The current mappingN of format types to traits is:! * `{}` ⇒ [`IdentFragment`] ( * `{:o}` ⇒ [`Octal`](std::fmt::Octal)+. * `{:x}` ⇒ [`LowerHex`](std::fmt::LowerHex)1. * `{:X}` ⇒ [`UpperHex`](std::fmt::UpperHex)1* * `{:b}` ⇒ [`Binary`](std::fmt::Binary)-' See [`std::fmt`] for more information.*D # IdentFragmentL Unlike `format!`, this macro uses the [`IdentFragment`] formatting trait byO? default. This trait is like `Display`, with a few differences:BJ * `IdentFragment` is only implemented for a limited set of types, such asM" unsigned integers and strings.%J * [`Ident`] arguments will have their `r#` prefixes stripped, if present.M( [`IdentFragment`]: crate::IdentFragment+ [`Ident`]: proc_macro2::Ident!D # HygienelL The [`Span`] of the first `Ident` argument is used as the span of the finalOH identifier, falling back to [`Span::call_site`] when no identifiers are K provided.l  <  # use quote::format_ident; & # let ident = format_ident!("Ident"); )M // If `ident` is an Ident, the span of `my_ident` will be inherited from it. P9 let my_ident = format_ident!("My{}{}", ident, "IsCool"); <' assert_eq!(my_ident, "MyIdentIsCool"); *<  F Alternatively, the span can be overridden by passing the `span` named I argument.l  <  3 # const IGNORE_TOKENS: &'static str = stringify! { 6 let my_span = /* ... */;  # };D 0 # let my_span = proc_macro2::Span::call_site(); 3* format_ident!("MyIdent", span = my_span);-< [`Span`]: proc_macro2::Span2 [`Span::call_site`]: proc_macro2::Span::call_site5


| # PanicsdH This method will panic if the resulting formatted string is not a validK identifier.|D # Examplest' Composing raw and non-raw identifiers:*</ let my_ident = format_ident!("My{}", "Ident");2! assert_eq!(my_ident, "MyIdent");$" let raw = format_ident!("r#Raw");% assert_eq!(raw, "r#Raw");; let my_ident_raw = format_ident!("{}Is{}", my_ident, raw);>* assert_eq!(my_ident_raw, "MyIdentIsRaw");-< Integer formatting options:< let num: u32 = 10;+ let decimal = format_ident!("Id_{}", num);. assert_eq!(decimal, "Id_10");!+ let octal = format_ident!("Id_{:o}", num);. assert_eq!(octal, "Id_12");, let binary = format_ident!("Id_{:b}", num);/ assert_eq!(binary, "Id_1010");"/ let lower_hex = format_ident!("Id_{:x}", num);2 assert_eq!(lower_hex, "Id_a");"/ let upper_hex = format_ident!("Id_{:X}", num);2 assert_eq!(upper_hex, "Id_A");"<d|,        $    ,          , L 4 $          $      rest$        ,          , L 4 $        $   d|   4t6/  %       $  $              , L D      , L 4              $        old  $            $    $  $    ,         Õ          $    $         Õ  $            $    $  $      $        ,         , L 4 $   , L $      $             $           $  $             $  ,   arg  $    ,          $             $         !     $   $                $   ,       $       $      ! ! " ,! ! ,!! L!! 5! ! !  ! ! ! ! " !! ! ,!!  ! ! ! " ! " !  $! !  ! ! " ! "  $" " " " " " " " "  " " "  $" " " " " " " $"  " " " " # " " "  $" " $" " " " " " " " "  " " " " $"# # # # ,##  # # # # # # #  $# # # # # # #  # # # # # # $  # # #  $# # $# # # # # # # # #  # # # # $# # # # $ # $# # #  $$ $ % ,$ $ ,$$ L$$ 5$ $ $  $ $ $ $ % $$ $ ,$$  $ $ $ % $ %  $  $$ $  $ % % % %  $% % % % % % % % %  % % % % % % % $%  % % %t.y()"Q(*D,9(,$@(-HL;+X13#%6 Specialized formatting trait used by `format_ident!`.H9K [`Ident`] arguments formatted using this trait will have their `r#` prefixN stripped, if present., See [`format_ident!`] for more information./' [`format_ident!`]: crate::format_ident*l.../0/05- Format this value as an identifier fragment.0777 7q 7TTTsQTsQTQTtQTtQTPQߺ٨7s. . /q$ + Span associated with this `IdentFragment`..: If non-`None`, may be inherited by formatted identifiers.=$7 7qp. . 0q$4X722.ElE34 $7 7Ep1 1 37E$4777 7E 7TTTsQTsQTQTtQTtQTPQߺ٨7s1 1 47E$N:8X766lE78 $7 7Ep5 5 77E$4777 7E 7TTTsQTsQTQTtQTtQTPQߺ٨7s5 5 87E$; XE:; $ 7 7Ep9 9 :$  4 777 7E 7TTTsQTsQTQTtQTtQTPQߺ٨7s9 9 ;$   SX7==l E< F>?  $ 7 7Fp< < >7E$  4 777 7F 7TTTsQTsQTQTtQTtQTPQߺ٨7s< < ?7E$ 9=#                     $  l              $         L  4    <    $      lLQ t  ABy.ACB'AD$P+AEL,hAGD,oAHM,', impl ToTokens for Path {7? for (i, segment) in self.segments.iter().enumerate() {B& if i > 0 || self.global {)% // Double colon `::` (@ tokens.append(Punct::new(':', Spacing::Joint)); C@ tokens.append(Punct::new(':', Spacing::Alone)); C } ' segment.to_tokens(tokens); *l L , ,  # pub struct PathSegment; , " # impl ToTokens for PathSegment { %6 # fn to_tokens(&self, tokens: &mut TokenStream) { 9 # unimplemented!()  # }\  # }< < L 77 7q 7E]Q Q|$ |4 (5 Convert `self` directly into a `TokenStream` object. 8G This method is implicitly implemented using `to_tokens`, and acts as aJ: convenience method for consumers of the `ToTokens` trait.=|7 7qEQ Q~$H8J=qEQQq, Tq?1XVWVWQEDHX -L77 7H 7E]U U XE$|?5XZ[Z[DH\ -L77 7H 7E]Y Y \E$|X@@X^_^_<DH` -L77 7H 7E]] ] `E$|A.XbbQIDHc -L77 7H 7E]a a cI$|^B-XeeDIf -L77 7I 7E]d d fI$|9C(XhhI DJi-L77 7J 7E]g g iI$|+DXk-L77 7 7E]j j k$|4XGm-L77 7G 7E]l l m$|4XKo-L77 7K 7E]n n o$|4XKq-L77 7K 7E]p p q$|4XKs-L77 7K 7E]r r s$|4XKu -L 77 7K 7E]t t u$ |4  XKw!-L!77 7K 7E]v !v w$!|4!"XKy"-L"77 7K 7E]x "x y$"|4"#XG{#-L#77 7G 7E]z #z {$#|4#$XG}$-L$77 7G 7E]| $| }$$|4$%XG%-L%77 7G 7E]~ %~ $%|4%&XG&-L&77 7G 7E] & $&|4&'XG'-L'77 7G 7E] ' $'|4'(XG(-L(77 7G 7E] ( $(|4()XK)-L)77 7K 7E] * $*|4**XK*-L+77 7K 7E] + $+|4++X,-L,77 7 7E] , $,|4,,X--L-77 7 7E] - $-|4-.XL.-L.77 7L 7E] . $.|4./XL/-L/77 7L 7E] / $/|4/0XM0-L077 7M 7E] 0 $0|401XE1-L177 7E 7E] 1 $1|412XM2-L277 7M 7E] 2 $2|423XN3-L377 7N 7E] 3 $3|43ܿ4XN4-L477 7N 7E] 4 $4|445XE5-L577 7E 7E] 5 $5|456)6EE $6     4tL <\d+ lF.DUQ t_ zQ$+BitOr,L,D,L,Spacing<L444X{~X[>0X<?+.Lt T6Xlz    4tL ParenthesisBraceBracket졘לl    4t$V    4t\E    4t\OŕǮ\+O(    4tO͂⒓ג\*OKXO\4OT,OOO $_rhs$9XO\4OB,OOO $$9XO\4O 0, OOO $ $  'XO\ 4 O 0, OOO $ $ \ K Extension traits used by the implementation of `quote!`. These are defined NK in separate traits, rather than as a single trait due to ambiguity issues. N J These traits expose a `quote_into_iter` method which should allow calling MK whichever impl happens to be applicable. Calling that method repeatedly on N) the returned value should be idempotent. ,    4 t  %L%HasIter<DoesNotHaveIter|ߏDQ btree_set$%eD ,W QX\|z/XcLUW\H*E Extension trait providing the `quote_into_iter` method on iterators.H   4tt,CqD*ؓ!9ؓ0+|q qD&X CIDI; Extension trait providing the `quote_into_iter` method for>C non-iterable types. These types interpolate the same value in eachF iteration of the repetition.    4ttA Pretend to be an iterator for the purposes of `quote_into_iter`.D< This allows repeated calls to `quote_into_iter` to continue?% correctly returning DoesNotHaveIter.($7 7q  q$5|7 7qКO  q$/XDI F Extension trait providing the `quote_into_iter` method for types thatI" can be referenced as an iterator.%   4tqCɝDޝ$6| qɝO q$MXPP L$P5| PPO P$QXP L$5| PPO P$,XE EQ!L$]]] \]\]D\ɚąլCE5| QQO E$/X QL$5| QQO E$ 4X  Q L!$!ЈuE!5|! QQO E$!"GX "E"R"&(L#$#E#5|# RRO E$#%X %R  ($(RJ IbK(+X (D(RL)$))($)7 7RRC ) I$))+X )D*R*-L*77 7R 7E] * I$*|L+)+ + + 4+t+D+IS + I Md+D+,,UL,$,,@,1,"9W<, ,S SS9WOSS IbdԀ-SWd- -SѠ׊SWQS Ieg̽-cX\- -čIcXRI Ifhd-I.X. \.V N/X/!\/7 7V / $/0X 0  0\07 7I 0 I$01X 1S  \141S2 ,27 7S 7S 2 I$22!X 2S  \3433 ,37 7S 7S 3 I$34U4 4 4 44t4T47 7EȄE] 4 |44 delimiterL4D,45|5 5 5 45t557 7EVȄE] 5 |45 $5L6D,67/7 7 7 47t7,777 7E 7] 7 |47 78C8 8 8 48t8l877 7EV 7] 8 |48 $8 99KNN V:C:NVN ],: $;<<K>4> > > 4>t>T>77 7E 7] > |4> >?H? ? ? 4?t??77 7EV 7] ? |4? $? ?@>@ @ @ 4@t@l@77 7E 7] @ |4@D@ADATˍ󙿄kAlA$A LA,AGA"XTALB$BNB($B7 7TTC B $BFRF F F 4FtFF77 7EV 7] F |4F $GDGGDGTGlG$GTG$GVLG,GGH"XTHLH$HNH($H7 7TTC H $HMTM M \  M N  M  $M M ,M N  println!("{}", #v), )*` — even multiple interpolations/H%/%D/%/%l0%0%J Any interpolated tokens preserve the `Span` information provided by their0M%E `ToTokens` implementation. Tokens that originate within the `quote!`0H%3 invocation are spanned with [`Span::call_site()`].16%2%e [`Span::call_site()`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.html#method.call_site2h%3%G A different span can be provided through the [`quote_spanned!`] macro.3J%3%30%4%D4%4% # Return type4%4%I The macro evaluates to an expression of type `proc_macro2::TokenStream`.4L%A Meanwhile Rust procedural macros are expected to return the type5D% `proc_macro::TokenStream`.6%6%M The difference between the two types is that `proc_macro` types are entirely6P%I specific to procedural macros and cannot ever exist in code outside of a7L%I procedural macro, while `proc_macro2` types may exist anywhere including7L%I tests and non-macro code like main.rs and build.rs. This is why even the8L%J procedural macro ecosystem is largely built around `proc_macro2`, because9M%I that ensures the libraries are unit testable and accessible in non-macro9L% contexts.l:%:%M There is a [`From`]-conversion in both directions so returning the output of:P%G `quote!` from a procedural macro usually looks like `tokens.into()` or;J%) `proc_macro::TokenStream::from(tokens)`.<,%<%@ [`From`]: https://doc.rust-lang.org/std/convert/trait.From.html%L The structure of a basic procedural macro is as follows. Refer to the [Syn]>O%L crate for further useful guidance on using `quote!` as part of a procedural?O% macro.T?%?%?)%@%<@% # #[cfg(any())]@% extern crate proc_macro;@% # extern crate proc_macro2;A%A%A% use proc_macro::TokenStream;A %A#% use quote::quote;B%B%B6% #[proc_macro_derive(HeapSize)]C"%ԀDC%= pub fn derive_heap_size(input: TokenStream) -> TokenStream {C@%I // Parse the input and figure out what implementation to generate...DL%7 # const IGNORE_TOKENS: &'static str = stringify! {D:% let name = /* ... */;E% let expr = /* ... */;E% # };dE% #LF% # let name = 0;F% # let expr = 0;F%F% let expanded = quote! {F% // The generated impl.G"%, impl heapsize::HeapSize for #name {G/%7 fn heap_size_of_children(&self) -> usize {G:% #expr̾H%H%lH% };TI%I%4 // Hand the output tokens back to the compiler.I7% TokenStream::from(expanded)I#%,J%` then the expanded code is `Vec::new()` which is invalidgP%J syntax. Ordinarily in handwritten Rust we would write `Vec::::new()`hM%7 but for macros often the following is more convenient.i:%i%::new();j)%,k%>::new()` which behaves correctly.k@%l%4 A similar pattern is appropriate for trait methods.l7%l%::default();nG%,n% [`syn::Index`]: https://docs.rs/syn/2.0/syn/struct.Index.html{A%{%{%# let i = 0usize..self.fields.len();{&%|%J // expands to 0 + self.0usize.heap_size() + self.1usize.heap_size() + ...|M% // which is not valid syntax} %d}%" 0 #( + self.#i.heap_size() )*}%%,}%<~%~%<~%) # use proc_macro2::{Ident, TokenStream};~,%~%,% # mod syn {|%/ # use proc_macro2::{Literal, TokenStream};2%- # use quote::{ToTokens, TokenStreamExt};0%,% # pub struct Index(usize);"%,Ԁ%# # impl From for Index {&%& # fn from(i: usize) -> Self {)% # Index(i)Á% # }|%\%,% # impl ToTokens for Index {#%: # fn to_tokens(&self, tokens: &mut TokenStream) {̂=%@ # tokens.append(Literal::usize_unsuffixed(self.0));C%|ރ%\%<%,% # struct Struct {% # fields: Vec,Ƅ%<%,% # impl Struct {%) # fn example(&self) -> TokenStream {,%6 let i = (0..self.fields.len()).map(syn::Index::from);ۅ9%%@ // expands to 0 + self.0.heap_size() + self.1.heap_size() + ...C%d%%%,%\Ƈ%<ڇ%<   , 䝑|    ԑ  5l‘ ϑ $Б֑ ّ b%L Same as `quote!`, but applies a given span to all tokens originating withinO% the macro invocation.̻%ݒ%D%%d%%M A span expression of type [`Span`], followed by `=>`, followed by the tokensP%I to quote. The span expression should be brief — use a variable forL%I anything more than a few characters. There should be no space before theՔL% `=>` token.|%•%G [`Span`]: https://docs.rs/proc-macro2/1.0/proc_macro2/struct.Span.htmlΕJ%%<% # use proc_macro2::Span;佖% # use quote::quote_spanned;%,%6% let span = /* ... */;ח%ԀD% # let span = Span::call_site();#% # let init = 0;%Ҙ%! // On one line, use parentheses.ޘ$%D let tokens = quote_spanned!(span=> Box::into_raw(Box::new(#init)));G%ۙ%@ // On multiple lines, place the span at the top and use braces.C%$ let tokens = quote_spanned! {span=>'%# Box::into_raw(Box::new(#init))&%4%<%%J The lack of space before the `=>` should look jarring to Rust programmersM%B and this is intentional. The formatting is designed to be visiblyE%J off-balance and draw the eye a particular way, due to the span expressionM%I being evaluated in the context of the procedural macro and the remainingL%. tokens being evaluated in the generated code.1%ƞ%DҞ%%l%%M%M `ToTokens` implementation. Tokens that originate within the `quote_spanned!`P%5 invocation are spanned with the given span argument.8%%D%%l%%K The following procedural macro code uses `quote_spanned!` to assert that a̡N%M particular Rust type implements the [`Sync`] trait so that references can beP% safely shared between threads."%%? [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.htmlB%%<%8 # use quote::{quote_spanned, TokenStreamExt, ToTokens};;%( # use proc_macro2::{Span, TokenStream};ޤ+%,% # struct Type;%,% # impl Type {ɥ% # fn span(&self) -> Span {"% # Span::call_site()%\%<ʦ%,ڦ% # impl ToTokens for Type {%8 # fn to_tokens(&self, _tokens: &mut TokenStream) {};%<ӧ%,% # let ty = Type;%% # let call_site = Span::call_site();(%,% let ty_span = ty.span();ͨ%, let assert_sync = quote_spanned! {ty_span=>/%( struct _AssertSync where #ty: Sync;+%4ީ%<%%K If the assertion fails, the user will see an error like the following. TheN%6 input span of their type is highlighted in the error.9%% ```text\%N error[E0277]: the trait bound `*const (): std::marker::Sync` is not satisfied«Q% --> src/main.rs:10:21ܜ% |D%* 10 | static ref PTR: *const () = &();Ѭ-%W | ^^^^^^^^^ `*const ()` cannot be shared between threads safelyZ%<%%L In this example it is important for the where-clause to be spanned with theO%L line/column information of the user's input type so that error messages areޮO%& placed appropriately by the compiler.)  5l d |    4tZ       $  ,   extra,       tts        , !     $   ؇,                     +d |    4t-Z       $  ,   ؇,         b1           curr$           , "č      $   ؇,    $   %d |    4t>Z      $  ,   ؇,             D,        , !     $   ؇,     D,       $  ,   ؇,             D,        , !     $   ؇,     D,       $  ,   ؇,             D,        , !     $   ؇,     D,        $  ,        ؇,         ,    ,  $        ؇,          $  ,   ؇,        $     !d |    4tOZ      has_iterD  ,    ,      ,   unused_mutT              |      D   D      %d |    4t`Z        ,       ,     $     $   _x  , L %L   ۥ  $ ,   d |    4tqZ      |4  ,             , #̭      |4                                                                                                             %d |    4tZ       |4  ,   $  ,             , #!      |4   $                                                                                                             &d |    4tZ       |4  ,       b3           b2                      $           a1           a2           a3           , #     |4        $         .d |    4tZ      |4  ,   $  ,                                        $                                            , #      |4   $        $         %d |    4tZ  0    |4  ,                                |4  ,                      D,              ) $  , L       D   , L    , !    "    D       D,        , L \  D  &, !$     , !    "          D,    , "     |4     D,       |4  ,                  D,                     |4  ,            D,                           |4  ,                      D,      sep        / $ ŀ ,ƀˀ L̀ր  ؀ۀ  ݀ ހ   _i 4   D   , L 직 ā ΁ ,ρԁ !ց    "    D       D,        , L \ Ƃ DȂ Ђ &,ڂ !$    , !    "Ď          D,   Ń ȃ ˃ ̓ σ   , $\       |4      , " ˄ ̄ ߄ ̈́ |4΄ Մ ք ݄ ׄ D,؄  ބ   م  |4  ,           Dž  ƅ   Å  D,    ą Ʌ ʅ ͅ ΅  х Ӆ ԅ օ ׅۅ ޅ ߅   Ȇ  |4  ,            D,                 † Æ ņ Ɔʆ ͆ Ά φ    |4  ,        D,                          , $\       |4     |4 ʼn ,Ɖ ̉ Ή މ Љ щ ۉ ҉ D,Ӊ ؉ ى  ܉                           |4  , Ċ Ŋ NJ Ȋ ˊ ̊ Ί ϊ Ҋ ӊ Պ ֊ ي ۊ ڊ ݊ ފ  ,            , D  L            |4      |4  ,               ,                   |4  ,                $                  , $\ ̍ ͍ ۍ ΍ $ύ ԍ |4Ս -dю |ώ    4tߎZ  ۡ0  !  |4  ,   $  ,     ď ŏ Ǐ ȏ ˏ ̏ Ώ Ϗ ҏ ԏ Տ ׏ ؏ ۏ ܏ ޏ ߏ         Đ  |4  ,   $  ,                      D,          Ɛ ɐ  ʐ ) $Ԑ ؐ ,ِސ L       D   , L 응  đ ,őʑ !̑ ݑ ޑ  "ߑ    D       D,        , L \  D ƒ &,В !$֒ ے    , !    "Ą          D,    , "Ó ۓ ܓ  ݓ |4ޓ   $     D,     ۔  |4  ,   $  ,           ʔ  ɔ   Ɣ  D, Ô Ĕ  ǔ  ̔ Δ ϔ є Ҕ Ք ֔ ؔ ٔݔ       |4  ,   $  ,            D,                        ĕ  ŕ |4ƕ ̕ ,͕ ӕ  $ԕ ؕ ,ٕ ߕ                     D,              / $  , L      ʖ Ζ Җ Ֆ4ז ݖ  D   , L 쉗   , ! ɗ ʗ  "˗ ߗ   D       D,        , L \  D  &, !$˜ ǘ  ՘ ,֘ۘ !ݘ    "          D,         Ù ,ęə $˙ ޙ ߙ     |4   $      , "ī Ú Ě ݚ Ś |4ƚ ͚  $Κ Ӛ Ԛ ۚ ՚ D,֚  ܚ   ě  |4  ,   $  ,                  D,              ›ƛ ɛ ʛ ˛ ћ  қ |4ӛ ٛ ,ڛ   $  ,            D,                           |4  ,   $  ,œ Ȝ ʜ ڜ ̜ ͜ ל Μ D,Ϝ Ԝ ՜  ؜  ܜ ޜ   ߜ                , $ĝ ם ؝   ٝ ۝ |4ܝ   $   Ğ  |4  ,   $  ,        D,                        žƞ ɞ ʞ ˞ Ҟ ! Ӟ |4Ԟ ڞ ,۞   $  ,                   ,            , D  L ȟ ܟ  ɟ ʟ ˟ Ο  П џ ՟ |4֟ ݟ     |4  ,   $  ,               ,                Ġ ! Š |4Ơ ̠ ,͠ Ӡ  $Ԡ ؠ ,٠ ߠ               $                ء  , $   ҡ  $ š |4ơ ͡  $Ρ ١d |ޤ    4tZ      ,  ,  |4  ,   ƥ ,ǥ̥ LΥץ T٥       |4   L     ,      |4  ,    , LĦ )\Ʀ Ѧ ަ  Ҧ Ӧ צ |4ئ ߦ          D,      |4  ,  è  , L T    ǧ ȧ ̧ |4ͧ ӧ  , L L փ\   ,  ,        D,     Ĩ ˨  ̨ ܨ Ψ Ϩ ٨ Ш D,Ѩ ֨ ר  ڨ ި |4ߨ  ,    , L T       |4   ,ũ LǩЩ Lҩ۩ <ݩ   ,  ,        D,       Ū       D,      |4  ,Ǫ ʪ  Ԫ ,ժڪ Lܪ T       |4   , L L ,  ʫ ,˫Ы  ,ҫ ׫ ث  ٫ ګ  ۫ D,ܫ          |4  ,  ͬ  , L /T  Ƭ     |4 Ǭ ά լ  ֬ ج |4٬ ߬ ,    , L )T       |4       |4  , ­  ̭ ,ͭҭ Lԭݭ *D߭       |4       |4  ,  Ү  , L 2L  ˮ    Į |4Ů ̮ Ӯ ڮ  ۮ ݮ |4ޮ  ,    , L )T       |4    ¯   |4  ,į ǯ  ѯ ,үׯ Lٯ &D       |4       |4  ,  ڰ  , L &\ ư Ӱ  ǰ Ȱ ̰ |4Ͱ ԰ ۰      |4  ,    , L &D       |4    ɱ  |4 ñ ,ı˱ α  ر ,ٱޱ L 'd       |4       |4  ,    , LIJ '\Ʋ Ѳ ޲  Ҳ Ӳ ײ |4ز ߲      |4  ,    , L '<       |4   ³ ҳ ó ų |4Ƴ ̳ ,ͳԳ ׳   , L (L       |4        |4  ,    , Lɴ (T˴ մ   ִ ״ ۴ |4ܴ       |4  ,  ŵ  , L (l       |4  Ƶ ͵ ݵ  ε е |4ѵ ׵ ,صߵ    , L *D       |4       |4  ,   ö ,Ķɶ L˶Զ *\ֶ       |4      |4  ,  ͷ  , L +L  Ʒ     |4 Ƿ η շ ַ ڷ |4۷  ,    , L +L       |4      |4  ,¸ Ÿ  ϸ ,иո L׸ +|       |4       |4  ,  ڹ  , L ,< ƹ ӹ  ǹ ȹ ̹ |4͹ Թ ۹    |4  ,    , L ,T       |4    ̺  |4 ƺ ,Ǻκ Ѻ  ۺ ,ܺ L ,<       |4       |4  ,  ޻  , L -<û ʻ ׻  ˻ ̻ л |4ѻ ػ ߻    |4  ,    , L -<       |4    ̼   |4 Ƽ ,Ǽμ Ѽ  ۼ ,ܼ L -<       |4       |4  ,    , L½ .\Ľ Ͻ ܽ  н ѽ ս |4ֽ ݽ     |4  ,    , L .<       |4    Ѿ  ¾ ľ |4ž ˾ ,̾Ӿ ־   , L .<       |4       |4  ,    , Lǿ /Tɿ ӿ   Կ տ ٿ |4ڿ      |4  ,    , L /T       |4       |4  ,    , L 0l       |4      |4  ,    , L 0\       |4      |4  ,    , L 0\       |4        |4  ,    , L 1D       |4       |4  ,    , L 1\       |4      |4  ,    , L 1t       |4       |4  ,    , L 2D       |4       |4  ,    , L 2\       |4       |4  ,    , L 3D       |4       |4  ,    , L 3\       |4        |4  ,    , L 4L       |4        |4  ,    , L 4D       |4       |4  ,    , L 4\       |4      D  D  |4  ,    , L l       |4   L     D        |4  ,    , L |       |4       ,    |4  ,    , L ,       |4   L      ,   d |    4tZ       ,  ,  |4  ,   $  ,    , L        |4    $   L     ,       |4  ,   $  ,    , L )       |4    $            D,      |4  ,   $  ,    , L        |4    $   , L L փ\   , 5l      $     D,               D,      |4  ,   $  ,    , L        |4    $   , L L <   , 5l      $     D,               D,      |4  ,   $  ,    , L        |4    $   , L L ,   , 5l      $     D,           |4  ,   $  ,    , L /       |4    $        |4  ,   $  ,    , L *       |4    $        |4  ,   $  ,    , L +       |4    $        |4  ,   $  ,    , L 2       |4    $        |4  ,   $  ,    , L )       |4    $       |4  ,   $  ,    , L &       |4    $       |4  ,   $  ,    , L &       |4    $        |4  ,   $  ,    , L &       |4    $       |4  ,   $  ,    , L '       |4    $       |4  ,   $  ,    , L '       |4    $       |4  ,   $  ,    , L '|       |4    $       |4  ,   $  ,    , L (       |4    $        |4  ,   $  ,    , L (       |4    $       |4  ,   $  ,    , L (       |4    $        |4  ,   $  ,    , L *       |4    $       |4  ,   $  ,    , L *       |4    $       |4  ,   $  ,    , L +       |4    $       |4  ,   $  ,    , L +       |4    $       |4  ,   $  ,    , L ,       |4    $       |4  ,   $  ,    , L ,|       |4    $       |4  ,   $  ,    , L ,       |4    $       |4  ,   $  ,    , L -|       |4    $        |4  ,   $  ,    , L -|       |4    $       |4  ,   $  ,    , L -|       |4    $        |4  ,   $  ,    , L -|       |4    $       |4  ,   $  ,    , L .       |4    $       |4  ,   $  ,    , L .|       |4    $        |4  ,   $  ,    , L .|       |4    $       |4  ,   $  ,    , L /       |4    $       |4  ,   $  ,    , L /       |4    $        |4  ,   $  ,    , L 0       |4    $       |4  ,   $  ,    , L 0       |4    $       |4  ,   $  ,    , L 1       |4    $        |4  ,   $  ,    , L 1       |4    $       |4  ,   $  ,    , L 1       |4    $       |4  ,   $  ,    , L 2       |4    $       |4  ,   $  ,    , L 2       |4    $       |4  ,   $  ,    , L 3       |4    $       |4  ,   $  ,    , L 3       |4    $       |4  ,   $  ,    , L 3       |4    $        |4  ,   $  ,    , L 4       |4    $        |4  ,   $  ,    , L 4       |4    $       |4  ,   $  ,    , L 4       |4    $       D  D  |4  ,   $  ,    , L        |4    $   L     D        |4  ,   $  ,    , L        |4    $        ,    |4  ,   $  ,    , L l       |4    $   L      ,  X4777 7 7TTTsQTsQTQTtQTtQTPQߺ٨7s  X777 7 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s X777 7 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG4777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s  XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s XG777 7G 7TTTsQTsQTQTtQTtQTPQߺ٨7s V% % % 4%t%L% %RעبсIRVPIR Ibd,%I % 5XIGRJJJJ6X IJR69JJ7 7RR % I,% N& N  N N 0 Np ND\7 7E] N |0 N O5 O  O O 0 Op O\7 7EV] O |0 O OQ&Q QQ 0QpQ\]7 7E]R |0RS5S SS 0SpS]7 7EV]S |0S SN&N NN 0NpND]7 7E]N |0NO5O OO 0OpO]7 7EV]O |0O OQ&Q QQ 0QpQd]7 7E]R |0RS5S !SS 0SpS^7 7EV]S |0S SQ&Q !QQ 0QpQ\^7 7E]R |0RS5S !SS 0SpS^7 7EV]S |0S SN&N "NN 0NpN<^7 7E]N |0NO5O "OO 0OpO|^7 7EV]O |0O ON&N "NN 0NpNL_7 7E]N |0NO5O "OO 0OpO_7 7EV]O |0O ON&N #NN 0NpNT_7 7E]N |0NO5O #OO 0OpO_7 7EV]O |0O OQ&Q #QQ 0QpQl_7 7E]R |0RS5S #SS 0SpS`7 7EV]S |0S SN&N $NN 0NpNT`7 7E]N |0NO5O $OO 0OpO`7 7EV]O |0O OQ&Q $QQ 0QpQ\`7 7E]R |0RS5S %SS 0SpS`7 7EV]S |0S SN&N %NN 0NpNTa7 7E]N |0NO5O %OO 0OpOa7 7EV]O |0O ON&N &NN 0NpNDa7 7E]N |0NO5O &OO 0OpOa7 7EV]O |0O OQ&Q &QQ 0QpQ\a7 7E]R |0RS5S &SS 0SpSa7 7EV]S |0S SN&N 'NN 0NpNDb7 7E]N |0NO5O 'OO 0OpOb7 7EV]O |0O OQ&Q 'QQ 0QpQLb7 7E]R |0RS5S 'SS 0SpSb7 7EV]S |0S SV&V (VV 0VpVLc7 7E]W |0WY5X (XX 0XpXc7 7EV]Y |0Y YV&V )VV 0VpV|c7 7E]W |0WY5X )XX 0XpXc7 7EV]Y |0Y YN&N *NN 0NpN;>Oå;?OP;?;?;?);@8;@;@;@;A;A;A;A ;A#;B;B;B6Ѩ;C"Ԁ@;C;C@ԩ;DL;D:;E;E`;EϫH;F;F;F;F;Fլ;G";G/;G:;H;Hh;HP;I;Iخ;I7;I#(;J8;J;JԂx;J;J;J";K;KN;KO;LF;ML;M8;M;N(;Nó;N';N;O;O;Oִ;O0;O8;P;PԂx;P;P;P ;P;QN;QJ;R:;Rܷ;RO;SJ;TC;T8;T;U+;U(;U;U:(;V;V`;V;V(;W8;W8;W;W;WN;XF;X.;Y8;Y;Y%;Y'(;Z;Z5(;Zǿ;Z.`;[;[(;[8;[8;\;\;\J;\O;]3;^8;^;^+;^(;_;_:(;_;_-;`?`;`;`(;a8;a8;a;aԂx;a;a;a;b;bO;bE;cH;d8;d;d(;d;d#(;e;e`;e;e'(;f8;f8;f;f;fM;gL;gP;hM;i:;i8;i;i(;j;j#(;j`;j;j)(;k8;k8;k;k;k@;l;l7;l8;l;m(;m;m#(;m`;m;nG(;n8;n8;n;oԂx;o;o;o1;o;oJP;p;p;p`;q;q&X;qx;q(;q8;r;r;r`;r;r-(;s8;s;s;sK;t7;tX;t;t%;u(;u;u';uԀ@;v(;v;v7;v9`;w;wX;wx;x(;x8;x8;x;xԂx;x;x;x$;y;yN;zP`;z;z;{A;{;{;{&;|;|M;} `;};}%(;}8;~;~8;~;~,;~(;x;;2;0(;;"(;Ԁ;&;);Áx;X;(;;#;̂=;Cx;ރX;8;(;;;Ƅ8;(;;;,;ۅ9;;C`;;%(;X;Ƈ8;ڇ8;d <|Z Ӊ  ݉ މ     , L \                  _s   , L \      ŋ ,Ƌˋ $\͋ ؋ ً  ڋ ۋ ° ދ °   Œ ό Ì Ō ƌ Ɍ ,ʌь Ԍ  Ռ    °    , L \       , D  L  ͍     č  ƍ Ǎ ° ˍ ΍ ° ܍     tt1    tt2         °    , L \Ž  Ď ǎ Ȏ Ɏ ׎ ,؎ݎ $\ߎ       °   , $\       °  °                    °    , L \    Ð Đ Ґ ,Ӑؐ "ڐ    °         °  ۱<O<<ݒ@<<`<<<P<L<ՔLx<<•<ΕJ<8<<<(<<6<חԀ@<<#<<Ҙ<ޘ$<G<ۙ<C<'<&0<8<<<M<E<M<L<1<ƞ@<Ҟ<h<<<M<P<8<@<<h<<<̡N<P<"<<B<8<<;<ޤ+(<<(<<ɥ<"<X<8<ʦ(<ڦ<<;8<ӧ(<<<((<<ͨ</<+0<ީ8<<<N<9<ρX<<«Q<@<<Ѭ-<Z8<<<O<ޮO<)dɱ <|DZ [       $  $          , L $  ² ,òȲ LʲӲ Dղ ݲ  ޲  $߲  \     , L \           $  $        *   °    , L \´ʹ  ϴ Ҵ Ӵ Դ  _span,   , L $   , L D     $  \    ŵ ,Ƶ˵ $͵      °   , °   ж   Ѷ  $Ҷ ֶ $׶۶ ޶    ,    ,   °    , L \        · ÷ ŷ ,Ʒ˷ Lͷַ $ط ݷ ߷ , L D     $  \     , D  L  Ǹ         ° Ÿ ȸ ° ָ       $  $              0   °    , L \ɹ  ˹ ι Ϲ й ޹  ,   , L $   , L D     $  \     ,ºǺ $ɺ ܺ ݺ  ޺  ߺ °   ,  , $       °   , °       $  $             *   °    , Lü \żм  Ҽ ռ ּ ׼   ,   , L $   , L D     $  \    Ƚ ,ɽν "н    °   ,        °  ?oXqXrXttXMuXuXvXlwX>X XLXX XXX XLX XDXX XLXXdX XL X XXX XL XX XݫXX XҭX XX XTX XX XX X9X XX X;X XX X=X XX X?X !XX "XAX #XµX $XCX %XƶX &XKX 'XзX )XUX *XڸX +X]X ,XX -XeX .XX 0XoX 1XX 2XyX 2XX 3XX 4X X 5XXXFXX *XXhX+XXuXXX 7XIX 9XX >XX @XDX AXXMX GXXXQXX.XXX xXLxX%X yXLyXXX {XL{XX |XL|XX ~XL~X3XXXXhXXHXhXXXhX&X#XhX6X3XNeXXHXdeXXXteX&X#XeX6X3XeXFXCXeXVXSX-_X^X-^X]X)]X\X%\X[X![XZXZXYXYXXXXXWXWXVX VXUX UXTXTXSXSX|RXQXxQXPXtPXOXpOXNXlNXMXhMXLXdLXKX`KXJX\JXIXXIXHXTHXGXPGXFXLFXEXHEXDXDDXCX@CXBXX,>X=X(=X<X$<X;X ;X:X:X9X9X8X8X7X7X6X 6X5X5X4X4X3X3X2X0Xfdocs-rsproc_macro2::TokenStreamhttps://crates.io/crates/quoteaquote_spanned!Syn-https://docs.rs/syn/2.0/syn/struct.Index.html prettypleasemacro.quote.html\Uv&G F )v餴] A@ #8Aottέ*1Qv1zH;| fJ:W8[G"U>4 cL })~*&qW1M4i'?cIȢUROi7Jt7x}B`O `OS'.|1IMS׫ Q&c6aalIR^&$3ϖ،R:Ny)Hg @pS[zMؑNxofHqT~VPճ=e/=!J~Ht[jsx[Po6]e6Gl#>ZK'-6Ovɐh-22Wk6; 9TNJ1?3\/gGBuc\k٪xBvM& WtbiW|7yG LP>#0n ev:N6?>I7#~_2vA)U¦ *qh-"JeAEÛ+fGG֖% w[O923XTחzZ@nµAUX^7x}dW:h'OĤ[ؠ|5ƭX~=27&5L}r\Rg<(UU !iS QG ]"g_0Cze(̋dONڦi:LV~/[w-u#a֬@@Ng,YQy \jE! nupŊu]l2k=: Z5% 8EPZ EQ=싀,< _ $zE=ѬybsD3%uQXpgY"I{!jYu}Toyl`- r >4ebFAeTq0 @;̙U0YWK o;K$3rxMu oВ;vvf.Lz4jѶ8t8C锥> d\_6lŻ MAn@'ee4e5IZ ID a VbOWdXQCӔ\> (7=ĠOACaG'hm32ei,@Z fQi nOJ[@d5*p[;t:k-m~?6h7,#oU[g3@-R-][{-^d? n$4L>6}qڏ'Q5z,Nr5QNGV}+҅mh% ;.km#B;kcQ> {ԂkcD82^{̽r2}:c½ dF1%%{(>}Aj&r`3 ~3/O+(u?E'ONme٬Ys~4ݷOrdh?z 2^ _s6/*uHK%u-'w(f&Wa&kegMq)y/Fb3SsP#){.bfR}; 噭d*}T{fiRН/ $ ▔E9Bg(?@Ŏ`i>Lb, k/{9DVmxj1|z0PFm$#Ww+? QtS\(0!a0?H98""1XS(ZQ J®Yd# ltxZI%4ms<Mb;MJ+ir'xN6e Va?{Eu}E* wH,1q\ :՚Y:0.Ĉ&f|bZx}jy92=0F}c\ qČt;")H&40^a@^6a+~|폈{ot`$ꓷ W5SٱȬ@N)7cr{TPp|qP,8J]gX0sgS;ฎd~`xq6rD7?Go\n6pQ$wbr=A{ }7ceoZ{KK5֡a`B Ė4FY,fk~~佣UN gKIaIO هc`s(IUn0}+5` K0 ((ft^轻}̄\'\c`Dlr d((ΚH.`t͌-ibϚcK֢̀аr"Қ[yI2Ez/vXؠt4)UDʑj_5ʩcs8bI W} b>fi'ȯ_cm UQ-< ԎL3mӑѥ\bݑЋW]7e o1UݠwP1!Wp'Rl@646EPjtG8RbVu/"_;U~yoXIy)@tuJ6׸{l/"FP(}]wN^}s̖E`ӫq6ɍ5(xmrʶz1!;Vsq eD5D ꃍc M%!ּb_}!nA,@ HG.ZWuG˜*-fڶǻmrN ߞfOrP;SĶ~Wd8ί$90ot˾Ym#dzX +f;Y-ubHKG>^Iz9vS}j2O }?Ezd ݽܫXY+HǸk= :p*z$!0t) sLaPr[G K@U ,R–&|HxDM2N~hR.jS7CkWahRZambB#=/>M]^)޴+T/; N!GAZzC6Vsr,3)"O}[;/O}0?:X*%m^`d2xGIedٳ},}}-zQ[mgst:ZÉf)~uŊJ3_ !$FkX42`+)$Tt' o+y0o.ꎛyo`}b{xav?hFNr 3nEf:Zy@,-T\Fp L"h͈|GpwDx[j牆%:T=x&w0[o6 U,mVˆB=xk|r11B?L~*n7Pv!lXoZq\s^u`wbzl v~ #-7,h9{@AZv9Rn)TKe\yKkEZ_d^x/H.I=o@1c2sA]rqO8kI|Pg#bR~42CqEG}OQSX\ ane    j  U j @Y5J1b=M]m} *:JZ  j!!z""# $$%%-&&=''M((]))m**}+ ,,--*..://J00Z11j22z334 5566-77=88M99]::m;;}< ==>>*??:@@JAAZBBjCCwDEE_EEFpbFja^xkmpnw4xUxtDs|G8+$tnt4xIxFpVh3Wikmoqs} &0RJK6<@7+K%= SAq3"UaK   { e QF,8LDEF        ))   )      &&                 % % %          )          )))))))))))))))%    %   ))wkm*n osqr-tuuYv(wwxSxbrxoIn4լcƯ %,6@żJѽ?j(s ^V{7*i`OoI^2[r&`~[AN}qiEyEp- K~* zu!#4CEHOQSfX1][ae&Ϝ   | m[C.Wt/?O_o  "!!2""B##R$$b%%r&&'(())/**?++O,,_--o../0011"22233B44R55b66r77899::/;;?<<O==_>>o??@AABB"CC2DDEGE+F3Wjc[lllll\mamfmmmqmumxnoorrOs^smstttuuu1v@vvwwwwwww4xIxUxLjhƗ̗ЗԗH\3rܛ`AXǟ؟1#'+26:Ӥi2io4:KqXgհTjձVlײXnٳZp۴\rݵ^uhr z(2'd#)/5<BHNTZ`hlptx|5w;<Vq4Niw}%O 6GyDJPa;AGXt/5G OUg)/AAGV~ Z_ ^KZu+C*Du 8k<,_ -o7=XmlJ$3WfDwLcM^Nhntz 3-CkEGwOQSX\ahe{    g } R g ;S3H.CzN_7GWgw$4DT  d!!t""#$$%%'&&7''G((W))g**w+,,--$..4//D00T11d22t3345566'77788G99W::g;;w<==>>$??4@@DAATBBdCCtDD2EAEZEEEFFkFe^fplprpxp~pppppppppppppppppppppq qqqq&q-q3q:q@qFqMqSqZq`qgqmqtqzqqqqqqqqqqqqqqqqqqqqqr rrrr#r*r0r7r=rDrJrQrWr^rdrkrqrxr~rrrrrrrrrrrrrrrrrrrrrs ssss#s)s0s6s=sCsJsPsWs]sdsjspsws}ssssssssssssssssssssst ttt!t)t1t7tPǮx#Zl۰Zo۱\qݲ^s߳`ubwdzn x #-!7, &,29?EKQX^ejnrvzfoCZv;Rnw{3:}HNTe?EK\y37KSWk-1EEIZafH aM^z1H.Kw;j^e2u;A]Q&8YkK~&Rg%Qblrx4~CEHOQScX.]Xae#̜    l  W j BY7J1F|Qbo ,<L\l| !!""/##?$$O%%_&&o''( ))**,++<,,L--\..l//|0012233/44?55O66_77o889 ::;;,<<<==L>>\??l@@|AABCCDDD4EEEuEEEFF0Wgcipopup{pppppppppppppppppppppq qqqq#q*q0q7q=qCqJqPqWq]qdqjqqqwq~qqqqqqqqqqqqqqqqqqqqrr rrr r'r-r4r:rArGrNrTr[rarhrnrur{rrrrrrrrrrrrrrrrrrrrrsssss s&s-s3s:s@sGsMsTsZsasgsmstszssssssssssssssssssssst tttt&t.t4t9t>tDtItNtTtYt^tdtltttzttttttttttttttttttttttttuu uuuu$u*u0u6uvDvJvPvVv\vbvhvnvtvzvvvvvvvvvvvvvvvvvv>nDooqrrZsisyttttRuuud@fBhóDjŴFlǵHn˶PxշZ߸b jt!~+Sr3{ MiEaM!.)C&]t*Tk@Z6`z:TRiGzK|.=Vl #;p &m0dzN&I%R.PV3j /1b*d]8\ >Z1 j  S v < a %LA'l2['7GWgw ,<  L!!\""l##|$%%&&'''7((G))W**g++w,,- ..//,00<11L22\33l44|56677'88799G::W;;g<<w==> ??@@,AAW8<VjMa9PYp3JK_=d=if~3Ob4f_"NyoC~O >mG}FK(T([NO*U(Sa [  G o / Z E :  b~T+;K[k{ 0  @!!P""`##p$$% &&''+((;))K**[++k,,{-..// 00011@22P33`44p556 7788+99;::K;;[<<k=={>??@@ AA0BB@CCPDDE6EHExEEE FHF^n.x>ǤwA2gn1xAʤD5koq,sttyuvvwGxH&nʛN)Tnß]fܭ1^ U°CgıEiƲGkȳImʴKo̵MqѶV{۷` hpz$ .Yu9~&Po!Hg4>z5q)`I#Z;oMQ9Cr)>vs6o}Q)L+U1VY6 S0c>_I7 p  Y y B d +OD *rJ*:JZjz/?  O!!_""o##$ %%&&*'':((J))Z**j++z,,-..///00?11O22_33o445 6677*88:99J::Z;;j<<z==>??@@/AA?BBOCC_DD*EXEEF]F otqr.tuuZv)wypJo5d &-7AK@)t +3\t(\BO~rlF|q. L{v   } n\D/Xu 0@P`p  #!!3""C##S$$c%%s&''(( ))0**@++P,,`--p../0011#22333C44S55c66s78899 ::0;;@<<P==`>>p??@AABB#CC3DDE,F ovqr1tuu\v+w!{pLp6جfȯ &-7AƼKҽ@ ,4]Uu)\CO~rGr. M{w   } n\D/:Yv 0@P`p  #!!3""C##S$$c%%s&''(( ))0**@++P,,`--p../0011#22333C44S55c66s78899 ::0;;@<<P==`>>p??@AABB#CC3DDE-Fndqrt uuJvwi`:_%ƬT psuwy{~ '1;½0zr}#LcL2?no@b6a<okfR   m ^L4 Hes 0@P`p  !!#""3##C$$S%%c&&s'(()) **0++@,,P--`..p//01122#33344C55S66c77s899:: ;;0<<@==P>>`??p@@ABBCC#DEF"E"M"^"l""####d$$% %%%!%)%1%9%A%I%Q%Y%a%i%q%y%%%%%%1&9&&&A'I'y'''''''((a(()%)-)e)))m*v******+"+++4+ ###I#P#X#`#h#p#x#()-*d*or]slsttu?vvwwwןJf$F`WCc=UY)2e]^@EEFd-.%1.57h88:%;;<w=>7??@aABCDDEEF7G$HHIKKlLM7WWaXMNOPPQR9SSTFUUVdJXRQWXXVCY.#1,57f88:#;;5??@_ABC~DDEEF5G"HHIbJKjLMMWXXNOPPPQR7SSTDUUVV KBYQ.$1-57g88:$;;6??@`ABCDDEEF6G#HHIcJKkLMMW`XXNOPPQQR8SSTEUUV6WKYQuoq;stu%vvwO-Z5r+d&eGIKMOQ[emu^+&UY {{>V.QZ^;8kFu ^ G 0$/?O_o$4D  T!!d""t##$%%&&/''?((O))_**o++,--..$//400D11T22d33t4456677/88?99O::_;;o<<=>>??$@@4AADBBTCCdDeFOnx/g1" 0/0/0/0/RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRToooooooo!!R    !!!!Q*S*W*Y*U*eee//////////  ukl$ntwx8xMxl8œEn7Ův!ٰXٱZ۲\ݳ^ߴ`blv~ mA9u1_dx/IcsOI|$P#~  j U @5DsEE H-D;D$5=T[bz'<@DHLPdkvz  $(,048<KRh$(/3:>EIPT[_fjqu|     $ ( 0 8 H M R W \ a f k p u z     # ( 0 8 = E M R Z b j o t y ~   & 2 : ? G O W _ g l t |     ( - 5 = B J R Z _ g o     + 0 8 = E M R Z b j o w  $9IQYafnv~ (8OT\diqy~"*/7<DL^chmuz#>]t!3MQY]eiqu} 5Hcs 9Kez-EXs%4K]w"=Lcr "?Rm%6O_w %5M`{ %+17=CIOU[agmsy !'-39?EKQW]ciou{ ")07>ELSZahov} %,3:AHOV]dkry !(/6=DKRY`gnu|     $ + 2 9 @ G N U \ c j q x  ! !!! !'!.!5!XXX4Nڲk1ȶ$crate::panic::unreachable_2015p 1 panic_internalsKJ4NuRm4M4Nڈ4%nk.04N Z*/0h4\4Nf,4Nhod24NVUO~a44N]p#E_. 4Ni`m]494Nfn1AZXX 4N'R$kN1X4Na“:x2$uutecore_intrinsicsderive_clone_copy4NرM΁u)*4N#sYofk8/4N[ i4\4N'T2f(4Nx|d,4N" \eb*4Ng˯_84N]*=4NO.0 0@(4N#g|&Zr2U}-7޴4Nt6Nԅ/!!f4Nھ&u%k.4N@&,ʑi*,4NOg2Y4NXM˷d(4Nڱř yb04N`a*`.4Nڳb騢1]6 4NژO|, 7@(4NWpȞ@X4NK `! 4N\9Ҭpl84NL Vi44NڮQ鳶g24NV> e,B4NCJ݁b4o4N}+`44Ny"^44Nڽ١n%*4N]U` bX4NڽC׿>`.X4Nڃfn_mx$%޴4N;RzmZEVl,4Nuĥj:4N &&jg.4NDht{e(!4NډkGQRc@N4NcMY3a.{4NUb Rk+^(4Nڪ:3D5X4NUHPA(*r_޴4Nц!Pm*+ 4N?l oj,X 4NN4OӉh4 4Nr@Le4 4NjNp8c( 4NکR<a* 4Nhzgy*_,9 4Nv_'\*f 4NsVt1)4NںC S*0WO8ۗGCӗ?;˗7ٖ3{×/і+s'wɖ#kocg[_ SKם@֙ڛfE֢}9}P |QS#ߞO%&"ɜd͘̚X7ȡk&<K5)r%a ǝbƙʛV5Ƣm)mp@۠lACϞ?uTH'[,;џhODHT bQ ٶ:L*92JT u.|1+ir'x>rL袏5% 8؟Tq0 B lgT A,@ HE|z0P.% wLJw2Í1pTdzX SK@U ,RgKn@"hɍ5(; i'c`DzvS}Y)y/ėඈY&;:o8h7,ÉfL }d"vM& W>V' #(HÓ ((v3)Khm&d8g,YQլ2,D._k,$+%`/H#40^aOkc1<y20b3m 9f3/W? 70^Vt8B{<$n<6< ^"U>4 c%J? }?[8Ao %:T=x&SD^gT{9DV, G,.)H$ZJ1w@J^MؑNxo'v:N6C[O9M=ĠOAʭR5j2OZ[;/O}xT~VP)חzZO^d?J3_ H.`t~(0!a0?H3ѥ\bѶ8c\ L10TؠtŸ?}˖zU?3\/:iפEzd \+xؽrtߞ?맄+hXX epT}ra▔E9&23XTNȬ@NUgX0s[st:Z ^W X0:ฎd]G1" fJ:NGVp|X#2#L4\b>\yx0?:X*y|`L+S.ɗj|] CaEz@,-T\/:H >QGAn ntuJ63j-={ }7f" 64)UD FAe'ONmeA?H&f^ d(|!GAZtj(jTVyIoׂZ"(r11B+ d`ȅB#=/oz$!0bHK%u-)~*&qW"FP(}6 M )dmR7+U{W U,mvf.Ll/5PgX2K$3ree4e5ؠ|5ƭ]N6e ?Z7Aϡ3i8Pf5/; Ns=Ѭ r >r=Ae A@ #}Aj ?@Ŏ`(3nEf7yG @[G foXIy)@2JeAIPLxn{M-P<x[Po-<4Q URgcF4SYd`MTeì<(UU d"_;U~0ϱ^uQt3UXX˾Ym#RltxZI%;:d[MtS\2hRZm[mg8w_p}yl`-ʑj_5Lji>Lb)R9ܟY6'W]#2ei,2f%7fql!$9h&kmxj1-im#oUppMgfHq(7*r5k6qft^wʩcsOvɐ5'we o1)Vsq ?_ $zE-zQ~{xavWS| m%yuxMu6rD7`2qðQ >ݑ&Ŋs|ɂJ®Y9,B1yw_sJ-#$}!nDedٳ}|9᷌Yq,< qČtMvauIm|`{A&ȽD'ܼL hT@;̙U0/#*}T!IUn0r# ݠAF*y.$~àMn pF6[C锥>yo`}bXpgYM!RH %2ʮ|>5-͔I7#~E,L%gvrژ=!J+UBE X^6/*uy$9D a 轻}̄x9Kx->W77}BU~ ]pEÛJ>6}Fm$/@nµAP E¡AZ饊y1c M%BǻIm UΎzb|yttέ* ŏoܫ^ڏ'Q~=2_mӑU`'q &M@^7Y6aabkcC q>60m,,܅ܔ7xGI{I W} nj0gg| p\ A٥ ; 噭d ܭDy&7 (~`^|?v1"E)mrJ+f;TY-ubU~ug:hzzl#>2 $$0%fd# :~d='Nlu4% ծ,3)"O}wFظ+ *qh-"HwM.*U- _2vFm3z4jKK5֡iDM2Nit7t7~u}E* wB;")H&N7JFp LM~rMJ %OvdON(ZQ 7{fiRН"R.jS7kG6zS~UNni:LV~/[JX@ Y!-][{-\'\y ]"82^{^)qa`BjXf5b._8bOJ[@d5cegӂdF ظoPeU0h.i'?-ibWk6; 7fk~~m'e~%?hFN5edo^33w0[o6p`q&Ҿtok)qY sLdt:k-t)c*uP{wn~姮w.`:Ny#!pb&B{rB<2{ ,}}}E<}^"w1Qyvl@^6PVz^EPZ]*`$ GA)U¦ G`5Pn@Qh.ogS;\ fQ)7cVoZ{h) n%~pś:C͏:Zyx}B`O=0F}Kz N]F )v Q&cȂA^W}T5]:&T[bG\kj[-R8J]Zz 2^*aLp66eb-cIȢ9TN85z,NrLP>AxIұ',#]wN^7)^'s%$\zzd=1+LSĶNJ 9.ƶrʶz1=!?6# lzI{.o3?q: Z}s̖E8r"Қ[yݽ]#a֬ :՚YD)VˆB= Ns @C3Y ߞfL98431Z:Eh `OS'ZK3NjRf-fHIMSambnۤXBɘh-226?ͯ@4[x}jyI>M]p^ `kX42`ӫq6:y0o.ꎛp+?{EAtG8Rb.&|Hxhb2(6@@N^YF7p{s&Bou`FG ,P?\M+YWK o;> {% ;n0  uMQ5k g(2k=1XS6|bZH K0uw-u|zK{!3ϖ!SAGi(g @pS[%0{ d\_6lB_s/U4!+ .km#1%%{(> S"'2X}(S7C(.Y*' o+q,5}U-#ڼVu//;D09r/#  ~3/O R4ɕ}+5shG3+0N/*.;7Ĺe8W8[G!;>Q-<: #5<d ?OB:?nm~?69 ?o'CJbsD3%+fGGKlIR\ WSXi˪tC{3k/+IO هp#Ww+? 0&fGjHvnϋ2 !$F?L?>D&r`3 \a?EUgvb>fi'Q=싀5JH64,U&?zTx @Xrr oВ;vQCӔk٪xB=l:P<&GlC[]^GnF*Za {[GD7@FPXUHIa(0 `g+iS/1M73+^&cq Z>jQf$O-fa'kEkAj s=nOuIFWL}F&6kq|MLFz)@YKC& L(EbqG:*wOy,*dolJ9-MB@1KF#UC-~.HpflvXkm+Zz 'gEaDK|{+6Brt/]n ~qFD<\)uq.#7VOW"2lO_/Y-]k !Ts+k+q&` ]VMr'Vx{0SA F<7exVBnp38 cSga~h5~} ww} {x "|t\a[bK[z7>k:>Zn*vB 71,$J?3Lu :CSB!8MgBaEx]gb 7pDd\ h_a?O3> uL2R|MGF %N\.M"\Fo.rmQu9iHdo)q\,E_uvZ0Q P z=fdWj>Dz}dW_\\};ms KELN`w- ZfCdK_{lGxgrrpz_,I(?0|dqH{D K/ 0#i 7AOEb<'{|1I#-I.[QIXisHe&aZ$`w "<@VBqPK,3_Xy3mkdkj<.Kro\Mh1m g'd ' c CEjzxRk)<6Dy b9Z0R+6OEuJ"/f 80?lAOA frY} a tU&*lZm(vVU!rCh #15/gz ||.,Vd4B0P@W7c;691 ^&R0";W|YX 9;J!l:P<&GlC[]^Gn`/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/lib.rs 4DkM~~e"09 kon O+!KQQN&OMKPQP.GQ   PPONM-17": TM&. <   PEP9<>8  %K# $.$ Q* RO a   MWQXY .2 NOYS+ +WOQ   VQ? q S 9   UM' YUUUVU YS5 L   ! XX 2 %( ), ?+IUC&& (+8C" @,  + WXOU  0( "!  ) WSC XSL 4 C% WO7 .0>7& SX< 4 C6H&  $ XNQ  ,0 VUYVC  ,2 I @  ,P  : S / 6 T@ . 0$@B  - WY J / V). 5 ;9+/2#,FL&5B L.   2 ?@) <@9 @** 0@2 X"   YUU S %(?", -P L0/ VNVU:   VYA   WY+ K D4+('D1%84 WB Z$6c XX2 !' !_2 ?$@c7 <*@_9 -@c88 0(@c@ M;!.> .> G (;=;=;=4)4$&J4'(': O0QCNFOML2%EEEEEEE /6666666666666666IONQ'HOCM8LPHN %3###%### ,(1A###%### ,)// U ,1// c ,(Q)G'N'IR:JLLNM.R: OO$O'IR:R3: PPMNH7(P'K:M9N,K0SZ'IR:RH [[['IR:RAH \\T76\W:YZ:LPMP3&I6+'7( +'3( +'1( 553453637624583644:252222622558663693636436,O:#DA#2X(E7/78 7/38 7/18 'D'D'B'C'D'B(E'B(F(E'A'C'D(G'B(E(C)C)I'A(D(A'A(A'A(E(A'A(D(D'G(E(E'B(E(H(B)E(B)E'C'B(E8^'I/S--./PA?*Ԕ]7M`/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/ext.rs |hL b'9|Pn+CQ,/<& / 8( <3 !6 ) /N 9 /IC< && /) # 9 9$# < #" "#Oёb[ !k/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/ident_fragment.rs 8x V`DZenX :O0+5:3B% 7%*;%;%*;%%;#2%* %)%;QO& (G/ 2 DﺶRvV%Eff/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/to_tokens.rs  *Xj7OA!1N96I I/, !# 3=OB/-%=OB. 44$84$C4$14$04$+4 ! 4.4)44454545464744454545464745454249<40404%4%4%4%4% 410 MzE򝩖d/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/runtime.rs b-1X[8]",4t~:6<-#1 3N1[&<I<7*7OONO-[9M16 .CK%MH1* @$ 7N*%?T@< X@< 3(@# 6(@# ;,@# N@% OH QOI.%./.4" ,-'7;-+ #, &) #'+ (&+ X1.2C"FCF9F!=4 ' 7")K-A)3$M$U U)3$K47$M 01? @@"" :1?? @@""@"" D1??? @@""@""@"" ,6,86*.0:060,6,26B*4.*.*6.*440666,6<.0:0:.,638G*N954.! P=LO:1)B;'M;$S;'S;'O;%PW¬G^d/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/spanned.rs  t~u$^!s2#&K%+--;$*.+'!/qAYMzc/Users/filozopdasha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/quote-1.0.37/src/format.rs "SaC '𜥺}%%0  PO"!,22.+ PCN&N," PL*Q=+J7 4. 6 L +3%&?. /"/ 0#3#3#%- #%-!%%3 6CD%O=DK?h /<=?` !ݥY$z-D- p{{2aarch64-apple-darwin"y_Goj -2c511c7851db29244N ; 1             B)HRCCrust-end-file