rust#rustc 1.72.0 (5680fa18f 2023-08-23) }ޱL{ :-8f88c761e33f2651ՆQ4-46a989d0e2cef827e$ɛDp>-b114db70ea0690b1rustc_std_workspace_core ūu sR-13da980d6c74fec5YnFmZܝ--649be05783c8912epWĪ9/-f002c8f83a289c4b &c~~*ĽVa-682387162b570769cfg_ifz$kdgK!--05a2cedbb78c1d4f miniz_oxidePnzn )m-9c3df673b2797081adlerA%lon  2-c6afbee8d1102512 hashbrown8*^| -356231f77d1e268arustc_std_workspace_allocL%gqG-80ed5799bf463787 std_detecta^Ʒc -1bccb7a942e1b311rustc_demanglekŗ,N/ST%L)-bc6864da821ce9a2 addr2line2Ȃ']51:.-4930b3dc482158f7gimli~2)F25˼-65bea4bb6af40828object^]UVW-919f89587cbed68dmemchrk/YO+-c6624cb4360306cdBhnge],Q-f9018f9cee1cc5ff ra_ap_base_db'԰iv6*7-70dc51dfb1627db5 ra_ap_cfgRLyXAÏ-a2231d74cccce03ara_ap_tt2A{O㙄DpZ-95a48426c4aa19b2 ra_ap_stdx 'Pfɏ!q-b017dbf676586648crossbeam_channel]M7~43?=E-6c67fe97bba3c9a7@-֊x,Rtx/q-a4949322dd83a0a2crossbeam_utils(-y m -84249e0e9ac2b2ce always_assert$j8-65ae3abe15b00112logmc$x-13e3634f7ef0e600b5Xܤ*-7210a355a56b809e jod_threadnVKE _>O -11b02a95070c5ddcsmol_strW7j|oie-e6d74db7d1cc33dd rustc_hash58'Rs>Jf-3af456ac9bcd35b4la_arena`#KZ1+-a784823c4fd97188 ra_ap_syntaxR&\>Q{ţlך?-103466638c6acb99rowanyYg-d400440195fa84decountmeA3=R -9b2291fcdd8ce9f4dashmap䮺eOP-344a8a548e9a545dHzxɴ*&D -aca6f9a6d0bd5465parking_lot_core9>=+B:-7ca89be774061ef8smallvec{HOtigs'>-6bafc1f5ba881d1e once_cell``sN̘-241bb06069d00240lock_api}!!! >)-e32fa02b9aa025cdfst|E/Wߙ-e64fe6920c1635e9 nohash_hasherkkpm;ݮ؆a"-fd49e62d6f3f7b3f ra_ap_pathsjBUBd-2jc,-cf4bb8d06a2bb8absalsaٙt: 0A>?%F-60ab5d25f2338d8f salsa_macros[ysHF-d0f3d0c8c71a67c8oorandom'JP+goD-36eaa854f44203eera_ap_test_utilsMpO=Q-812563dcc128d961 dissimilarD4Zd-230cc7f8a223edad ra_ap_hir1Vx1~I=,-edae03fad1a50b0c ra_ap_hir_deffY~D?WM')-8fc7a9f91886a66dra_ap_hir_expand|=?*K1-d20da1e421df12b9 ra_ap_mbe~UL"D *-U-9603ede0cef2048ftracing]NՃO>-6f7142aa2f87a903 tracing_core]=b؅O/-b140d1c411ab0f47tracing_attributesX ه8Ym-3572d089d3d647e7pin_project_lite§m3&-280531a4fb67617f ra_ap_intern`.kþQ^L-9c668066375af4d3anymap?X\P=-80dde0ef59998ff6bitflagsζ7- +3|-0f7868c5b524725chkalbasi_rustc_ap_rustc_abi;3,Ǎ[RzBJ?-68ab1e1150c6751c$$1E$IkO-1926cec1a16924e0hkalbasi_rustc_ap_rustc_indexd 9=f`I)vE-88a203a5a12900f0arrayvecH@SN-6916d94f783ab2b2 ra_ap_hir_tyyD3L{t[-b976aa507773c9aechalk_ir$80ôWp4-d2d80f9bc4c64ef6rayon k1!޵!-578767c0fedc52b0 rayon_cored9p:$h?-574184024b36bf9ccrossbeam_dequeaP8Zfs-7926fedf4422960acrossbeam_epochk?hE#YOC-a936221dcc85b2c4^Bt`񊠂70V-735a9caf36edca0dnum_cpus9~*gT1-b0cb8786c0b38c00 line_indexǏ{-yL$K-404becd5784b144etestsYYYY YYY -       -M>>B BB< -8888 888 -llll lll   apply_change     request_cancellation0per_query_memory_usagecollect_query_count'qQ EntryCounter  !K!V!$purge_each_query active_parameter(((((((((( ( ( ( ( ((8at_token8: (callable_for_token< = (callable_for_node? ? (generic_def_for_nodeB B B assistsFFFFFFLcontainsLFOOfrom_strFRshould_resolvedefsTTTTTTTTTT T T T T TTTTTTTTTTTTTTTTTTT T!T"T#T$T%T&T'T}canonical_module_path~ }krate}} visibility}T classify_nodeclassify_tokenclassify_lifetime  definitions definitions_no_ops Tdefinedclassify classify_itemclassify_ident_patclassify_rename7 Tclassify_awaitclassify_prefix classify_tryclassify_index classify_binT8  7  TT as_assoc_itemTTT  famous_defs     FamousDefs 'a'b     core_cmp_Ordcore_convert_Fromcore_convert_Intocore_option_Optioncore_result_Resultcore_default_Defaultcore_iter_Iteratorcore_iter_IntoIterator core_itercore_ops_Derefcore_ops_DerefMutcore_convert_AsRefcore_ops_ControlFlow core_ops_Dropcore_marker_Copycore_macros_builtin_derivebuiltin_crates find_trait find_macro find_enum find_modulefind_lang_crate find_def  helpers      item_namepick_best_token  pick_tokenmod_path_to_ast  visit_file_defs    lint_eq_or_in_group is_editable_crateget_definition items_locator   DEFAULT_QUERY_SEARCH_LIMIT items_with_name<  find_items<   path_transform     TypeOrConstEither  Const   LifetimeName PathTransform< generic_defsubsts target_scope source_scope< trait_impl function_callgeneric_transformationapply apply_all< build_ctx    Ctx< type_substs const_substslifetime_substs target_moduleH postorder H transform_default_type_subststransform_path   get_syntactic_substsget_type_args_from_arg_list find_trait_for_assoc_item rename      E _format_err!_bail"Lrange_for_rename name_rangeD rename_mod  rename_reference  source_edit_from_referencessource_edit_from_namesource_edit_from_name_ref source_edit_from_def 8rust_doc is_rust_fence  search      !"is_empty  file_ranges  ItemIntoIter crate_graph reverse_dependencies 7 module_and_childrenempty single_file file_rangefiles  intersection  RR search_scope             usages< include_self_refsin_scope set_scope at_least_one  P         match_indices<  scope_files<           found_self_ty_name_reffound_self_module_name_reffound_lifetimefound_name_ref found_name def_to_ty is_name_ref_in_import   source_change      from_editsfrom_text_editinsert_source_editpush_file_system_editget_source_editmergeextend [ SourceChangeBuildereditfile_idYtrigger_signature_help mutated_treesnippet_builder TreeMutator immutable mutable_clonemake_mutmake_syntax_mut edit_filecommit] ] deleteinsertinsert_snippetreplacereplace_snippet replace_ast create_file move_file\add_tabstop_beforeadd_tabstop_afteradd_tabstop_before_tokenadd_tabstop_after_tokenadd_placeholder_snippet add_snippetfinish PlaceSnippetBefore  After  Over  place make_tab_stop symbol_index      only_typeslibsexactcase_sensitivelimitlibrary_symbols  module_symbols crate_symbols Snap DB eee world_symbols    H   memory_sizerange_to_map_valuemap_value_to_range P traits  resolve_target_trait get_missing_assoc_items   convert_to_def_in_trait as_trait_assoc_defassoc_item_of_trait   ty_filterALL from_ty  happy_case sad_pattern happy_patternhappy_pattern_wildcard use_trivial_constructorkimports import_assets     exact_case_sensitivetextfor_method_callfor_exact_path for_ident_patfor_fuzzy_pathfor_fuzzy_method_callimport_candidatesearch_for_importssearch_for_relative_pathspath_fuzzy_name_to_exact search_for    scope_definitions path_applicable_imports  import_for_item  item_for_path_searchfind_import_for_segment module_with_segment_nametrait_applicable_items     assoc_to_item get_mod_pathmfor_regular_pathfor_namempath_import_candidate item_as_assoc  insert_use     find_insert_use_containercontains_cfg_attr  as_syntax_nodeclone_for_updater "ast_to_remove_for_path_in_use_stmtremove_path_if_in_use_stmtguess_granularity_from_scope   insert_use_           is_inner_attribute  merge_imports    is_tree_allowedtry_merge_importstry_merge_treestry_merge_trees_mutrecursive_merge            common_prefixpath_cmp_for_sortpath_cmp_bin_searchpath_cmp_short use_tree_path_cmp path_segment_cmp   eq_visibilityeq_attrs      path_is_self path_len generatedlints LintGrouplintchildren DEFAULT_LINTSDEFAULT_LINT_GROUPS RUSTDOC_LINTSRUSTDOC_LINT_GROUPSFEATURES CLIPPY_LINTSCLIPPY_LINT_GROUPSsyntax_helpersnode_ext     expr_as_name_reffull_path_of_name_ref  block_as_lone_tail  walk_expr  preorder_expr  walk_patterns_in_exprwalk_patwalk_tyvis_eq   single_letis_pattern_cond for_each_tail_expr       for_each_break_and_continue_expr for_each_break_expr  eq_label_lt TreeWithDepthIteratorpreorderdepthR parse_tt_as_comma_sep_paths     macro_call_for_string_tokeninsert_whitespace_into_node    insert_ws_into              is_text format_stringis_format_string lex_format_specifiers        skip_char_and_emitIF read_integer܅read_identifier܅read_escaped_format_specifier܅format_string_exprswith_placeholders parse_format_exprs       FxIndexSet  FxIndexMap 2 2   upcast    file_text  resolve_path relevant_crates <  enable_proc_attr_macros update_parse_query_lru_capacity update_lru_capacities  update_lru_capacity_per_query  snapshot-      CALLSITE  META(ActiveParameter   ( FAssist id  group   Y \F F F AssistKind   QuickFix  Generate  Refactor  RefactorExtract  RefactorInline  RefactorRewrite F F FFF  F F  FAssistId     F  F  FFF FF FAssistResolveStrategy   All  Single   F F SingleResolve  assist_id  assist_kindF F GroupLabel   F F T Definition Macro    Field    Module    Function    Adt    Variant    G    Static    Trait     TraitAlias     TypeAlias     BuiltinType    SelfType     GenericParam    Local    Label     DeriveHelper     BuiltinAttr     ToolModule   T  T T  T T TT T  T IdentClass  NameClass     NameRefClass    Operator   T  Tؖ ̑    ConstReference    PatFieldShorthand  local_def  field_refT T OperatorClass Await    Prefix    Index        Bin   T T ̑    FieldShorthand  local_ref T      T T T T T T T T T T T  T! T" T# T$       AstSubsts types_and_consts  < RenameError    IdentifierKind Ident  Lifetime   Underscore    UsageSearchResult  references  <   FileReference range  category    ReferenceCategory Write  Read  Import          SearchScope entries   FindUsages < def sema scope assoc_item_container include_self_kw_refs search_self_mod <  SourceChange source_file_edits file_system_edits  is_snippet  <    SnippetBuilder places  <FileSystemEdit  CreateFile dst initial_contents MoveFile src  MoveDir ڤ src_id    Query query  lowercased c d d d d  SymbolsDatabase d d d  local_roots set_local_roots set_local_roots_with_durability  library_roots set_library_roots !set_library_roots_with_durabilitySymbolsDatabaseStorage  DynDb  GroupStorage  e d __shim d Ȩ d Ǧ Ȩ ڦ Ȩ  Ȩ  Ȩ  Ȩ Ƨ Ȩ  in_db  in_db_mut 'd  Group  Key Value Storage  QUERY_INDEX  QUERY_NAME  query_storage < execute         Ϊ ݪ   <          Ϊ ݪ   <         Ϊ ݪ   <SymbolsDatabaseGroupStorage__ d d Ǧ     fmt_index maybe_changed_since for_each_queryModuleSymbolsQuery ! <" LibrarySymbolsQuery # <$ LocalRootsQuery % <& LibraryRootsQuery ' <(  SymbolIndex symbols ) <TryEnum     ImportCandidate     TraitAssocItem     TraitMethod    TraitImportCandidate  receiver_ty assoc_item_name PathImportCandidate  qualifier  FirstSegmentUnresolved  fist_segment full_qualifier   NameToImport Exact      Fuzzy        ImportAssets n candidate_node module_with_candidate   LocatedImport  import_path item_to_import  original_item  original_path       ImportGranularity Preserve  Crate    R  InsertUseConfig granularityenforce_granularity prefix_kindskip_glob_imports      ImportScope    Block   ImportGroupStd  ExternCrate  ThisCrate  ThisModule  SuperModule ImportGranularityGuess R   ModuleOrItem ָ  CrateOrModule  MergeBehaviorָ  Lint descriptionFormatSpecifierOpen Close Integer  Identifier Colon Fill Align Sign  NumberSign Zero  DollarSign Dot Asterisk  QuestionMark Escape Arg Placeholder   Expr  StateNotArg MaybeArg   MaybeIncorrect  FormatOpts  RootDatabasestorage__SalsaDatabaseStoragesource_database_ext_storagesource_database_storageexpand_database_storagedef_database_storagehir_database_storageintern_database_storageline_index_database_storagesymbols_database_storage <DatabaseStorage ops_databaseops_salsa_runtimeops_salsa_runtime_mutïޯ group_storageLineIndexDatabase-LineIndexDatabaseStoragee-ȨΪݪ<LineIndexDatabaseGroupStorage__- ïޯLineIndexQuery !<" SymbolKind Attribute  G  ConstParam Derive  Enum   Impl   LifetimeParam  ޑ   SelfParam   Struct ؕ  ȓ   TypeParam Union  ValueParam  #$%&'()*+, SnippetCap_private-./0123777779797:7<7<7?7?7?7?7B7B7B7B7N7Q7S7S7~7~7~ 777777777777777777777777777777777777777777777777777777777777777777777777777 777777777777 7777777777 <7 <777777777777777 77 7777777777777777777777777777777777777777 77 77777777777777777 <7 <77777777777777777777777777777777777777 7 7 7 77 777 7 777 77777777777777777777777777777777777777777777777777777777777777777777 777 7777777777 7777777777777777777777777777777777777777777777777777  777777777777777777777777777777777777777777 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 77777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777 82   CѤ ZJJ TableEntryJkeyJvalueXuRj22G    s#% apG  ʌ ،    Y \ϧG     ō  ڍ        *fg.K[G      - q$G         1G  Ґ  U}     tbؿ^"GԂG   ޑ            ʒ      G         ȓ                ”                ؕ  NIG   ؖ        xY !G   ̑       ӶG               ř  (Ӎ.G   ̑    ?Y&SSSparentSS،StK* SSS،Sn 7}SSS،SQY7P$SSSS SSS SSS m8U SSSʼnSS،S t>SSGS،SYbSLSSS،S7h{RSSS،SS$ASSȓS،S`ݤt>SSS،SD$SSSSinnerSPюK2ћSSSʼnSS binding_idSC\QcSSSS SSS SSS MSSSʼnSSlabel_idSTZMsSSޑS،Sb5W%SSS،SS SSSS SSGS SSS j~SSSDefS SSS SSS SSS SSS SSS SSؕS SSS 2(GMS SSS SSS SSʒS SSS SSGS SSS SSS SSȓS SSS SS S SSޑ S ԭ{M      >u ԖԖ 7888 *&j5d9eԖGԖGԖ   ɜ âGMG     L<ᨽG     ʝ  ߝ 9ݏ*ؘGؘؘؘؘG   8<~řř8řG     &g'U\G       _x+dΚΚΚΚΚΚΚIΚ   6mN~-"2Gӛ8ӛ   ɡ ԡ    WqE <  Ѣ   spG8FFFFileIdF F{8E8ETextEdit8Findels8wg8     ʤ ڤ   ڤ  ^$a4base:QF֝JJJBuildHasherDefaultJ I È樒THHH NoHashHasherH HH HH H d>!֝8ԝ  ϣ 7g& VGžžžG   ĥ ѥ c d d d djhJ  .Vz^ e    X͕JGJ JJ    ;kGţJţ JţJţ    ɖgA rGJ J    !K(qGJ Je  3ÍnJ J SnapshotJ dbJ+c6@e  3Ín  ѱ  g 'FGͦͦͦͦIͦ     ITrgG           B5:G   ڳ r=7G    rA6lG  Ҵ  G G       ݵ  G   n  öܘU2G      $X I     ָ    R y 6PAGƹݹu V#GG    ?RƼݼL_RָB92CGָeqXG0񢨙9ƁJ+G     >جG   K\GtH"̜t=(J駯V0%JJSourceDatabaseExtStoragegUSEJSourceDatabaseStorage NؠJUUExpandDatabaseStorageD]q"JT"T"DefDatabaseStorageJb.b.HirDatabaseStoragexEBJTTInternDatabaseStorage벛J~%ay|JâGUT"b.JJJɻ dHGJJJGG    ޑ ؕȓj(E 7vƽƽƽƽƽƽƽIƽƽƽƽƽSSS DeclarativeSSSSBuiltInSSAttrSSГk4ƽTS TSTSModuleIdTS TSTS FunctionIdTS TSTSAdtIdTS TSTS EnumVariantIdTS TSTSConstIdTS TSTSStaticIdTS TSTSTraitIdTS TSTS TraitAliasIdTS TSTS TypeAliasIdTS TSTS TS TSTSMacroId TS cb¨tYL?S'G                       O  !                                                                                                                                       8                        J J#JJJJJ8JJ#S  [8 [G.iI #T8~G98  T)ބW)ބW)߄W)߄W)߄W XXMetadataXXX XXlevelXXXXXXXXfieldsXXXЙ9)ބW)ބW)-W )-W)&W X3)-W)W)W)W(ΑW (ΑWXXDefaultCallsiteXinterestXX registrationXXXXXP X*> X ,*>X1>X1>X 1>X 1>Xra_ap_ide_db::apply_change1>X *>X *>X*>LX 4W 4W 4W 4W4W  4W 4W  4W   4W 80'X) W) W) W)W)W)W ) W) W) W X )W80'X X81X*>LX *>LX*>X X  *>LX*?X*?X *=X *=X*=X X-Wtevent /home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/apply_change.rs:25tt#WXXXXLevelX X ܬv| (͓WXXXXKindX X u#Ո*=X *?X *?X*?X*?X*?X)W)W)W )W )W)W)W )W)W.W.W {-P*= X,, {-P*> X*>X1>X1>XXXFieldSetXXXcallsiteXp<2H*>LX4W4W4W4 WXXXX NHX80'X) W) W) W)W4W)W#WX(͓WX4 W 6Wmessage4W4W )W4W4 W4W(W(W(W(W X"( W(W( W(cW(W X(cW(W (ʖW(W(W   7XXValueSetX XXXp+ц7(ʖWXXX XXXp+ц(̖ W(W(W(cW(W ( W value_set(̖ W(W(ʖW JJJ QueryTableJJJJ9S坫2! table  8  98& $ ?CCCBytesC C P&O? ?'>Reverse ĭ? '  > >?it>>    ""Name"syntax"I~  ",",",IdentPat", ",",BoxPat", ",",RestPat", ",", LiteralPat", ",",MacroPat", "-"-OrPat"- "-"-ParenPat"- "-"-PathPat"- "-"- WildcardPat"- "-"-RangePat "- "-"- RecordPat "- "-"-RefPat "- "-"-SlicePat "- "-"-TuplePat "- "-"-TupleStructPat"- "-"- ConstBlockPat"- WRc,  "("("("=䟋d  " ;|8 {-P;  :::: ::: džAK" " " "w^|( param|   ""3"3"3Call"3 "3"3 MethodCall"3  ) l  B # # SyntaxToken# >## _p#n" mNa v B > "&"&ArgList"&"&%2R l  ?>  Q =   =      {-P  B  token   _ref__token     "      #      #     ,  =  ,! $    B> B   B ,, TextRange, ,,,E\h=  # # SyntaxNode# >## #mBW    ,,TextSize,>,3(   B   B݁ #M.M.@ ... TOMBSTONE..EOF.. SEMICOLON..COMMA..L_PAREN..R_PAREN..L_CURLY..R_CURLY..L_BRACK..R_BRACK ..L_ANGLE ..R_ANGLE ..AT ..POUND ..TILDE..QUESTION..DOLLAR..AMP..PIPE..PLUS..STAR..SLASH..CARET..PERCENT.. UNDERSCORE..DOT..DOT2..DOT3..DOT2EQ..COLON..COLON2..EQ..EQ2 .. FAT_ARROW!..BANG"..NEQ#..MINUS$.. THIN_ARROW%..LTEQ&..GTEQ'..PLUSEQ(..MINUSEQ)..PIPEEQ*..AMPEQ+..CARETEQ,..SLASHEQ-..STAREQ... PERCENTEQ/..AMP20..PIPE21..SHL2..SHR3..SHLEQ4..SHREQ5..AS_KW6..ASYNC_KW7..AWAIT_KW8..BOX_KW9..BREAK_KW:..CONST_KW;.. CONTINUE_KW<..CRATE_KW=..DO_KW>..DYN_KW?..ELSE_KW@..ENUM_KWA.. EXTERN_KWB..FALSE_KWC..FN_KWD..FOR_KWE..IF_KWF..IMPL_KWG..IN_KWH..LET_KWI..LOOP_KWJ..MACRO_KWK..MATCH_KWL..MOD_KWM..MOVE_KWN..MUT_KWO..PUB_KWP..REF_KWQ.. RETURN_KWR..SELF_KWS.. SELF_TYPE_KWT.. STATIC_KWU.. STRUCT_KWV..SUPER_KWW..TRAIT_KWX..TRUE_KWY..TRY_KWZ..TYPE_KW[.. UNSAFE_KW\..USE_KW]..WHERE_KW^..WHILE_KW_..YIELD_KW`..AUTO_KWa.. DEFAULT_KWb..EXISTENTIAL_KWc..UNION_KWd..RAW_KWe..MACRO_RULES_KWf..YEET_KWg.. INT_NUMBERh.. FLOAT_NUMBERi..CHARj..BYTEk..STRINGl.. BYTE_STRINGm..C_STRINGn..ERRORo..IDENTp.. WHITESPACEq..LIFETIME_IDENTr..COMMENTs..SHEBANGt.. SOURCE_FILEu..STRUCTv..UNIONw..ENUMx..FNy..RET_TYPEz.. EXTERN_CRATE{..MODULE|..USE}..STATIC~..CONST..TRAIT.. TRAIT_ALIAS..IMPL.. TYPE_ALIAS.. MACRO_CALL.. MACRO_RULES.. MACRO_ARM.. TOKEN_TREE.. MACRO_DEF.. PAREN_TYPE.. TUPLE_TYPE.. MACRO_TYPE.. NEVER_TYPE.. PATH_TYPE..PTR_TYPE.. ARRAY_TYPE.. SLICE_TYPE..REF_TYPE.. INFER_TYPE.. FN_PTR_TYPE..FOR_TYPE..IMPL_TRAIT_TYPE..DYN_TRAIT_TYPE..OR_PAT.. PAREN_PAT..REF_PAT..BOX_PAT.. IDENT_PAT.. WILDCARD_PAT..REST_PAT..PATH_PAT.. RECORD_PAT..RECORD_PAT_FIELD_LIST..RECORD_PAT_FIELD..TUPLE_STRUCT_PAT.. TUPLE_PAT.. SLICE_PAT.. RANGE_PAT.. LITERAL_PAT.. MACRO_PAT..CONST_BLOCK_PAT.. TUPLE_EXPR.. ARRAY_EXPR.. PAREN_EXPR.. PATH_EXPR.. CLOSURE_EXPR..IF_EXPR.. WHILE_EXPR.. LOOP_EXPR..FOR_EXPR.. CONTINUE_EXPR.. BREAK_EXPR..LABEL.. BLOCK_EXPR.. STMT_LIST.. RETURN_EXPR.. YIELD_EXPR.. YEET_EXPR..LET_EXPR..UNDERSCORE_EXPR.. MACRO_EXPR.. MATCH_EXPR..MATCH_ARM_LIST.. MATCH_ARM.. MATCH_GUARD.. RECORD_EXPR..RECORD_EXPR_FIELD_LIST..RECORD_EXPR_FIELD..BOX_EXPR.. CALL_EXPR.. INDEX_EXPR..METHOD_CALL_EXPR.. FIELD_EXPR.. AWAIT_EXPR..TRY_EXPR.. CAST_EXPR..REF_EXPR.. PREFIX_EXPR.. RANGE_EXPR..BIN_EXPR.. EXTERN_BLOCK..EXTERN_ITEM_LIST..VARIANT..RECORD_FIELD_LIST.. RECORD_FIELD..TUPLE_FIELD_LIST.. TUPLE_FIELD.. VARIANT_LIST.. ITEM_LIST..ASSOC_ITEM_LIST..ATTR....USE_TREE.. USE_TREE_LIST..PATH.. PATH_SEGMENT..LITERAL..RENAME.. VISIBILITY.. WHERE_CLAUSE.. WHERE_PRED..ABI..NAME..NAME_REF..LET_STMT..LET_ELSE.. EXPR_STMT..GENERIC_PARAM_LIST.. GENERIC_PARAM..LIFETIME_PARAM.. TYPE_PARAM..RETURN_TYPE_ARG.. CONST_PARAM..GENERIC_ARG_LIST..LIFETIME.. LIFETIME_ARG..TYPE_ARG..ASSOC_TYPE_ARG.. CONST_ARG.. PARAM_LIST..PARAM.. SELF_PARAM..ARG_LIST.. TYPE_BOUND..TYPE_BOUND_LIST.. MACRO_ITEMS.. MACRO_STMTS..__LASTe! ĉĉ@ @  ‰ĉ‰M.tM. .M.M.@‰M.ĉM.M.      44 4A8  A8 88݁((((M.M.C‰((ݹ((C(( C((‰(ĉ(‰M.((M. .M.M.C(‰M.ĉM.M.(( ( ((((( ((  ( (((((4(4(4(D(8 ( D(8((((((((8((8݁) aY)/ **E)5)E "*"*"*TypeArg"* "*"* AssocTypeArg"* "*"* LifetimeArg"* "*"*ConstArg"* ^RG)5)a`Y*arg))5  Ԗ Ԗ {-PԂ     '  {-P ' '   '           Ԗ Ԗ   '  '                              __self_tag  __arg1_tag                       % % %  % %  % %Ԃ% Ԃ%%  % %%,            B   B    C  C   D  D   E  E   F  F   G  G   H  H   I  I  J  J  K  K   L  L  ! M  M  " N  N  # O  O  $ P  P  % Q  Q & R  R ' S  S ( T  T ) U  U *VVޑWWޑ +XXYY +Z Z[![  !+\"\]#] "#+^$^ʒً_%_ʒً ًً$%+`&`a'a &'+b(bGc)cG  ()+d*de+e  *++ f ,fݍ g -gݍ    ݍݍ,-+  h .hȓ  i /iȓ     ./+  j 0j Î k 1k Î    ÎÎ01+  l 2l  m 3m    23+  n 4n ̑ o 5o ̑   ̑̑45+  p 6p”  q 7q”    67+  r 8r s 9s   89+  t :tՐ u ;uՐ   ՐՐ:;+  v <vSSSSSidxS< w =w   <=+  x >xSSS7SSS ) G y ?y   >?+  z @zؕSSؕS7SSS8Ĝ { A{ؕ   @A+                           |                              ă   ً  ߄  ݍ      Î ۅ     ̑       ׆  Ր          Ӈ                                                           *    __self_0__arg1_0 !"#$%&' ( ) * +  ,  -  .  /  0  1 2 3 4 5 6 7 8 9 : ; < = > ? @ A               I    ؕ   I ޑ I I  I   I  ʒً Iً   I  G I   I ݍ    Iݍ  ȓ     I   Î    IÎ       I   ̑   Ȋ  ”    I     I  Ր   IՐ     I     I    ă߄  ۅ    ׆    Ӈ                           b.   S     8444buf040bW`(666Global 7C\ w  %  ;11R101phantom01cap0101010+qg A   *Rev0Nпd]   *  ݯ   *   *_ref__db/ SS SemanticsSSimpSGH4_/  ""ʝ""[X/0/ /0/N/ ? /е// /Q {-P/  մ/Q {-P/0/Qմ/Qԡ*-մ/Q _ref__sema_ref__lifetime88մ8,8 8,8G9 ? 9998J88J {-P8,8Jմ8Jԡ67մ8J9999992BBBBBB2vմvv  ,״v vvv մvմvuմv݉ ""NameRef""D ݉  , ډ݉ډډname_refډ_ref__name_ref  " """"݂L "" PathSegment"".t1- ! :- _  :0  :3 :ė ̕ѕ  :::: ::: džAK͕̕:::: ::: džAK_:::: ::: džAK!͕֚̕ Ԛ  SSTypeSSS SWhƈ=Ԛ՚ ֚Ԛ    {-P ɢ â  ÎÎ Î â) {-PÎâ    Îassoc    S  !!  U  ! "    Ť "  Ť  == SmolStr  #F9)  =̤  ̤ ̤̤ͤ ̤ ̤ E E    ÎEۅ !! U U U U  U 7!Î """ TokenText" " HPEEsema__dbE_ref__sema__dbڿҪմҪ۪ ۪ ϪҪϪմϪ֩մϪ "  {-P״ "!"!"!"ߗľ8 #  >:>:F><p>>=>gG1 CrateGrapharena^&B /# #   # # # SSָS،Sa k# #  !!Idx!>!!_ty!x3'~ CrateData  root_file_idedition  display_name cfg_optionspotential_cfg_options dependenciesorigin is_proc_macro target_layoutchannelYSES# # #  # #$ RustcrepoLibraryLang rPUesۓ$  AllocCoreTestOtheriF$ $  $  #A #A   #A $  $ $  #G #G #    SSCrateDependencyS7S")#G #  #$ #  # # # # $ $ $ #G #G dep# R" ! #G _ref__crate_graph _ref__origin) )  ) )  S ) ) )   {-P) )  ) ) l) )  ) )  ) ) ) )   {-P {-P,k ) )   ) ) )    ) )  )   *  )  *  )  *  * )  * ) ) ) ) ) ) ) )   Ӳ) ) ) l c uty) ) ) ) ) ) ) ) ) ) ) child) % segment( )  )  ) )  _ref__segment+ + SSS ModuleDefS SS”S SS ImplSelfTypeS SS AdtSelfTypeS SSS SSS SSvږ7e+ + + + + + + + + + + ++ ++ + +    ++  + + + + + ++ trait_% + _def+ ++  _ref__trait_  impl Fn(SyntaxKind) -> usize '   :# # # # # #  # # Between#  #   4UW    {-P    tokens            ĉ          ĉ        : "      t t  {-P     t      "                       &   "& :   ":    D D    D  &      D      ̑            ̑ ̑    impl_ cb  _ref__cb   ƅ           ̑     ̆    # # # #        S  $  # # )     )  #     ) )  is_root  )  _ref__is_root                    mac ̆         $       {{{)9Cu|$     $ lint_is check $  _ref__lint_is    0 ( > > 0 0 Limit0 upper_bound00 max0  > 7 7  7             G    TLTLTLIncludeTLTLExcludeTLTLAssocItemsOnlyeN<   G               S    8    ?CrateDisplayNamecanonical_nameZH  ę   8    G {-P       {-P   G  !( GG formatterG1 2 7e  !(!(  !(!( G !( =  %   =!  ! ! !    Z Ę  IpiecesEEE4&w\NF!(7 ܝ!( !(!(      8  8  {-Pę       7   Ę    assoc_item_search 7 Ę d res   _ref__name_ref__assoc_item_search _ref__krate _ref__limit7  7 Name: 7  , crate:  7 , assoc items: 7  , limit:  7 7  7 7 7       ,ę              ę   ę             SSSTypesS SSValuesS SSMacrosS wsIdy         6 5    :::: ::: džAK     external_importable  module_def  macro_def            S               ) )   > )  )   >       SS FileSymbolSSɡSlocScontainer_nameSis_aliasy֋     {-P)    )       candidate             ޑ   S       ?          local_candidate ֬ ɡ           Ԗ      " "  444040bW`(F G "1_h^r"    444040bW`("""";iP         "                  8(impl IntoIterator   :     98                                 d : (  GGGGHܬUOM$  IIIIJH:恒S|     {-P   :       nodes ctx  node       S    444040bW`(SSTypeOrConstParamS،S*pJ   SSSS SSʒS SSS SSȓS SSS SSS SSS SSGS F[T+      C! I! ! J! ! K! ! L! ! !  {-P ! ;! !  S;! !  !  :::: ::: džAKSSS،SnPlSSS،StM20; !  A!  ! )A! <!  <! "A!  !   A! =!  =!  )"  " >"  >F""""CNR" I" " "  "  " "  " 4" I" " "*"*"* ArrayType"* "*"* DynTraitType"* "*"* FnPtrType"* "*"*ForType"* "*"* ImplTraitType"* "*"+ InferType"+ "+"+ MacroType"+ "+"+ NeverType"+ "+"+ ParenType"+ "+"+PathType "+ "+"+PtrType "+ "+"+RefType "+ "+"+ SliceType "+ "+"+ TupleType "+ "#! ? Ξ:QFJJJJ I È樒T  FxHasher  Wly# # #   /# #! #  ?  /# #  /# 4# $ @$ J$ $ $  S@ $ $  $ 8$ J$ $ %< % A% B% B% %  TLTLTL7TTLTTLlocal_id> fg,.% %< %  bA% .%4 %A %  Bb=b=b= PathNotFoundb=b= UnknownTypeb=b= Generatorb=b= OpaqueTypeyÀ.% %B $  $ $ %@ C& &  %-& & $%& &  "$#-& &) "#&) &  " "!,& %@ & C! ,&4 &  ,& #-& D 444040bW`(& &  5D&B-& ' .' 8' '' E' (EF( K( ( ( ()( ( * )( *<( K( ( +)(+ F Ξ:QF( 0+( (  " 0/+( ( ./( (  .-+( (+ (  F'-, +( ( ,!+( +<) 1) G) 2GG""""79k) L) ) *  " 23#* ) 4 3) 4$@) L) ) 53"+!"+"+ ArrayExpr"+ "+"+ AwaitExpr"+ "+"+BinExpr"+ "+"+ BlockExpr"+ "+"+BoxExpr"+ "+"+ BreakExpr"+ "+"+CallExpr"+ "+"+CastExpr"+ "+"+ ClosureExpr"+ "+"+ ContinueExpr "+ "+"+ FieldExpr "+ "+"+ForExpr "+ "+"+IfExpr "+ "+"+ IndexExpr "+ "+"+Literal"+ "+"+LoopExpr"+ "+"+ MacroExpr"+ "+"+ MatchExpr"+ "+"+MethodCallExpr"+ "+"+ ParenExpr"+ "+"+PathExpr"+ "+"+ PrefixExpr"+ "+"+ RangeExpr"+ "+"+ RecordExpr"+ "+"+RefExpr"+ "+"+ ReturnExpr"+ "+"+TryExpr"+ "+"+ TupleExpr"+ "+"+ WhileExpr"+ "+", YieldExpr", ",",YeetExpr", ",",LetExpr", ",",UnderscoreExpr ", MP`Ì-- H- :5- .  " :9%*. - 89- . 87&*. -- - H176'*- . 6(*. 5@/ . 50( +0& #-' .' 0# 0! # I# # )# I13# 1# M # M21' J' ' )' J57' 5' N ' N65) K) ) )) K9;) )9) O )) O:9. L. . ). L=?. 3=. P 3. P>=/ &  ! ! " "R # $ % ' (\ ) *  Q!   ! ! ! ! ! ! ' ' " " " "  "  {-P" " " #! #  # #  {-P$ $ $ %B %A    'w%<  %< % % $ $ %@ &) &) & & & & ' ' ( ( (  {-P(+ ( ( ( ( )  )  {-P) ) ) -- - - -  - ! ! ! ! ! ! ! ! ! ! ! ! ! ! # ' ) . # ' ) .  I  source_module  default_types I k! v! "  "   " # <$ <$ ' '' ( ( +) 1) 2) 5! _ref__type_substs_ref__source_module_ref__default_types_ref__const_substs0 0 0  S 0 1 0 444040bW`(SSS،Sͽa0   0 0 0 0  0 1 Ň1 1 1 1  S 1 1   1 1 1  U 1 1  1 1  U  1 1+ 1+ 1  ,U1 2 2 2  " 2 2 2   2 2  2  2  l״1<  1B  ״2  2 2 2   {-P 2 2  2 2  2 2 2 2 2  2 1K 1K 1B 2 2 2 2 ҍ1   Ňҍ1K 1 Ň1 1 1< 1+  1+ 1 1 1  1 ȑ1 l c uty״2 2  2 2 ״2 1K 1K  1 1  2  2 1K 7  7 8 Leave8  8 7 7 7 8 8 8  8 7~ 7, 7   # # # Enter#  # # #  Q\W7~ 7 7 8 8 event7 8 7~ "" ParamList""#2H5D D DV D: D: D: D  D D  " D DV DV D  D D  >  D D  D: D D D  > D D D:  D: D D D  D D Dr Dr D  Dr D D   {-PΤD D D D: D  D D D D   {-PD D Dr  D B Dr  _ref__pathP P P P P P  SSSemanticsScopeSS\SSresolverSqg SwP P P  T"P P Q SP P  S  Q P P P   {-PUUModPathUUsegmentsU@+uRP P P  P lݯP  R R R   R P P R   {-P""""&?SU P R0 R  " R0 R R R0  R6   S  S  S S S   S  S  T  T  T  T T O T T T T T   T  T T   T  T  T  O P R R P P R- O  ݍO ݍO ݯP l c utyݯP P P  P P Q R ݯP R0 R ݯR R S O O O O T T T  trait_refO B  found_pathP  R  P  path_tyS O a a a  " a a a a a a  {-P""GenericArgList""&FOϻa  a a a a a n n n n n n n n n n n n n  n  p p p p;   p  p; p  5 p# r r r r;  r  r; r  r# s s s s   s s  5  s n s s s s   s s  s s s  s  s s  s p;  r;  s  n py q| rC n   n n p" p p r r; r s n n n s s s s s  generic_argn result__types_and_constsm result__lifetimesm type_argp  const_argr l_args  n _ref__result__types_and_consts_ref__result__lifetimesv  v w w w Îw w w w w  w w Gw w w  S w w v v2 w*  v   v v v Îw w w v v v t taw cstw v 1111 SN111  {-PUUInFileU\U4 4RS11 11l11 11 " 1111  {-P FileRange\E;bl?111  11 1  1 l1 12  2 2 "  211 1211  U 122ȑ1>2 U 2 2 222 2/ /111111r1111 0001l c uty111111l c uty11 111UUU\U4 4R1 12  2 ȑ200ɡ0ԡ0ڤ1 1 11  1 1 /8888  S88 88!8  Ӳ߲8!8888!828!I ֝II   JJJ I6I  I6IA JIjIQ ԝI  ԝIjI֝II I6JIIjIjɡHnew_name3\II Ij _ref__def_ref__new_nameUUU UUU U6U U6UA UUjUQ ԝU UjU֝UU U6UUUjUjɡQK\UU Uj V*V*V V V)V   V)V*V*    'wԝV*V* V*V* lԝV ֝VVV V/ WWW V/V   V!V*Vc   'wV*V    'wV*W WWWWVWW VVVVV*V*V  VV֝VVl c utyԝV*V)VVԝV*V/WVVVWɡVԡJKYT \V\V V V* V_ref__source_changeooo oooooo {-Po ooooo###!(!( G!( =  =!   3 Z 3 d !(##٣ 3# #!No identifier available to rename!!##3### ؘ ؘ                   ,!!!  !! !%  % c%   ^       22 Ξ:QF֝444040bW`(2   ř2222 2   ř ř2 2   ׁ   ׁ      $     $     \ refs  $            V  @   ֝ Q  9NNIterNMNMN_markerMjg(+ E  | i Map/8X    | ֝      @ \   |  ֝    @    @  ֝ \ ֝  @\"2"2"2"2 "2"2"2 "2"2ʝ"2 $Fa ' {-PΚ'' '           ' '   Κ Κ          ɓ ɓ         ɓ  ɓ *Ξ:QF֝ {-P** *   ӛ ӛ* *   ֝  ֝،    ֝،" !  "!! !֝!"،!!11 1  111  11֝1111 4 4 44 44 445 5 55  ,$ 5 5 5  5 545455 ?  5 5 634 52  {-P4  334455455555r13r24r55 5 3 666 66766 ֝֝6 66  {-P66 6 6 l6 77 77  7667  {-P 677  77 7 7 l77  7 7 7 7ޫ 77 66677667S7777 6  6ݯ6֝666l c uty66776l c uty777777 ֝76666 large2intersect_ranges3\666 7 6 Ħ7 7 7 6 _ref__large_ref__intersect_rangesB B B U""Fn""c_BBBB UBBBBBBUUU\U4 4RB UUU\U4 4RŵBٷB BB  ٷB ڤBBB B B U""G""G~LQBBBBBCCCBBB UUU\U4 4RBBBB  B ڤBBC C C U""""3bCCCCCCCCCCC UUU\U4 4RļCCCC  C ڤCCD D D U" " " "OPeDDDDDDDDDDD UUU\U4 4RDDDD  D ڤDDG G G U""""\GGGHHHHHGGG UUU\U4 4RGGGG  G ڤGGK K KKKKKKKKKKKKԷKٷKKK ɸK ڤKKK K K U"-"-"-"- "-"-"- "-"-"- YKKKKKLLLKKK UUU\U4 4RKKKK  K ڤKKL L L U""""8Dh]LLLLLLLLLLL UUU\U4 4RLLLL  L ڤLLM M M U""ȓ""WRt!MMMMMMMMMMM UUU\U4 4RMMMM  M ڤMMN N N U""""P aNNNNNNNNNNN UUU\U4 4RNNNN  N ڤNNN N NNNNNNOOONNNNNNN N ڤNNO O OOOOOOOOOOOOOOOO O ڤOOP P PPPPPPPPPPPPPPPP P ڤPP````  S ```SSSS SSS  ht` ߲````a`^`aaa ab%b%b% b%b%b {-Pӛbb bc5  {-Pc5c5  c5d' d'd'  d'dd a     aaa a   ɡ ԡ    WqEa aaab%b% b%b bc5 c5d' d'ddaak  k kkkkkj=k  ֝j=֝jjj=foundjj= _ref__foundl: l:l: l:l  ll ׁ֝ ll*m   ׁ֝m l:m  m m l:m 5mmmmlzmm lz l lz֝ll l: ׁl:l*Occupied Vacant sJJׁ֝lm lzm\ll res__referencesllz_ref__res__referencesuuu  9u u%u%u  +u u-u-u uuuuu:u:u u:ęu u-u%  CrateName  WD kOu%uڨuu u:v"v"v"v >vvvvv  ߲vv ?߲vxv v  v {-Pv"v"vvvvvmvv v Svww  ً߲vJw ?ً߲w!w0 vw ?w9xvvvvvJ {-Pًv ww0v vself__sema__dbmv_ref__self__sema__dbw w ww S wwwwwًww wadtwmwwww  Sw w-w ? wxw0ww0 {-Pww0 vw0_ref__tyxx S xxwxww:wwzzz  Uz zzz  Uz zzzz!z!z z!z U U U UnescapedNameU  U qz˃zzzz!||Self||  l|| ||llFinderlsearcherl:gx!| Յ||څ|| ||   CTryFromIntError  HRA  ʀ' ,"( (       {-P     'wڇ(' ʀ search_range~       ʄ ʄ҄   ҄))   >:>:F><>>=>gG1F >9      ֝  ۯ߲ݯ֝ Ä ʏ)) ق\ mÄ ܅ۅۅ ۅڅͅͅ  ,Yͅ& ,&)ʏ)ͅڅۅ)mÄ) _ref__text #LJ LJ  ‡ : ‡  8    ǻǻ FilterMapʻ*˻*Au((R(data((current(((3&"    :R>h9A]P ؍ٍ؍dždž ++FlatMap++}xĚ  77 7 7dž͆نĚ֗LJLJdž͆نԡndžԡʈ ͈ #͈ʈ"ʈ"Ԉ _r#Ԉʈ"ʈ*ʈ*ʈ*LJ̇ ֗LJȇʈ"ʈ"ʈ"ʈ LJȇ͆LJ S+  8(x(xSmallVec(zcapacity(({(sIo H  9΍lj +ԡn   #  Վ֝Վڎ SڎՎՎ " "" SourceFile""Վ$Վ$͎,͎,Վ  ͎֝,Վ$Վ ՎՎ͎֝,ԡn\͎֝,ԡ\crate ݚڅ څݚݚ֝$$ŜƜŜ,, ,$֝,ԡn\֝,ԡ\ ˔&&)))m)ȮӮӮȮͮͮȮȮܮܮȮ$Ȯ$Ů'Ů' Ȯ Ů'Ȯ$ȮȮȮ֝ӮŮ'Ů'ԡn\Ů' _ref__file_id(N""N"N"!N"N "N "N"N"N"N " " """""""ǞzN"N""N"N " N ""й  "    {-P"3"4"4LogicOp"4 "4"4ArithOp"4 "4"4CmpOp"4 "4 Assignment"4opIHY    l a`Y   '   " !    "!    ̃   ,    "   ̃ @@ @@   Κ"  ހ ΚN"& ΚNY"&Ȁ!ȀN"Ł"ŁŁƁN"ŁȀ!ȀȀ!!ȀȀ# Ȁ# Ł"ŁŁŁ"#%Łй#Ł$ Ł$$#N"%   {-PйN"N "N "N "йl c uty й    @   ΚΚȀŁȀŁĦ   _ref__r ݃ ݃    ݃݃ "  ݃$݃$ " ݃-݃- #     ؃2؃2 ݃ ؃2ك݃-݃$݃$݃݃݃݃ك؃2   # ‰!!ݹ!ȄɄȄ&& &‰ ĉ  ‰& .&‰ĉ// /** 444040bW`(ž*    /*/// /*** *    / /* *  8 8  ԝS 98B S8 ֝&&!8& 8ԝ֝8\\8  '  žB 91 B'    ' 'ž'\'  8ԝ Uthis 444040bW`(a a b 87|n     "  # , " ,5 > w ]]]Su  {-P,#  w+H {-P+"+"  +H+ ?+6+X,+X, ,,,,++ + \\\Y\\]8+ ++X +H +H+"+",+ ++, , ,,, ++ +,+"++", , +"++" _ref__node111111111114%8M8MTextEditBuilder8N8R{5Wc4 4 impl Into44%4 8'443y43 33 4%4 3 3m33y6$666 66565 55565 _cap55snippet558-8888-8 8%8#8777 77 8-87 7 replace_with7 7:$::: ::8:9 999:9 9998 ; ; ; ;; ;  ; ;  ;;  ;&;  "  ;&;E; ;E; " ;; ; ;;; ; ; :: ;; ;; " " TreeDiff" replacements"" deletions"" insertions"CKmɿ;E ;&; ; ; ; ; ; ;; old;;:==== A A) A  A)A)A) A2assertion failed: node.syntax().parent().is_some()22  A)B B B  BBBB BBB # # # Node#  # # Token#  56ÐX  BB2 ADB     B?B BA B@@AA A A A)A  A AAA   A A)ADB2 BBBB  B A AA@C  C C   CC CC CC C D  D C) D  C)C)C)̏ 2assertion failed: node.syntax().parent().is_some()22  C)D D D  DDDD DDD   DD1 DCD     D>D DD DCCCC C C C)C  C CCC  C C)DCD1 DDDD  D C CCCJ  J J   JJ JJ JJ J J  J J) J  J)J)J)̏ 2assertion failed: node.syntax().parent().is_some()22  J)J J J  JJJK KJK    KJ0  JBJ     J=K KJ KIIJI I J J)J  J JJJ  J J)J0 JJJJ  J I IJIN NO  O ֝O  OO    ONN NNN NNNNN  N O ʤ֝Oʤ O O  ֝ O OO  ON    N OO    OOO    ON  N NNNN NNNNžN žNN  NN NNO  O֝O  O OO O O֝O ONN__self_1NO  OO  O __self_2O N-  -- - ->:>:F><>>=>gG1ͦ - ---- -- - - ֯ - SourceRootId UȪ[aU --source_root_id-- -  - -Box  l* ֯ - --7-- -- - ->:>:F><>>=>gG1   Ξ /ϥY] ֯ - ----  -- - - - - --value__--- -- - -շ - -JJJ DurabilityJ J u{K- -- - durability__--- -- - - ֯ - ---- -- - -շ - - -- --- -- - -շ - -Ϲ - -- -ƹ -- ------ ---0u16--module_symbols- ---"module_symbols" -ţ----- ---1u16--library_symbols- ---"library_symbols" ------ ---2u16-- local_roots - --- "local_roots" ------ ---3u16-- library_roots - ---"library_roots"        ' S 0'ݯ   ݯ 0    0 70  SSSymbolCollectorSSSSSworkSScurrent_container_nameS;9C.   S   )   Ӳ  )  ) symbol_collector )_ref__symbol_collector% %%  %%%" %  Ӳ  %"% %"%# %"' ' J' ' ܥ'&;&֯ &ܥ' &&;(ܥ(( ܥ(((( ( ( ܥ('T' 'ܥ(֯ (֯ ( ܥ(''T))(8֯ ) ))(8333333333 query__query23_ref__query__query44 44 e  3ÍnJ J J J+c6@ 4444  4444 444(4  4      4(  4 4 444  4 4  4snap4root44(7 7 7  7 7 7 7  7 7 7 7  77 7   777.  7    7. 777 7  7 7  7 7  7777.88UniqueȈEO+7 NonNull#CC8f  8 8 8  8  88   8  88  88 ;NNNMNMNȈMjg(+  88888 V 87! Cloned'[oN{ c 8    7! 7 8  8 7 7 888888indices77!88 444040bW`(899 G G G ˉG  G ATt|444040bW`(98  888 8ͦ8 8 98< << I f< =>> #>>>>  >> >>>??? ????  ?? ???WWWWWWWW ^W W WVW VVWWWWVVsymbolQV _ref__symbol     ( S A  8444040bW`(      Ξ /ϥY]          911R101010101010+qg A   :Filter» predicate)`L ,!.       ڷ  ݍ   A (    target_trait impl_fns_consts  impl_type  _ref__impl_fns_consts_ref__impl_type  G$  $ G!  " " S       ##ȑ   , ,  -G  !7H  ÎA$ %%   &&ȑ  ,,   -A $ 7B >' >(>   '(} ?  C ? )  G-,,  ȑۅA-,,  Îȑ߄ {-P}$$ >         9     ȑ   9  ): >>  >9ȑ >>n  >       S         l  S       {-P        {-Pݍ           lݍ&   &          c         l c uty  l c utyݍ    ݍ ɡ                                      G    3 ?  Î !!  !    BUP       ߄  ۅÎ     trait_func  trait_konst  trait_type_alias _ref__assoc           " == ="[TryEnum::Option, TryEnum::Result]2   SSS،SNi}V֪   S    !!   !       44  4  4        {-P      4!!!  enum_   _ref__enum_ ݵ       1ݯ11 ݯ1222 2555 55" 5"5"  5"0  000 0 0 0ݯ112 25 55" 5"001ݯ1ݯ11 ݯݯ 15"5"5"5"5"5"5"  5"05555 5 55    55"222 2 2 22    25222 5 55"5" 0 0  0  0 521112 2 25 5 55" 5" 5"0 0 0 0 00000 0001ݯ11 Iݯ1222 I2555 55" 5"5" I 5"0 0 0 00112 25 5 5"0 00D E E#E  E# E$ E$  {-P E$ E$  E$E$lE  E E   {-PTKTKTKBySelfTKTKPlainTKTKByCrate\E F F  DD    D E$ E$ E  E$FD E EE$E$D   DDl c uty E$ E# EE$E EF DD D DDDBB prefixedB prefer_no_stdB  E E$D_ref__prefixed_ref__prefer_no_stdLݯLL ULLLLL%L   L% LLLLL%LB    Ξ /ϥY]MM%M M%M&LBM  M0LC MLLL   LL LLBM&M%M LLLoC LL_ref__scope_definitionsM!ݯMݯM!M ݯMMM(Less~Greater0^M    M( M MM!MMbMM(P#  P#Q  QQQQPSPSP   PSPP P# PS scope_defP oO PS S%SS$SS7S  CTS(&import_assets::path_applicable_imports&&S7T {-PT T]^(^M^# "  ^MTU UU  UU%U[ TL[[ ["[ 0[[( T%TTT    T[%[\\ +impl Fn(ItemInNs) -> Option + Copy   {-P  T\  9    \T ] :ǻǻʻ*˻*Au     Ξ /ϥY]] _,_,_ _```  ``$`a TLaa a"a  aa( _$___  _a$aa#a a!a"a    # !"_a  9    a_d :ǻǻʻ*˻*Au   d dddddddQaa$[ [%T QS]^_& SQR  R RCYCYCZ ProfileSpanC[ C: C jIpS  TT T TUU[[([" [ \ \ ]^^(__, _ _``aa(a" a a aaaQa[ԡQ current_crateR path_candidateRmod_pathRSfirst_segment_unresolved]unresolved_qualifier^unresolved_first_segment_Q \\\ \ \\   \ \ \ \ \  \\lݯ\\\\ \]   ] \ \ \   \]]] ]]] ] ݯ \@\    \@\F  ]]] ]\] ] \\ \ \\\ \  \\ݯ\ \\ \ \ݯ\\@ݯ\\]ݯ] \]\ R  \ \ \\_ref__mod_pathbb  b b bb  bbc cc ccbb  bca  b  aa bbbcca aaaaQ R  _ ^a _ref__unresolved_first_segment_ref__unresolved_qualifierhfnffqffpffoff/f  f import_assets::import_for_itemXf/f'f  Wf' f( f(  W f( f(  f( f( lf( ggg! g!g $impl Fn(ItemInNs) -> Option Wg! f( f( g cW f( g" g" W g" g"  g" g" lݯg" ng"g" g! hȑg!g U bg  g"  g dW g"g-g-h  ,U bh h  h   Vh h* h* hVh  h* h  h  i  ,eVi i ki  i ki i  *Vi i  i*)V i i + ) i +i ,)li(,i) '(i -ȑi) i'-&Ui  i i fV ii) %&i .!( $ %.il$iil/Uii)m$ii Gm0Ui!(# /0!( "#!( !"ܝ!( !( !U!( =  U =! (T!h j5 6j5 j565Sj5ju 1juju j2 ;j2 j2;:!Sj2 ju 1$#j5 45j5 j ^43 Sj"j6 2 3ju 2j2 9:j <j2 j  ^9<8"Sjj3 7 8ju 17ju k  Lk @kN k @?%SkN kO  kO ?>&S kO kO A > kO A'(kO B>lkO=Bl l  E)Sl  kO l gS kOl"F    ߲lVl ?ݍ ٘ ߲EFD*Sl,lm ?ݍ  ڷDڙ C+Sm5mJ=mKm)m) JKI,Sm)mLCmAH ILmGH.-mAM H mGM90mAN H mGN/1tbtd=tc dtt bca<Stp p HpOH qSqT Oqq STR2Sq q qRQ3S q qU Q qU45qVQlݯqqqqPVqXqY qq XYW7`q q q 6S qrqrHpqppp POWG8`prqrrCrnrrprrZ r[s]s^ ss ]^\:^srprrr Z[\G;^rspssC t ta`=S t te ` te>?tf`lݯt"ott"_ftg=titj tt ijhA\t t  t @S tuouHsosss _ghGB\suouuCm Gu DVuEbunFZunuuGXuRu IVuJbu KWunuuQXu MVuNbu OWunuPuQXuRuu V! V! (VubuXuYdu FWu_SuoS[sZSspS]rPSrqS_u WunWa f(P g" Oh   iM kOL#dff g gf(f(g g gg"g" g h   Z i ii i!( k  l lkO kOl p q qqq t ttt!r ed deee  ff f( f' gf(ݯg g"g!  g g!g gݯg"g  g- g!g!ȑhh  h*h*h h   !(iܝ!( !( !(!(i)i)i)i ii ii ȑiiii juj6j5j5j5j5j3j2j2j2j2jk  kO kNk lkO l lVl  l"m mAm) m m mnppݯq qq q q qݯqq q qݯrrs s sݯt tt t tt tݯttt t t i !(!(uusrd d e ee foriginal_item_candidatef g f( import_path_candidateg  g g" import_path_stringg expected_import_endh ٣  i i,!($segment_importk= l kOBtrait_item_to_importlCtrait_to_importpO q qV t t!fdi ii::iig  i iillll S lml" l l"lll"ldl"mm ݍmm'mm'mm0mڙ m0ݍmmmm0{{{ { {{{.{.{.{{{{{{5{5{ {5{{{{{5{ z{5 #΅7΅΅6΅Ӆ6Ӆ  '%import_assets::trait_applicable_items%%Ӆ6:  :ن S  ن7* *  S   Ӈ7ӇӇ   Ӈ! 9S(S( Ӈ; :Chain' ':_     Ξ /ϥY]ݍ     Ξ /ϥY]''҉ ҉؉6؉ TL " ( 6  6̊     ߲  9   ߲ , !    {-PTNTNTNTN T +׋oF8    !  9ǻǻʻ*˻*Au        :ǻǻʻ*˻*Au     Ξ /ϥY]     "  ֍ $%Վ&' ( *+",)    {-P     *+, S   $%&'()#! ߕ-.і/0 1 34"52     345ߕ% S   -./012#""ќќќ ќ7ќќќҜќ"ќќќ ќќ6ќ ќ7ߕ ʅΈ8 ̃  Ǩڄ  ΅ :  * ‡ Ӈ! Ӈ    ҈   ''("  ̊      Ӎ  Վ {-P    ߕ і     ќԡ̃  trait_candidatetrait_assoc_itemڄ ΅inherent_traits env_traits  related_traits‡required_assoc_itemstrait_candidates҈located_imports"ԊԊ  Ԋ̊ Ԋ  ̊ ͊̊ input͊̊          lݍϋ*  ϋ*ދ  ݍݍ ދ        ϋ*   ̋ " "     ߌ ߌ ݍ   ڌ   ̋      ݍ   ݍ ϋ*" ߌݍߌ   ‡   assoc_item_trait  _ref__related_traits_ref__required_assoc_items)%# ӏ%ʏ  #ʏ % $ $  S   Ő >SSSfuncSĿ k\lŐ   ϐDґ %%ґؑ    ؑ ґ ґ    ґ ґ  ґ ґ lݍ   ґ    ґ..  & ٓ'  ٓ ٓٓ 'ٓ ٓ ٓ ٓ ٓ  ٓٓlݯٓ )ٓٓ   Ӕ( ܔ "Ӕ! "ӔӔ (! Ӕ ٓ    ٓ))  )  &  )   ґґؒ   ٓٓ *    %ӏ   {-P   ґ ґґ ݍґ ܒ ݯٓ ٓٓ ٓ  ݯٓ  Ӕ Ӕܔ             located_trait‘   ґ trait_item ܒ    ٓ  _ref__located_imports )ԗ#ԗ#Ɨ  S Ɨ       l%$  % $    ח   %  Ԙ%Ԙ%Ø   Ø           lݍ    ט  . . י י  י & Ě ' ͚  Ě  Ě Ě 'Ě Ě  Ě Ě Ě   Ě Ě lݯĚ)ĚĚ     ( Ǜ  " ! "  (!  Ě ؚ  Ě ) )    )  &    ) ח ח ט ט Ù ؚ ؚ Ě Ě*    ԗ ח %  Ԙ טݍ Ǚ  ݯĚ ĚĚ Ě͚  ؚݯĚ    Ǜ     function       ח    ט     Ǚ   ؚ  Ě   Ͼھ ھ¾)Ͼ ߲¾)þ ¾)þ ¾)                       """"  "                                                                   " " "       ߬                 "%"%StmtList"%"Nҁ:$               ""ItemList""c~#+                                       "@ ?"" TokenTree""Q ҵ  *GG  """"giN-G  {-Pҵ   G׵ ׵  ҵ  cfg; ;;7;7;7;7;; ";;8 ;;7;7;A;  7 7""Use"" 6wx ;A վ ;;7;; ;A;2 ;A _ref__cfgEEE EEEE  E  E EE E E E  E  E E E E E E E E E  E  E E E E  E EE E E  {-P E  E  E E E E E E E E E E E E EEEE EEEEE E E EEEEEEEEEEN  N  N NN N N N  N  N N N N N N N N N  N  N N N N  N NN N N  N  N  N N N N N N N N N N OOOO OOORRRRRRR R S ""UseTree""a=G!V {-P"" Visibility""㛸"5"5 AstChildren"5""5ph"Im+( SRRR߽ վ RRR "R  R R  {-P  R R  R R l RRR RRR SSS  "վ   S  R R R  {-P  RSSS S S S "վ   SR+   R1   SSSS S SS S SRS S߽ վ S S SS SSSS SRRRh R RRR R  ",",",G", ",",", ",", ExternBlock", ",",", ",",ϴ", ",",", ",", MacroCall", ",", MacroRules", ",",MacroDef", ",", ", ",", ", ",", ", ",", ", ",",ȓ ", ",",", ",",", ",",߽ ", TH{v1ap R RRվ R Rl c uty R R R R R R+ R S S S  S SSSSSRuse_Ruse_treeR R R RWWW  "WWWW >"" UseTreeList""(o#vCW WWWWWW%W%W   W% W  {-P W W  WtreeWW%jjjjj j jjjj " վ jjjjj  j,j ?վ jjj3jjj3  {-Pվ j   j3j {-Pվ jj j j jjjj3jjjվ jjjjjj j  j j  j j  j j l j k k k " k j j k  {-P j k  k    k  k   k  k  lk  kkk   k k   k   k lkkk  k k k  l l ll k  k  lllllllllkl lljll j jjj k kjjk k kk k  k] j   j j վ jj j j j j k jkl c uty k k  k  kk k k k k kklll  jj j k j k  k k  has_tlk jnnn nnn nn nnn,nn     n,  n n nn n,i nn, _ref__groupooo ooo oo ooo,oo   o, o o oo o,i oo, rr rrr r rr rrr rr&r&r r    r& r rrr  r& r& r&lastp rr& _ref__lastrrs r3r sr3r3ss  rHrH   rHsrrh r  r rrr r3 r3 sr insert_pathh r rr_ref__insert_paths ssrh s ssyy yyy y yy yyy yy&y&y y  ʁ y& y yyy  y& y& y& x yy& yyy yyz yy yzy%yy   y% yy yy y%i yy%  ڇ Јِ o o ĉo  ĉΉ ԉ ԉ     ͉  oĉ Wĉĉ҇; ڇ    ҇  Ӈ Ј o‰͉ ĉΉ  oӇЈ҇ .q .s .tB ĉoo o Bĉĉĉo # E ?  4ҊM ӑ M  {-PM‰"" ĉĉ"ъ& &‰ĉ‰& .q&‰ĉ   ""1"1"1Inner"1"1Outer&~N#6   ʸ                          " "5"5 "5""5 "Im+(       list  ,  c 33     3    3 [ 3 _ref__merge  %%% %,,      ,   , ١       Ǣ        >444 4<<    <   {-P<lhs_trhs_path<_ref__rhs_path   & ?   7  >}}  7 7 }  &ɰ   }!!  !!= !=    !t! ?   !B##    !# ?  #,#    7 7    !t !Զ != ##   tree_is_self  _ref__tree_is_self!!! ١ ! !1! !   !1! :   !"""""!=!=!Զ != !   !1 ! ! ! != tree_list!    !=۸ !  "! !!    !"""!!!  ! ! ! " !!   !۸ # ##  "# # # ?  #### # ### ##  ## _ref__tree##### # # ##  AAAAAA AA AB B    BA  ABBBBB AvAvAmB  A   Av AAA AAAA BA AordB AvG G  GGBothH HH HH HHH   H H  H II I   I  I I   I I I   J JJJ  J   J J  J K J  K K KKGGGH G  999 9 9 999 999 #J=T G GG GH HH HI I I IJ J J KGGzippedGb_has_tlEa_has_tlDG H HG_ref__b_has_tl_ref__a_has_tlLLLLL L M MLLLL MMMMMM MLgL1L "1"1"1"1 "1"1type_ref"1"1"1 SelfTypeKw"1"1SelfKw"1"1SuperKw"1"1CrateKw&U0 cLg LLLMMLLLgMMMMM M N NMMMM NNNNNN NMgM1M Mg MMMNNMMMg R RR RR RRHR :impl Iterator#       R8RpR :++++}x         RS SS SSSHS :      S8SpS :++++}x       ST TTT TGT ++++}x  ++++}x       TGT TTPT T  TT  PRS Q P Q R RH S SH S T TTTattrs0Pattrs1Q R SPR R R "  RR'R'R #RRRRR.R. R  R. RR'R ʸ R RR.RS  #S SRR  R RRRS S S SS'S'S SSSSS.S. S  S. SS'S ʸ S SS.TT  T TST  S SSS T T TTT T  T T TT TTTTTTTTT%T% T  T%TTT T T T T T tokTtok2TT%UUU U UUUUUU UUUsegUUaaa aa~~~ ~~C HCC Caaa~~~CC˱˱˱˱ ˱˱˱    ˱ ˱ ʱ\XYU z  W  xzyPQv~u!"#[$%-/0w123[45789{:;<>?V?ABDEFYGHIyJLMNOQWQR\SUTUVXYZ[]^w_a]acUcdveghijxk}lnprtuvxyz|{{|}~Ҁzҁv΂uބy݅wLԊߋPЍVXuIԐ~ۙy\ϝܞ|ޟ]ǡբ{֣QW|V|zwxYϬ{Э|Үܯ{ݰ}{ ˱&[Lint{ label: "absolute_paths_not_starting_with_crate", description: r##"fully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate name"##,}, Lint{ label: "ambiguous_associated_items", description: r##"ambiguous associated items"##,}, Lint{ label: "anonymous_parameters", description: r##"detects anonymous parameters"##,}, Lint{ label: "arithmetic_overflow", description: r##"arithmetic operation overflows"##,}, Lint{ label: "array_into_iter", description: r##"detects calling `into_iter` on arrays in Rust 2015 and 2018"##,}, Lint{ label: "asm_sub_register", description: r##"using only a subset of a register for inline asm inputs"##,}, Lint{ label: "bad_asm_style", description: r##"incorrect use of inline assembly"##,}, Lint{ label: "bare_trait_objects", description: r##"suggest using `dyn Trait` for trait objects"##,}, Lint{ label: "bindings_with_variant_name", description: r##"detects pattern bindings with the same name as one of the matched variants"##,}, Lint{ label: "box_pointers", description: r##"use of owned (Box type) heap memory"##,}, Lint{ label: "break_with_label_and_loop", description: r##"`break` expression with label and unlabeled loop as value expression"##,}, Lint{ label: "cenum_impl_drop_cast", description: r##"a C-like enum implementing Drop is cast"##,}, Lint{ label: "clashing_extern_declarations", description: r##"detects when an extern fn has been declared with the same name but different types"##,}, Lint{ label: "coherence_leak_check", description: r##"distinct impls distinguished only by the leak-check code"##,}, Lint{ label: "conflicting_repr_hints", description: r##"conflicts between `#[repr(..)]` hints that were previously accepted and used in practice"##,}, Lint{ label: "confusable_idents", description: r##"detects visually confusable pairs between identifiers"##,}, Lint{ label: "const_err", description: r##"constant evaluation encountered erroneous expression"##,}, Lint{ label: "const_evaluatable_unchecked", description: r##"detects a generic constant is used in a type without a emitting a warning"##,}, Lint{ label: "const_item_mutation", description: r##"detects attempts to mutate a `const` item"##,}, Lint{ label: "dead_code", description: r##"detect unused, unexported items"##,}, Lint{ label: "deprecated", description: r##"detects use of deprecated items"##,}, Lint{ label: "deprecated_in_future", description: r##"detects use of items that will be deprecated in a future version"##,}, Lint{ label: "deref_into_dyn_supertrait", description: r##"`Deref` implementation usage with a supertrait trait object for output might be shadowed in the future"##,}, Lint{ label: "deref_nullptr", description: r##"detects when an null pointer is dereferenced"##,}, Lint{ label: "drop_bounds", description: r##"bounds of the form `T: Drop` are most likely incorrect"##,}, Lint{ label: "dyn_drop", description: r##"trait objects of the form `dyn Drop` are useless"##,}, Lint{ label: "elided_lifetimes_in_paths", description: r##"hidden lifetime parameters in types are deprecated"##,}, Lint{ label: "ellipsis_inclusive_range_patterns", description: r##"`...` range patterns are deprecated"##,}, Lint{ label: "enum_intrinsics_non_enums", description: r##"detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types"##,}, Lint{ label: "explicit_outlives_requirements", description: r##"outlives requirements can be inferred"##,}, Lint{ label: "exported_private_dependencies", description: r##"public interface leaks type from a private dependency"##,}, Lint{ label: "forbidden_lint_groups", description: r##"applying forbid to lint-groups"##,}, Lint{ label: "function_item_references", description: r##"suggest casting to a function pointer when attempting to take references to function items"##,}, Lint{ label: "future_incompatible", description: r##"lint group for: forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, invalid-doc-attributes, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, unsupported-calling-conventions, deref-into-dyn-supertrait"##,}, Lint{ label: "ill_formed_attribute_input", description: r##"ill-formed attribute inputs that were previously accepted and used in practice"##,}, Lint{ label: "illegal_floating_point_literal_pattern", description: r##"floating-point literals cannot be used in patterns"##,}, Lint{ label: "improper_ctypes", description: r##"proper use of libc types in foreign modules"##,}, Lint{ label: "improper_ctypes_definitions", description: r##"proper use of libc types in foreign item definitions"##,}, Lint{ label: "incomplete_features", description: r##"incomplete features that may function improperly in some or all cases"##,}, Lint{ label: "incomplete_include", description: r##"trailing content in included file"##,}, Lint{ label: "indirect_structural_match", description: r##"constant used in pattern contains value of non-structural-match type in a field or a variant"##,}, Lint{ label: "ineffective_unstable_trait_impl", description: r##"detects `#[unstable]` on stable trait implementations for stable types"##,}, Lint{ label: "inline_no_sanitize", description: r##"detects incompatible use of `#[inline(always)]` and `#[no_sanitize(...)]`"##,}, Lint{ label: "invalid_atomic_ordering", description: r##"usage of invalid atomic ordering in atomic operations and memory fences"##,}, Lint{ label: "invalid_doc_attributes", description: r##"detects invalid `#[doc(...)]` attributes"##,}, Lint{ label: "invalid_type_param_default", description: r##"type parameter default erroneously allowed in invalid location"##,}, Lint{ label: "invalid_value", description: r##"an invalid value is being created (such as a null reference)"##,}, Lint{ label: "irrefutable_let_patterns", description: r##"detects irrefutable patterns in `if let` and `while let` statements"##,}, Lint{ label: "keyword_idents", description: r##"detects edition keywords being used as an identifier"##,}, Lint{ label: "large_assignments", description: r##"detects large moves or copies"##,}, Lint{ label: "late_bound_lifetime_arguments", description: r##"detects generic lifetime arguments in path segments with late bound lifetime parameters"##,}, Lint{ label: "legacy_derive_helpers", description: r##"detects derive helper attributes that are used before they are introduced"##,}, Lint{ label: "macro_expanded_macro_exports_accessed_by_absolute_paths", description: r##"macro-expanded `macro_export` macros from the current crate cannot be referred to by absolute paths"##,}, Lint{ label: "macro_use_extern_crate", description: r##"the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system"##,}, Lint{ label: "meta_variable_misuse", description: r##"possible meta-variable misuse at macro definition"##,}, Lint{ label: "missing_abi", description: r##"No declared ABI for extern declaration"##,}, Lint{ label: "missing_copy_implementations", description: r##"detects potentially-forgotten implementations of `Copy`"##,}, Lint{ label: "missing_debug_implementations", description: r##"detects missing implementations of Debug"##,}, Lint{ label: "missing_docs", description: r##"detects missing documentation for public members"##,}, Lint{ label: "missing_fragment_specifier", description: r##"detects missing fragment specifiers in unused `macro_rules!` patterns"##,}, Lint{ label: "mixed_script_confusables", description: r##"detects Unicode scripts whose mixed script confusables codepoints are solely used"##,}, Lint{ label: "must_not_suspend", description: r##"use of a `#[must_not_suspend]` value across a yield point"##,}, Lint{ label: "mutable_borrow_reservation_conflict", description: r##"reservation of a two-phased borrow conflicts with other shared borrows"##,}, Lint{ label: "mutable_transmutes", description: r##"mutating transmuted &mut T from &T may cause undefined behavior"##,}, Lint{ label: "named_asm_labels", description: r##"named labels in inline assembly"##,}, Lint{ label: "no_mangle_const_items", description: r##"const items will not have their symbols exported"##,}, Lint{ label: "no_mangle_generic_items", description: r##"generic items must be mangled"##,}, Lint{ label: "non_ascii_idents", description: r##"detects non-ASCII identifiers"##,}, Lint{ label: "non_camel_case_types", description: r##"types, variants, traits and type parameters should have camel case names"##,}, Lint{ label: "non_exhaustive_omitted_patterns", description: r##"detect when patterns of types marked `non_exhaustive` are missed"##,}, Lint{ label: "non_fmt_panics", description: r##"detect single-argument panic!() invocations in which the argument is not a format string"##,}, Lint{ label: "non_shorthand_field_patterns", description: r##"using `Struct { x: x }` instead of `Struct { x }` in a pattern"##,}, Lint{ label: "non_snake_case", description: r##"variables, methods, functions, lifetime parameters and modules should have snake case names"##,}, Lint{ label: "non_upper_case_globals", description: r##"static constants should have uppercase identifiers"##,}, Lint{ label: "nonstandard_style", description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,}, Lint{ label: "nontrivial_structural_match", description: r##"constant used in pattern of non-structural-match type and the constant's initializer expression contains values of non-structural-match types"##,}, Lint{ label: "noop_method_call", description: r##"detects the use of well-known noop methods"##,}, Lint{ label: "order_dependent_trait_objects", description: r##"trait-object types were treated as different depending on marker-trait order"##,}, Lint{ label: "overflowing_literals", description: r##"literal out of range for its type"##,}, Lint{ label: "overlapping_range_endpoints", description: r##"detects range patterns with overlapping endpoints"##,}, Lint{ label: "path_statements", description: r##"path statements with no effect"##,}, Lint{ label: "patterns_in_fns_without_body", description: r##"patterns in functions without body were erroneously allowed"##,}, Lint{ label: "pointer_structural_match", description: r##"pointers are not structural-match"##,}, Lint{ label: "private_in_public", description: r##"detect private items in public interfaces not caught by the old implementation"##,}, Lint{ label: "proc_macro_back_compat", description: r##"detects usage of old versions of certain proc-macro crates"##,}, Lint{ label: "proc_macro_derive_resolution_fallback", description: r##"detects proc macro derives using inaccessible names from parent modules"##,}, Lint{ label: "pub_use_of_private_extern_crate", description: r##"detect public re-exports of private extern crates"##,}, Lint{ label: "redundant_semicolons", description: r##"detects unnecessary trailing semicolons"##,}, Lint{ label: "renamed_and_removed_lints", description: r##"lints that have been renamed or removed"##,}, Lint{ label: "rust_2018_compatibility", description: r##"lint group for: keyword-idents, anonymous-parameters, tyvar-behind-raw-pointer, absolute-paths-not-starting-with-crate"##,}, Lint{ label: "rust_2018_idioms", description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,}, Lint{ label: "rust_2021_compatibility", description: r##"lint group for: ellipsis-inclusive-range-patterns, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prelude-collisions, rust-2021-prefixes-incompatible-syntax, array-into-iter, non-fmt-panics"##,}, Lint{ label: "rust_2021_incompatible_closure_captures", description: r##"detects closures affected by Rust 2021 changes"##,}, Lint{ label: "rust_2021_incompatible_or_patterns", description: r##"detects usage of old versions of or-patterns"##,}, Lint{ label: "rust_2021_prefixes_incompatible_syntax", description: r##"identifiers that will be parsed as a prefix in Rust 2021"##,}, Lint{ label: "rust_2021_prelude_collisions", description: r##"detects the usage of trait methods which are ambiguous with traits added to the prelude in future editions"##,}, Lint{ label: "semicolon_in_expressions_from_macros", description: r##"trailing semicolon in macro body used as expression"##,}, Lint{ label: "single_use_lifetimes", description: r##"detects lifetime parameters that are only used once"##,}, Lint{ label: "soft_unstable", description: r##"a feature gate that doesn't break dependent crates"##,}, Lint{ label: "stable_features", description: r##"stable features found in `#[feature]` directive"##,}, Lint{ label: "temporary_cstring_as_ptr", description: r##"detects getting the inner pointer of a temporary `CString`"##,}, Lint{ label: "text_direction_codepoint_in_comment", description: r##"invisible directionality-changing codepoints in comment"##,}, Lint{ label: "text_direction_codepoint_in_literal", description: r##"detect special Unicode codepoints that affect the visual representation of text on screen, changing the direction in which text flows"##,}, Lint{ label: "trivial_bounds", description: r##"these bounds don't depend on an type parameters"##,}, Lint{ label: "trivial_casts", description: r##"detects trivial casts which could be removed"##,}, Lint{ label: "trivial_numeric_casts", description: r##"detects trivial casts of numeric types which could be removed"##,}, Lint{ label: "type_alias_bounds", description: r##"bounds in type aliases are not enforced"##,}, Lint{ label: "tyvar_behind_raw_pointer", description: r##"raw pointer to an inference variable"##,}, Lint{ label: "unaligned_references", description: r##"detects unaligned references to fields of packed structs"##,}, Lint{ label: "uncommon_codepoints", description: r##"detects uncommon Unicode codepoints in identifiers"##,}, Lint{ label: "unconditional_panic", description: r##"operation will cause a panic at runtime"##,}, Lint{ label: "unconditional_recursion", description: r##"functions that cannot return without calling themselves"##,}, Lint{ label: "uninhabited_static", description: r##"uninhabited static"##,}, Lint{ label: "unknown_crate_types", description: r##"unknown crate type found in `#[crate_type]` directive"##,}, Lint{ label: "unknown_lints", description: r##"unrecognized lint attribute"##,}, Lint{ label: "unnameable_test_items", description: r##"detects an item that cannot be named being marked as `#[test_case]`"##,}, Lint{ label: "unreachable_code", description: r##"detects unreachable code paths"##,}, Lint{ label: "unreachable_patterns", description: r##"detects unreachable patterns"##,}, Lint{ label: "unreachable_pub", description: r##"`pub` items not reachable from crate root"##,}, Lint{ label: "unsafe_code", description: r##"usage of `unsafe` code"##,}, Lint{ label: "unsafe_op_in_unsafe_fn", description: r##"unsafe operations in unsafe functions without an explicit unsafe block are deprecated"##,}, Lint{ label: "unstable_features", description: r##"enabling unstable features (deprecated. do not use)"##,}, Lint{ label: "unstable_name_collisions", description: r##"detects name collision with an existing but unstable method"##,}, Lint{ label: "unsupported_calling_conventions", description: r##"use of unsupported calling convention"##,}, Lint{ label: "unsupported_naked_functions", description: r##"unsupported naked function definitions"##,}, Lint{ label: "unused", description: r##"lint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolons"##,}, Lint{ label: "unused_allocation", description: r##"detects unnecessary allocations that can be eliminated"##,}, Lint{ label: "unused_assignments", description: r##"detect assignments that will never be read"##,}, Lint{ label: "unused_attributes", description: r##"detects attributes that were not used by the compiler"##,}, Lint{ label: "unused_braces", description: r##"unnecessary braces around an expression"##,}, Lint{ label: "unused_comparisons", description: r##"comparisons made useless by limits of the types involved"##,}, Lint{ label: "unused_crate_dependencies", description: r##"crate dependencies that are never used"##,}, Lint{ label: "unused_doc_comments", description: r##"detects doc comments that aren't used by rustdoc"##,}, Lint{ label: "unused_extern_crates", description: r##"extern crates that are never used"##,}, Lint{ label: "unused_features", description: r##"unused features found in crate-level `#[feature]` directives"##,}, Lint{ label: "unused_import_braces", description: r##"unnecessary braces around an imported item"##,}, Lint{ label: "unused_imports", description: r##"imports that are never used"##,}, Lint{ label: "unused_labels", description: r##"detects labels that are never used"##,}, Lint{ label: "unused_lifetimes", description: r##"detects lifetime parameters that are never used"##,}, Lint{ label: "unused_macros", description: r##"detects macros that were not used"##,}, Lint{ label: "unused_must_use", description: r##"unused result of a type flagged as `#[must_use]`"##,}, Lint{ label: "unused_mut", description: r##"detect mut variables which don't need to be mutable"##,}, Lint{ label: "unused_parens", description: r##"`if`, `match`, `while` and `return` do not need parentheses"##,}, Lint{ label: "unused_qualifications", description: r##"detects unnecessarily qualified names"##,}, Lint{ label: "unused_results", description: r##"unused result of an expression in a statement"##,}, Lint{ label: "unused_unsafe", description: r##"unnecessary use of an `unsafe` block"##,}, Lint{ label: "unused_variables", description: r##"detect variables which are not used in any way"##,}, Lint{ label: "useless_deprecated", description: r##"detects deprecation attributes with no effect"##,}, Lint{ label: "variant_size_differences", description: r##"detects enums with widely varying variant sizes"##,}, Lint{ label: "warnings", description: r##"mass-change the level for lints which produce warnings"##,}, Lint{ label: "warnings", description: r##"lint group for: all lints that are set to issue warnings"##,}, Lint{ label: "where_clauses_object_safety", description: r##"checks the object safety of where clauses"##,}, Lint{ label: "while_true", description: r##"suggest using `loop { }` instead of `while true { }`"##,}] (&absolute_paths_not_starting_with_crate&&ngfully qualified paths that start with a module name instead of `crate`, `self`, or an extern crate namegg\ ambiguous_associated_items!ambiguous associated itemsX anonymous_parameters#detects anonymous parametersY arithmetic_overflow%arithmetic operation overflows array_into_iterB;detects calling `into_iter` on arrays in Rust 2015 and 2018;; asm_sub_register>7using only a subset of a register for inline asm inputs77U  bad_asm_style ' incorrect use of inline assembly  z  bare_trait_objects 2+suggest using `dyn Trait` for trait objects++   bindings_with_variant_name QJdetects pattern bindings with the same name as one of the matched variantsJJ W   box_pointers  *#use of owned (Box type) heap memory##   break_with_label_and_loop KD`break` expression with label and unlabeled loop as value expressionDD x  cenum_impl_drop_cast .'a C-like enum implementing Drop is cast'' clashing_extern_declarationsYRdetects when an extern fn has been declared with the same name but different typesRR coherence_leak_check?8distinct impls distinguished only by the leak-check code88 conflicting_repr_hints_Xconflicts between `#[repr(..)]` hints that were previously accepted and used in practiceXX confusable_idents<5detects visually confusable pairs between identifiers55z   const_err ;4constant evaluation encountered erroneous expression44 const_evaluatable_uncheckedPIdetects a generic constant is used in a type without a emitting a warningIIy const_item_mutation0)detects attempts to mutate a `const` item))P   dead_code &detect unused, unexported itemsQ   deprecated &detects use of deprecated items deprecated_in_futureG@detects use of items that will be deprecated in a future version@@ deref_into_dyn_supertraitmf`Deref` implementation usage with a supertrait trait object for output might be shadowed in the futureffv  deref_nullptr 3,detects when an null pointer is dereferenced,,~   drop_bounds =6bounds of the form `T: Drop` are most likely incorrect66u  dyn_drop70trait objects of the form `dyn Drop` are useless00 elided_lifetimes_in_paths92hidden lifetime parameters in types are deprecated22 #!ellipsis_inclusive_range_patterns!!*#`...` range patterns are deprecated## enum_intrinsics_non_enums d]detects calls to `core::mem::discriminant` and `core::mem::variant_count` with non-enum types]]! ! explicit_outlives_requirements!,%outlives requirements can be inferred%%" "exported_private_dependencies"<5public interface leaks type from a private dependency55#[! #forbidden_lint_groups#%applying forbid to lint-groups$" $function_item_references$aZsuggest casting to a function pointer when attempting to take references to function itemsZZ%# %future_incompatible&lint group for: forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, invalid-doc-attributes, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, unsupported-calling-conventions, deref-into-dyn-supertrait-$ -ill_formed_attribute_input.UNill-formed attribute inputs that were previously accepted and used in practiceNN/% /(&illegal_floating_point_literal_pattern&&/92floating-point literals cannot be used in patterns220w& 0improper_ctypes02+proper use of libc types in foreign modules++1' 1improper_ctypes_definitions1;4proper use of libc types in foreign item definitions442( 2incomplete_features2LEincomplete features that may function improperly in some or all casesEE3[) 3incomplete_include4(!trailing content in included file!!4* 4indirect_structural_match4c\constant used in pattern contains value of non-structural-match type in a field or a variant\\5+ 5!ineffective_unstable_trait_impl6MFdetects `#[unstable]` on stable trait implementations for stable typesFF7, 7inline_no_sanitize7PIdetects incompatible use of `#[inline(always)]` and `#[no_sanitize(...)]`II8- 8invalid_atomic_ordering8NGusage of invalid atomic ordering in atomic operations and memory fencesGG9{. 9invalid_doc_attributes:/(detects invalid `#[doc(...)]` attributes((:/ :invalid_type_param_default;E>type parameter default erroneously allowed in invalid location>>;0 < invalid_value 2 >keyword_idents>;4detects edition keywords being used as an identifier44?V3 ?large_assignments?$detects large moves or copies?4 @late_bound_lifetime_arguments@^Wdetects generic lifetime arguments in path segments with late bound lifetime parametersWWA5 Alegacy_derive_helpersAPIdetects derive helper attributes that are used before they are introducedIIB6 B97macro_expanded_macro_exports_accessed_by_absolute_paths77Cjcmacro-expanded `macro_export` macros from the current crate cannot be referred to by absolute pathsccD7 Dmacro_use_extern_crateDd]the `#[macro_use]` attribute is now deprecated in favor of using macros via the module system]]E8 Emeta_variable_misuseF81possible meta-variable misuse at macro definition11FY9 F  missing_abi G-&No declared ABI for extern declaration&&G: Gmissing_copy_implementationsH>7detects potentially-forgotten implementations of `Copy`77H; Hmissing_debug_implementationsI/(detects missing implementations of Debug((Iy< I missing_docs J70detects missing documentation for public members00J= Jmissing_fragment_specifierKLEdetects missing fragment specifiers in unused `macro_rules!` patternsEEL> Lmixed_script_confusablesLXQdetects Unicode scripts whose mixed script confusables codepoints are solely usedQQM? Mmust_not_suspendM@9use of a `#[must_not_suspend]` value across a yield point99N@ N%#mutable_borrow_reservation_conflict##OMFreservation of a two-phased borrow conflicts with other shared borrowsFFOA Pmutable_transmutesPF?mutating transmuted &mut T from &T may cause undefined behavior??QWB Qnamed_asm_labelsQ&named labels in inline assemblyQC Qno_mangle_const_itemsR70const items will not have their symbols exported00R\D Rno_mangle_generic_itemsS$generic items must be mangledSUE Snon_ascii_identsS$detects non-ASCII identifiersTF Tnon_camel_case_typesTOHtypes, variants, traits and type parameters should have camel case namesHHUG U!non_exhaustive_omitted_patternsVG@detect when patterns of types marked `non_exhaustive` are missed@@VH Vnon_fmt_panicsW_Xdetect single-argument panic!() invocations in which the argument is not a format stringXXXI Xnon_shorthand_field_patternsXE>using `Struct { x: x }` instead of `Struct { x }` in a pattern>>YJ Ynon_snake_caseYb[variables, methods, functions, lifetime parameters and modules should have snake case names[[ZK Znon_upper_case_globals[92static constants should have uppercase identifiers22[L [nonstandard_style\SLlint group for: non-camel-case-types, non-snake-case, non-upper-case-globalsLL]M ]nontrivial_structural_match]constant used in pattern of non-structural-match type and the constant's initializer expression contains values of non-structural-match types^wN _noop_method_call_1*detects the use of well-known noop methods**_O _order_dependent_trait_objects`SLtrait-object types were treated as different depending on marker-trait orderLLa]P aoverflowing_literalsa(!literal out of range for its type!!aQ boverlapping_range_endpointsb81detects range patterns with overlapping endpoints11cUR cpath_statementsc%path statements with no effectcS cpatterns_in_fns_without_bodydB;patterns in functions without body were erroneously allowed;;dvT epointer_structural_matche(!pointers are not structural-match!!eU fprivate_in_publicfUNdetect private items in public interfaces not caught by the old implementationNNgV gproc_macro_back_compatgA:detects usage of old versions of certain proc-macro crates::hW h'%proc_macro_derive_resolution_fallback%%iNGdetects proc macro derives using inaccessible names from parent modulesGGiX i!pub_use_of_private_extern_cratej81detect public re-exports of private extern crates11jxY kredundant_semicolonsk.'detects unnecessary trailing semicolons''k}Z lrenamed_and_removed_lintsl.'lints that have been renamed or removed''l[ mrust_2018_compatibilitym}vlint group for: keyword-idents, anonymous-parameters, tyvar-behind-raw-pointer, absolute-paths-not-starting-with-cratevvn\ nrust_2018_idiomsnlint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirementsp] prust_2021_compatibilityplint group for: ellipsis-inclusive-range-patterns, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prelude-collisions, rust-2021-prefixes-incompatible-syntax, array-into-iter, non-fmt-panicsr^ s)'rust_2021_incompatible_closure_captures''s5.detects closures affected by Rust 2021 changes..t_ t$"rust_2021_incompatible_or_patterns""t3,detects usage of old versions of or-patterns,,u` u(&rust_2021_prefixes_incompatible_syntax&&u?8identifiers that will be parsed as a prefix in Rust 202188va vrust_2021_prelude_collisionswqjdetects the usage of trait methods which are ambiguous with traits added to the prelude in future editionsjjxb x&$semicolon_in_expressions_from_macros$$x:3trailing semicolon in macro body used as expression33yc ysingle_use_lifetimesy:3detects lifetime parameters that are only used once33z|d z soft_unstable z92a feature gate that doesn't break dependent crates22{{e {stable_features{6/stable features found in `#[feature]` directive//|f |temporary_cstring_as_ptr|A:detects getting the inner pointer of a temporary `CString`::}g }%#text_direction_codepoint_in_comment##~>7invisible directionality-changing codepoints in comment77~h ~%#text_direction_codepoint_in_literal##detect special Unicode codepoints that affect the visual representation of text on screen, changing the direction in which text flowsҀzi trivial_bounds6/these bounds don't depend on an type parameters//ҁvj  trivial_casts 3,detects trivial casts which could be removed,,΂k trivial_numeric_castsD=detects trivial casts of numeric types which could be removed==ul type_alias_bounds.'bounds in type aliases are not enforced''ބym tyvar_behind_raw_pointer+$raw pointer to an inference variable$$݅n unaligned_references?8detects unaligned references to fields of packed structs88o uncommon_codepoints92detects uncommon Unicode codepoints in identifiers22wp unconditional_panic.'operation will cause a panic at runtime''q unconditional_recursion>7functions that cannot return without calling themselves77Lr uninhabited_staticuninhabited staticԊs unknown_crate_types<5unknown crate type found in `#[crate_type]` directive55ߋPt  unknown_lints "unrecognized lint attributeu ˌunnameable_test_itemsJCdetects an item that cannot be named being marked as `#[test_case]`CCЍVv ލunreachable_code%detects unreachable code pathsXw unreachable_patternsߎ#detects unreachable patternsux unreachable_pubȏ0)`pub` items not reachable from crate root))Iy   unsafe_code usage of `unsafe` codeԐz unsafe_op_in_unsafe_fn\Uunsafe operations in unsafe functions without an explicit unsafe block are deprecatedUU{ unstable_features’:3enabling unstable features (deprecated. do not use)33| unstable_name_collisionsГB;detects name collision with an existing but unstable method;;} !unsupported_calling_conventions,%use of unsupported calling convention%%~~ unsupported_naked_functions-&unsupported naked function definitions&& unusedߖlint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolonsۙ unused_allocation=6detects unnecessary allocations that can be eliminated66y unused_assignments1*detect assignments that will never be read** unused_attributes<5detects attributes that were not used by the compiler55\  unused_braces .'unnecessary braces around an expression''ϝ unused_comparisons?8comparisons made useless by limits of the types involved88ܞ| unused_crate_dependencies-&crate dependencies that are never used&&ޟ unused_doc_comments70detects doc comments that aren't used by rustdoc00] unused_extern_crates(!extern crates that are never used!!ǡ ݡunused_featuresC?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~˱˱ ˱ ʱ\XYU z  W  xzyPQv~u!"#[$%-/0w123[45789{:;<>?V?ABDEFYGHIyJLMNOQWQR\SUTUVXYZ[]^w_a]acUcdveghijxk}lnprtuvxyz|{{|}~Ҁzҁv΂uބy݅wLԊߋPЍVXuIԐ~ۙy\ϝܞ|ޟ]ǡբ{֣QW|V|zwxYϬ{Э|Үܯ{ݰ}{˱..... ....  ../ ̰.̰.ΰ.  "   E EED  Եֵ  ̰..6&[LintGroup{ lint: Lint{ label: "future_incompatible", description: r##"lint group for: forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, invalid-doc-attributes, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, unsupported-calling-conventions, deref-into-dyn-supertrait"##,}, children: &["forbidden_lint_groups", "illegal_floating_point_literal_pattern", "private_in_public", "pub_use_of_private_extern_crate", "invalid_type_param_default", "const_err", "unaligned_references", "patterns_in_fns_without_body", "missing_fragment_specifier", "late_bound_lifetime_arguments", "order_dependent_trait_objects", "coherence_leak_check", "unstable_name_collisions", "where_clauses_object_safety", "proc_macro_derive_resolution_fallback", "macro_expanded_macro_exports_accessed_by_absolute_paths", "ill_formed_attribute_input", "conflicting_repr_hints", "ambiguous_associated_items", "mutable_borrow_reservation_conflict", "indirect_structural_match", "pointer_structural_match", "nontrivial_structural_match", "soft_unstable", "cenum_impl_drop_cast", "const_evaluatable_unchecked", "uninhabited_static", "unsupported_naked_functions", "invalid_doc_attributes", "semicolon_in_expressions_from_macros", "legacy_derive_helpers", "proc_macro_back_compat", "unsupported_calling_conventions", "deref_into_dyn_supertrait"],}, LintGroup{ lint: Lint{ label: "nonstandard_style", description: r##"lint group for: non-camel-case-types, non-snake-case, non-upper-case-globals"##,}, children: &["non_camel_case_types", "non_snake_case", "non_upper_case_globals"],}, LintGroup{ lint: Lint{ label: "rust_2018_compatibility", description: r##"lint group for: keyword-idents, anonymous-parameters, tyvar-behind-raw-pointer, absolute-paths-not-starting-with-crate"##,}, children: &["keyword_idents", "anonymous_parameters", "tyvar_behind_raw_pointer", "absolute_paths_not_starting_with_crate"],}, LintGroup{ lint: Lint{ label: "rust_2018_idioms", description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##,}, children: &["bare_trait_objects", "unused_extern_crates", "ellipsis_inclusive_range_patterns", "elided_lifetimes_in_paths", "explicit_outlives_requirements"],}, LintGroup{ lint: Lint{ label: "rust_2021_compatibility", description: r##"lint group for: ellipsis-inclusive-range-patterns, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prelude-collisions, rust-2021-prefixes-incompatible-syntax, array-into-iter, non-fmt-panics"##,}, children: &["ellipsis_inclusive_range_patterns", "bare_trait_objects", "rust_2021_incompatible_closure_captures", "rust_2021_incompatible_or_patterns", "rust_2021_prelude_collisions", "rust_2021_prefixes_incompatible_syntax", "array_into_iter", "non_fmt_panics"],}, LintGroup{ lint: Lint{ label: "unused", description: r##"lint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolons"##,}, children: &["unused_imports", "unused_variables", "unused_assignments", "dead_code", "unused_mut", "unreachable_code", "unreachable_patterns", "unused_must_use", "unused_unsafe", "path_statements", "unused_attributes", "unused_macros", "unused_allocation", "unused_doc_comments", "unused_extern_crates", "unused_features", "unused_labels", "unused_parens", "unused_braces", "redundant_semicolons"],}, LintGroup{ lint: Lint{ label: "warnings", description: r##"lint group for: all lints that are set to issue warnings"##,}, children: &[],}], дfuture_incompatiblelint group for: forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, invalid-doc-attributes, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, unsupported-calling-conventions, deref-into-dyn-supertrait  "forbidden_lint_groups(&illegal_floating_point_literal_pattern&&ֽprivate_in_public!pub_use_of_private_extern_crateinvalid_type_param_defaultо  const_err unaligned_referencespatterns_in_fns_without_bodymissing_fragment_specifierlate_bound_lifetime_argumentsorder_dependent_trait_objectscoherence_leak_checkunstable_name_collisionswhere_clauses_object_safety'%proc_macro_derive_resolution_fallback%%97macro_expanded_macro_exports_accessed_by_absolute_paths77ill_formed_attribute_inputconflicting_repr_hintsambiguous_associated_items%#mutable_borrow_reservation_conflict##indirect_structural_matchpointer_structural_matchnontrivial_structural_match soft_unstable cenum_impl_drop_castconst_evaluatable_uncheckeduninhabited_staticunsupported_naked_functionsinvalid_doc_attributes&$semicolon_in_expressions_from_macros$$legacy_derive_helpersproc_macro_back_compat!unsupported_calling_conventionsderef_into_dyn_supertrait     nonstandard_styleSLlint group for: non-camel-case-types, non-snake-case, non-upper-case-globalsLLD non_camel_case_typesnon_snake_casenon_upper_case_globalsE  E  E      rust_2018_compatibility}vlint group for: keyword-idents, anonymous-parameters, tyvar-behind-raw-pointer, absolute-paths-not-starting-with-cratevv keyword_identsanonymous_parameterstyvar_behind_raw_pointer(&absolute_paths_not_starting_with_crate&&  rust_2018_idiomslint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements bare_trait_objectsunused_extern_crates#!ellipsis_inclusive_range_patterns!!elided_lifetimes_in_paths explicit_outlives_requirements  rust_2021_compatibilitylint group for: ellipsis-inclusive-range-patterns, bare-trait-objects, rust-2021-incompatible-closure-captures, rust-2021-incompatible-or-patterns, rust-2021-prelude-collisions, rust-2021-prefixes-incompatible-syntax, array-into-iter, non-fmt-panics #!ellipsis_inclusive_range_patterns!!bare_trait_objects)'rust_2021_incompatible_closure_captures''$"rust_2021_incompatible_or_patterns""rust_2021_prelude_collisions(&rust_2021_prefixes_incompatible_syntax&&array_into_iternon_fmt_panics ! unusedlint group for: unused-imports, unused-variables, unused-assignments, dead-code, unused-mut, unreachable-code, unreachable-patterns, unused-must-use, unused-unsafe, path-statements, unused-attributes, unused-macros, unused-allocation, unused-doc-comments, unused-extern-crates, unused-features, unused-labels, unused-parens, unused-braces, redundant-semicolons% unused_importsunused_variablesunused_assignments  dead_code   unused_mut unreachable_codeunreachable_patternsunused_must_use unused_unsafe path_statementsunused_attributes unused_macros unused_allocationunused_doc_commentsunused_extern_cratesunused_features unused_labels  unused_parens  unused_braces redundant_semicolons$%#$"# !"'  warnings?8lint group for: all lints that are set to issue warnings88+ *+)*()& '(.  &...,̰.ΰ.    EEEDԵԵֵ.                ^  &[Lint{ label: "rustdoc::all", description: r##"lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::missing-doc-code-examples, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs"##,}, Lint{ label: "rustdoc::bare_urls", description: r##"detects URLs that are not hyperlinks"##,}, Lint{ label: "rustdoc::broken_intra_doc_links", description: r##"failures in resolving intra-doc link targets"##,}, Lint{ label: "rustdoc::invalid_codeblock_attributes", description: r##"codeblock attribute looks a lot like a known one"##,}, Lint{ label: "rustdoc::invalid_html_tags", description: r##"detects invalid HTML tags in doc comments"##,}, Lint{ label: "rustdoc::invalid_rust_codeblocks", description: r##"codeblock could not be parsed as valid Rust or is empty"##,}, Lint{ label: "rustdoc::missing_crate_level_docs", description: r##"detects crates with no crate-level documentation"##,}, Lint{ label: "rustdoc::missing_doc_code_examples", description: r##"detects publicly-exported items without code samples in their documentation"##,}, Lint{ label: "rustdoc::private_doc_tests", description: r##"detects code samples in docs of private items not documented by rustdoc"##,}, Lint{ label: "rustdoc::private_intra_doc_links", description: r##"linking from a public item to a private one"##,}]   rustdoc::all lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::missing-doc-code-examples, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs^ rustdoc::bare_urls+$detects URLs that are not hyperlinks$$ !rustdoc::broken_intra_doc_links3,failures in resolving intra-doc link targets,, '%rustdoc::invalid_codeblock_attributes%%70codeblock attribute looks a lot like a known one00 rustdoc::invalid_html_tags0)detects invalid HTML tags in doc comments)) " rustdoc::invalid_rust_codeblocks >7codeblock could not be parsed as valid Rust or is empty77 #!rustdoc::missing_crate_level_docs!!70detects crates with no crate-level documentation00 $"rustdoc::missing_doc_code_examples""RKdetects publicly-exported items without code samples in their documentationKK rustdoc::private_doc_testsNGdetects code samples in docs of private items not documented by rustdocGG " rustdoc::private_intra_doc_links 2+linking from a public item to a private one++            ^        &[LintGroup{ lint: Lint{ label: "rustdoc::all", description: r##"lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::missing-doc-code-examples, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs"##,}, children: &["rustdoc::broken_intra_doc_links", "rustdoc::private_intra_doc_links", "rustdoc::missing_doc_code_examples", "rustdoc::private_doc_tests", "rustdoc::invalid_codeblock_attributes", "rustdoc::invalid_rust_codeblocks", "rustdoc::invalid_html_tags", "rustdoc::bare_urls", "rustdoc::missing_crate_level_docs"],}]  rustdoc::all lint group for: rustdoc::broken-intra-doc-links, rustdoc::private-intra-doc-links, rustdoc::missing-doc-code-examples, rustdoc::private-doc-tests, rustdoc::invalid-codeblock-attributes, rustdoc::invalid-rust-codeblocks, rustdoc::invalid-html-tags, rustdoc::bare-urls, rustdoc::missing-crate-level-docs  !rustdoc::broken_intra_doc_links" rustdoc::private_intra_doc_links $"rustdoc::missing_doc_code_examples""rustdoc::private_doc_tests'%rustdoc::invalid_codeblock_attributes%%" rustdoc::invalid_rust_codeblocks rustdoc::invalid_html_tagsrustdoc::bare_urls#!rustdoc::missing_crate_level_docs!!  ͋͋͋h͋ d͋h͋͋  i ͋͋̋  ֤HΤɭ۽  ڨ C Nа(  ډ $" ͋&[Lint{ label: "abi_c_cmse_nonsecure_call", description: r##"# `abi_c_cmse_nonsecure_call` The tracking issue for this feature is: [#81391] [#81391]: https://github.com/rust-lang/rust/issues/81391 ------------------------ The [TrustZone-M feature](https://developer.arm.com/documentation/100690/latest/) is available for targets with the Armv8-M architecture profile (`thumbv8m` in their target name). LLVM, the Rust compiler and the linker are providing [support](https://developer.arm.com/documentation/ecm0359818/latest/) for the TrustZone-M feature. One of the things provided, with this unstable feature, is the `C-cmse-nonsecure-call` function ABI. This ABI is used on function pointers to non-secure code to mark a non-secure function call (see [section 5.5](https://developer.arm.com/documentation/ecm0359818/latest/) for details). With this ABI, the compiler will do the following to perform the call: * save registers needed after the call to Secure memory * clear all registers that might contain confidential information * clear the Least Significant Bit of the function address * branches using the BLXNS instruction To avoid using the non-secure stack, the compiler will constrain the number and type of parameters/return value. The `extern "C-cmse-nonsecure-call"` ABI is otherwise equivalent to the `extern "C"` ABI. ``` rust,ignore #![no_std] #![feature(abi_c_cmse_nonsecure_call)] #[no_mangle] pub fn call_nonsecure_function(addr: usize) -> u32 { let non_secure_function = unsafe { core::mem::transmute:: u32>(addr) }; non_secure_function() } ``` ``` text $ rustc --emit asm --crate-type lib --target thumbv8m.main-none-eabi function.rs call_nonsecure_function: .fnstart .save {r7, lr} push {r7, lr} .setfp r7, sp mov r7, sp .pad #16 sub sp, #16 str r0, [sp, #12] ldr r0, [sp, #12] str r0, [sp, #8] b .LBB0_1 .LBB0_1: ldr r0, [sp, #8] push.w {r4, r5, r6, r7, r8, r9, r10, r11} bic r0, r0, #1 mov r1, r0 mov r2, r0 mov r3, r0 mov r4, r0 mov r5, r0 mov r6, r0 mov r7, r0 mov r8, r0 mov r9, r0 mov r10, r0 mov r11, r0 mov r12, r0 msr apsr_nzcvq, r0 blxns r0 pop.w {r4, r5, r6, r7, r8, r9, r10, r11} str r0, [sp, #4] b .LBB0_2 .LBB0_2: ldr r0, [sp, #4] add sp, #16 pop {r7, pc} ``` "##,}, Lint{ label: "abi_msp430_interrupt", description: r##"# `abi_msp430_interrupt` The tracking issue for this feature is: [#38487] [#38487]: https://github.com/rust-lang/rust/issues/38487 ------------------------ In the MSP430 architecture, interrupt handlers have a special calling convention. You can use the `"msp430-interrupt"` ABI to make the compiler apply the right calling convention to the interrupt handlers you define. ``` rust,ignore #![feature(abi_msp430_interrupt)] #![no_std] // Place the interrupt handler at the appropriate memory address // (Alternatively, you can use `#[used]` and remove `pub` and `#[no_mangle]`) #[link_section = "__interrupt_vector_10"] #[no_mangle] pub static TIM0_VECTOR: extern "msp430-interrupt" fn() = tim0; // The interrupt handler extern "msp430-interrupt" fn tim0() { // .. } ``` ``` text $ msp430-elf-objdump -CD ./target/msp430/release/app Disassembly of section __interrupt_vector_10: 0000fff2 : fff2: 00 c0 interrupt service routine at 0xc000 Disassembly of section .text: 0000c000 : c000: 00 13 reti ``` "##,}, Lint{ label: "abi_ptx", description: r##"# `abi_ptx` The tracking issue for this feature is: [#38788] [#38788]: https://github.com/rust-lang/rust/issues/38788 ------------------------ When emitting PTX code, all vanilla Rust functions (`fn`) get translated to "device" functions. These functions are *not* callable from the host via the CUDA API so a crate with only device functions is not too useful! OTOH, "global" functions *can* be called by the host; you can think of them as the real public API of your crate. To produce a global function use the `"ptx-kernel"` ABI. ``` rust,ignore #![feature(abi_ptx)] #![no_std] pub unsafe extern "ptx-kernel" fn global_function() { device_function(); } pub fn device_function() { // .. } ``` ``` text $ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm $ cat $(find -name '*.s') // // Generated by LLVM NVPTX Back-End // .version 3.2 .target sm_20 .address_size 64 // .globl _ZN6kernel15global_function17h46111ebe6516b382E .visible .entry _ZN6kernel15global_function17h46111ebe6516b382E() { ret; } // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E .visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E() { ret; } ``` "##,}, Lint{ label: "abi_thiscall", description: r##"# `abi_thiscall` The tracking issue for this feature is: [#42202] [#42202]: https://github.com/rust-lang/rust/issues/42202 ------------------------ The MSVC ABI on x86 Windows uses the `thiscall` calling convention for C++ instance methods by default; it is identical to the usual (C) calling convention on x86 Windows except that the first parameter of the method, the `this` pointer, is passed in the ECX register. "##,}, Lint{ label: "allocator_api", description: r##"# `allocator_api` The tracking issue for this feature is [#32838] [#32838]: https://github.com/rust-lang/rust/issues/32838 ------------------------ Sometimes you want the memory for one collection to use a different allocator than the memory for another collection. In this case, replacing the global allocator is not a workable option. Instead, you need to pass in an instance of an `AllocRef` to each collection for which you want a custom allocator. TBD "##,}, Lint{ label: "allocator_internals", description: r##"# `allocator_internals` This feature does not have a tracking issue, it is an unstable implementation detail of the `global_allocator` feature not intended for use outside the compiler. ------------------------ "##,}, Lint{ label: "arbitrary_enum_discriminant", description: r##"# `arbitrary_enum_discriminant` The tracking issue for this feature is: [#60553] [#60553]: https://github.com/rust-lang/rust/issues/60553 ------------------------ The `arbitrary_enum_discriminant` feature permits tuple-like and struct-like enum variants with `#[repr()]` to have explicit discriminants. ## Examples ```rust #![feature(arbitrary_enum_discriminant)] #[allow(dead_code)] #[repr(u8)] enum Enum { Unit = 3, Tuple(u16) = 2, Struct { a: u8, b: u16, } = 1, } impl Enum { fn tag(&self) -> u8 { unsafe { *(self as *const Self as *const u8) } } } assert_eq!(3, Enum::Unit.tag()); assert_eq!(2, Enum::Tuple(5).tag()); assert_eq!(1, Enum::Struct{a: 7, b: 11}.tag()); ``` "##,}, Lint{ label: "asm_const", description: r##"# `asm_const` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `const ` operand type to `asm!` and `global_asm!`. - `` must be an integer constant expression. - The value of the expression is formatted as a string and substituted directly into the asm template string. "##,}, Lint{ label: "asm_experimental_arch", description: r##"# `asm_experimental_arch` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature tracks `asm!` and `global_asm!` support for the following architectures: - NVPTX - PowerPC - Hexagon - MIPS32r2 and MIPS64r2 - wasm32 - BPF - SPIR-V - AVR ## Register classes | Architecture | Register class | Registers | LLVM constraint code | | ------------ | -------------- | ---------------------------------- | -------------------- | | MIPS | `reg` | `$[2-25]` | `r` | | MIPS | `freg` | `$f[0-31]` | `f` | | NVPTX | `reg16` | None\* | `h` | | NVPTX | `reg32` | None\* | `r` | | NVPTX | `reg64` | None\* | `l` | | Hexagon | `reg` | `r[0-28]` | `r` | | PowerPC | `reg` | `r[0-31]` | `r` | | PowerPC | `reg_nonzero` | `r[1-31]` | `b` | | PowerPC | `freg` | `f[0-31]` | `f` | | PowerPC | `cr` | `cr[0-7]`, `cr` | Only clobbers | | PowerPC | `xer` | `xer` | Only clobbers | | wasm32 | `local` | None\* | `r` | | BPF | `reg` | `r[0-10]` | `r` | | BPF | `wreg` | `w[0-10]` | `w` | | AVR | `reg` | `r[2-25]`, `XH`, `XL`, `ZH`, `ZL` | `r` | | AVR | `reg_upper` | `r[16-25]`, `XH`, `XL`, `ZH`, `ZL` | `d` | | AVR | `reg_pair` | `r3r2` .. `r25r24`, `X`, `Z` | `r` | | AVR | `reg_iw` | `r25r24`, `X`, `Z` | `w` | | AVR | `reg_ptr` | `X`, `Z` | `e` | > **Notes**: > - NVPTX doesn't have a fixed register set, so named registers are not supported. > > - WebAssembly doesn't have registers, so named registers are not supported. # Register class supported types | Architecture | Register class | Target feature | Allowed types | | ------------ | ------------------------------- | -------------- | --------------------------------------- | | MIPS32 | `reg` | None | `i8`, `i16`, `i32`, `f32` | | MIPS32 | `freg` | None | `f32`, `f64` | | MIPS64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` | | MIPS64 | `freg` | None | `f32`, `f64` | | NVPTX | `reg16` | None | `i8`, `i16` | | NVPTX | `reg32` | None | `i8`, `i16`, `i32`, `f32` | | NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` | | Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` | | PowerPC | `reg` | None | `i8`, `i16`, `i32` | | PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32` | | PowerPC | `freg` | None | `f32`, `f64` | | PowerPC | `cr` | N/A | Only clobbers | | PowerPC | `xer` | N/A | Only clobbers | | wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` | | BPF | `reg` | None | `i8` `i16` `i32` `i64` | | BPF | `wreg` | `alu32` | `i8` `i16` `i32` | | AVR | `reg`, `reg_upper` | None | `i8` | | AVR | `reg_pair`, `reg_iw`, `reg_ptr` | None | `i16` | ## Register aliases | Architecture | Base register | Aliases | | ------------ | ------------- | --------- | | Hexagon | `r29` | `sp` | | Hexagon | `r30` | `fr` | | Hexagon | `r31` | `lr` | | BPF | `r[0-10]` | `w[0-10]` | | AVR | `XH` | `r27` | | AVR | `XL` | `r26` | | AVR | `ZH` | `r31` | | AVR | `ZL` | `r30` | ## Unsupported registers | Architecture | Unsupported register | Reason | | ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | All | `sp` | The stack pointer must be restored to its original value at the end of an asm code block. | | All | `fr` (Hexagon), `$fp` (MIPS), `Y` (AVR) | The frame pointer cannot be used as an input or output. | | All | `r19` (Hexagon) | This is used internally by LLVM as a "base pointer" for functions with complex stack frames. | | MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. | | MIPS | `$1` or `$at` | Reserved for assembler. | | MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. | | MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. | | MIPS | `$ra` | Return address cannot be used as inputs or outputs. | | Hexagon | `lr` | This is the link register which cannot be used as an input or output. | | AVR | `r0`, `r1`, `r1r0` | Due to an issue in LLVM, the `r0` and `r1` registers cannot be used as inputs or outputs. If modified, they must be restored to their original values before the end of the block. | ## Template modifiers | Architecture | Register class | Modifier | Example output | LLVM modifier | | ------------ | -------------- | -------- | -------------- | ------------- | | MIPS | `reg` | None | `$2` | None | | MIPS | `freg` | None | `$f0` | None | | NVPTX | `reg16` | None | `rs0` | None | | NVPTX | `reg32` | None | `r0` | None | | NVPTX | `reg64` | None | `rd0` | None | | Hexagon | `reg` | None | `r0` | None | | PowerPC | `reg` | None | `0` | None | | PowerPC | `reg_nonzero` | None | `3` | `b` | | PowerPC | `freg` | None | `0` | None | # Flags covered by `preserves_flags` These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set: - AVR - The status register `SREG`. "##,}, Lint{ label: "asm_sym", description: r##"# `asm_sym` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `sym ` operand type to `asm!` and `global_asm!`. - `` must refer to a `fn` or `static`. - A mangled symbol name referring to the item is substituted into the asm template string. - The substituted string does not include any modifiers (e.g. GOT, PLT, relocations, etc). - `` is allowed to point to a `#[thread_local]` static, in which case the asm code can combine the symbol with relocations (e.g. `@plt`, `@TPOFF`) to read from thread-local data. "##,}, Lint{ label: "asm_unwind", description: r##"# `asm_unwind` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `may_unwind` option to `asm!` which allows an `asm` block to unwind stack and be part of the stack unwinding process. This option is only supported by the LLVM backend right now. "##,}, Lint{ label: "auto_traits", description: r##"# `auto_traits` The tracking issue for this feature is [#13231] [#13231]: https://github.com/rust-lang/rust/issues/13231 ---- The `auto_traits` feature gate allows you to define auto traits. Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits that are automatically implemented for every type, unless the type, or a type it contains, has explicitly opted out via a negative impl. (Negative impls are separately controlled by the `negative_impls` feature.) [`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html ```rust,ignore (partial-example) impl !Trait for Type {} ``` Example: ```rust #![feature(negative_impls)] #![feature(auto_traits)] auto trait Valid {} struct True; struct False; impl !Valid for False {} struct MaybeValid(T); fn must_be_valid(_t: T) { } fn main() { // works must_be_valid( MaybeValid(True) ); // compiler error - trait bound not satisfied // must_be_valid( MaybeValid(False) ); } ``` ## Automatic trait implementations When a type is declared as an `auto trait`, we will automatically create impls for every struct/enum/union, unless an explicit impl is provided. These automatic impls contain a where clause for each field of the form `T: AutoTrait`, where `T` is the type of the field and `AutoTrait` is the auto trait in question. As an example, consider the struct `List` and the auto trait `Send`: ```rust struct List { data: T, next: Option>>, } ``` Presuming that there is no explicit impl of `Send` for `List`, the compiler will supply an automatic impl of the form: ```rust struct List { data: T, next: Option>>, } unsafe impl Send for List where T: Send, // from the field `data` Option>>: Send, // from the field `next` { } ``` Explicit impls may be either positive or negative. They take the form: ```rust,ignore (partial-example) impl<...> AutoTrait for StructName<..> { } impl<...> !AutoTrait for StructName<..> { } ``` ## Coinduction: Auto traits permit cyclic matching Unlike ordinary trait matching, auto traits are **coinductive**. This means, in short, that cycles which occur in trait matching are considered ok. As an example, consider the recursive struct `List` introduced in the previous section. In attempting to determine whether `List: Send`, we would wind up in a cycle: to apply the impl, we must show that `Option>: Send`, which will in turn require `Box: Send` and then finally `List: Send` again. Under ordinary trait matching, this cycle would be an error, but for an auto trait it is considered a successful match. ## Items Auto traits cannot have any trait items, such as methods or associated types. This ensures that we can generate default implementations. ## Supertraits Auto traits cannot have supertraits. This is for soundness reasons, as the interaction of coinduction with implied bounds is difficult to reconcile. "##,}, Lint{ label: "box_patterns", description: r##"# `box_patterns` The tracking issue for this feature is: [#29641] [#29641]: https://github.com/rust-lang/rust/issues/29641 See also [`box_syntax`](box-syntax.md) ------------------------ Box patterns let you match on `Box`s: ```rust #![feature(box_patterns)] fn main() { let b = Some(Box::new(5)); match b { Some(box n) if n < 0 => { println!("Box contains negative number {}", n); }, Some(box n) if n >= 0 => { println!("Box contains non-negative number {}", n); }, None => { println!("No box"); }, _ => unreachable!() } } ``` "##,}, Lint{ label: "box_syntax", description: r##"# `box_syntax` The tracking issue for this feature is: [#49733] [#49733]: https://github.com/rust-lang/rust/issues/49733 See also [`box_patterns`](box-patterns.md) ------------------------ Currently the only stable way to create a `Box` is via the `Box::new` method. Also it is not possible in stable Rust to destructure a `Box` in a match pattern. The unstable `box` keyword can be used to create a `Box`. An example usage would be: ```rust #![feature(box_syntax)] fn main() { let b = box 5; } ``` "##,}, Lint{ label: "c_unwind", description: r##"# `c_unwind` The tracking issue for this feature is: [#74990] [#74990]: https://github.com/rust-lang/rust/issues/74990 ------------------------ Introduces four new ABI strings: "C-unwind", "stdcall-unwind", "thiscall-unwind", and "system-unwind". These enable unwinding from other languages (such as C++) into Rust frames and from Rust into other languages. See [RFC 2945] for more information. [RFC 2945]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md "##,}, Lint{ label: "c_variadic", description: r##"# `c_variadic` The tracking issue for this feature is: [#44930] [#44930]: https://github.com/rust-lang/rust/issues/44930 ------------------------ The `c_variadic` language feature enables C-variadic functions to be defined in Rust. The may be called both from within Rust and via FFI. ## Examples ```rust #![feature(c_variadic)] pub unsafe extern "C" fn add(n: usize, mut args: ...) -> usize { let mut sum = 0; for _ in 0..n { sum += args.arg::(); } sum } ``` "##,}, Lint{ label: "c_variadic", description: r##"# `c_variadic` The tracking issue for this feature is: [#44930] [#44930]: https://github.com/rust-lang/rust/issues/44930 ------------------------ The `c_variadic` library feature exposes the `VaList` structure, Rust's analogue of C's `va_list` type. ## Examples ```rust #![feature(c_variadic)] use std::ffi::VaList; pub unsafe extern "C" fn vadd(n: usize, mut args: VaList) -> usize { let mut sum = 0; for _ in 0..n { sum += args.arg::(); } sum } ``` "##,}, Lint{ label: "c_void_variant", description: r##"# `c_void_variant` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "cfg_panic", description: r##"# `cfg_panic` The tracking issue for this feature is: [#77443] [#77443]: https://github.com/rust-lang/rust/issues/77443 ------------------------ The `cfg_panic` feature makes it possible to execute different code depending on the panic strategy. Possible values at the moment are `"unwind"` or `"abort"`, although it is possible that new panic strategies may be added to Rust in the future. ## Examples ```rust #![feature(cfg_panic)] #[cfg(panic = "unwind")] fn a() { // ... } #[cfg(not(panic = "unwind"))] fn a() { // ... } fn b() { if cfg!(panic = "abort") { // ... } else { // ... } } ``` "##,}, Lint{ label: "cfg_sanitize", description: r##"# `cfg_sanitize` The tracking issue for this feature is: [#39699] [#39699]: https://github.com/rust-lang/rust/issues/39699 ------------------------ The `cfg_sanitize` feature makes it possible to execute different code depending on whether a particular sanitizer is enabled or not. ## Examples ```rust #![feature(cfg_sanitize)] #[cfg(sanitize = "thread")] fn a() { // ... } #[cfg(not(sanitize = "thread"))] fn a() { // ... } fn b() { if cfg!(sanitize = "leak") { // ... } else { // ... } } ``` "##,}, Lint{ label: "cfg_version", description: r##"# `cfg_version` The tracking issue for this feature is: [#64796] [#64796]: https://github.com/rust-lang/rust/issues/64796 ------------------------ The `cfg_version` feature makes it possible to execute different code depending on the compiler version. It will return true if the compiler version is greater than or equal to the specified version. ## Examples ```rust #![feature(cfg_version)] #[cfg(version("1.42"))] // 1.42 and above fn a() { // ... } #[cfg(not(version("1.42")))] // 1.41 and below fn a() { // ... } fn b() { if cfg!(version("1.42")) { // ... } else { // ... } } ``` "##,}, Lint{ label: "char_error_internals", description: r##"# `char_error_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "closure_track_caller", description: r##"# `closure_track_caller` The tracking issue for this feature is: [#87417] [#87417]: https://github.com/rust-lang/rust/issues/87417 ------------------------ Allows using the `#[track_caller]` attribute on closures and generators. Calls made to the closure or generator will have caller information available through `std::panic::Location::caller()`, just like using `#[track_caller]` on a function. "##,}, Lint{ label: "cmse_nonsecure_entry", description: r##"# `cmse_nonsecure_entry` The tracking issue for this feature is: [#75835] [#75835]: https://github.com/rust-lang/rust/issues/75835 ------------------------ The [TrustZone-M feature](https://developer.arm.com/documentation/100690/latest/) is available for targets with the Armv8-M architecture profile (`thumbv8m` in their target name). LLVM, the Rust compiler and the linker are providing [support](https://developer.arm.com/documentation/ecm0359818/latest/) for the TrustZone-M feature. One of the things provided, with this unstable feature, is the `cmse_nonsecure_entry` attribute. This attribute marks a Secure function as an entry function (see [section 5.4](https://developer.arm.com/documentation/ecm0359818/latest/) for details). With this attribute, the compiler will do the following: * add a special symbol on the function which is the `__acle_se_` prefix and the standard function name * constrain the number of parameters to avoid using the Non-Secure stack * before returning from the function, clear registers that might contain Secure information * use the `BXNS` instruction to return Because the stack can not be used to pass parameters, there will be compilation errors if: * the total size of all parameters is too big (for example more than four 32 bits integers) * the entry function is not using a C ABI The special symbol `__acle_se_` will be used by the linker to generate a secure gateway veneer. ``` rust,ignore #![feature(cmse_nonsecure_entry)] #[no_mangle] #[cmse_nonsecure_entry] pub extern "C" fn entry_function(input: u32) -> u32 { input + 6 } ``` ``` text $ rustc --emit obj --crate-type lib --target thumbv8m.main-none-eabi function.rs $ arm-none-eabi-objdump -D function.o 00000000 : 0: b580 push {r7, lr} 2: 466f mov r7, sp 4: b082 sub sp, #8 6: 9001 str r0, [sp, #4] 8: 1d81 adds r1, r0, #6 a: 460a mov r2, r1 c: 4281 cmp r1, r0 e: 9200 str r2, [sp, #0] 10: d30b bcc.n 2a 12: e7ff b.n 14 14: 9800 ldr r0, [sp, #0] 16: b002 add sp, #8 18: e8bd 4080 ldmia.w sp!, {r7, lr} 1c: 4671 mov r1, lr 1e: 4672 mov r2, lr 20: 4673 mov r3, lr 22: 46f4 mov ip, lr 24: f38e 8800 msr CPSR_f, lr 28: 4774 bxns lr 2a: f240 0000 movw r0, #0 2e: f2c0 0000 movt r0, #0 32: f240 0200 movw r2, #0 36: f2c0 0200 movt r2, #0 3a: 211c movs r1, #28 3c: f7ff fffe bl 0 <_ZN4core9panicking5panic17h5c028258ca2fb3f5E> 40: defe udf #254 ; 0xfe ``` "##,}, Lint{ label: "compiler_builtins", description: r##"# `compiler_builtins` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "concat_idents", description: r##"# `concat_idents` The tracking issue for this feature is: [#29599] [#29599]: https://github.com/rust-lang/rust/issues/29599 ------------------------ The `concat_idents` feature adds a macro for concatenating multiple identifiers into one identifier. ## Examples ```rust #![feature(concat_idents)] fn main() { fn foobar() -> u32 { 23 } let f = concat_idents!(foo, bar); assert_eq!(f(), 23); } ``` "##,}, Lint{ label: "const_eval_limit", description: r##"# `const_eval_limit` The tracking issue for this feature is: [#67217] [#67217]: https://github.com/rust-lang/rust/issues/67217 The `const_eval_limit` allows someone to limit the evaluation steps the CTFE undertakes to evaluate a `const fn`. "##,}, Lint{ label: "core_intrinsics", description: r##"# `core_intrinsics` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "core_panic", description: r##"# `core_panic` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "core_private_bignum", description: r##"# `core_private_bignum` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "core_private_diy_float", description: r##"# `core_private_diy_float` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "crate_visibility_modifier", description: r##"# `crate_visibility_modifier` The tracking issue for this feature is: [#53120] [#53120]: https://github.com/rust-lang/rust/issues/53120 ----- The `crate_visibility_modifier` feature allows the `crate` keyword to be used as a visibility modifier synonymous to `pub(crate)`, indicating that a type (function, _&c._) is to be visible to the entire enclosing crate, but not to other crates. ```rust #![feature(crate_visibility_modifier)] crate struct Foo { bar: usize, } ``` "##,}, Lint{ label: "custom_test_frameworks", description: r##"# `custom_test_frameworks` The tracking issue for this feature is: [#50297] [#50297]: https://github.com/rust-lang/rust/issues/50297 ------------------------ The `custom_test_frameworks` feature allows the use of `#[test_case]` and `#![test_runner]`. Any function, const, or static can be annotated with `#[test_case]` causing it to be aggregated (like `#[test]`) and be passed to the test runner determined by the `#![test_runner]` crate attribute. ```rust #![feature(custom_test_frameworks)] #![test_runner(my_runner)] fn my_runner(tests: &[&i32]) { for t in tests { if **t == 0 { println!("PASSED"); } else { println!("FAILED"); } } } #[test_case] const WILL_PASS: i32 = 0; #[test_case] const WILL_FAIL: i32 = 4; ``` "##,}, Lint{ label: "dec2flt", description: r##"# `dec2flt` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "default_free_fn", description: r##"# `default_free_fn` The tracking issue for this feature is: [#73014] [#73014]: https://github.com/rust-lang/rust/issues/73014 ------------------------ Adds a free `default()` function to the `std::default` module. This function just forwards to [`Default::default()`], but may remove repetition of the word "default" from the call site. [`Default::default()`]: https://doc.rust-lang.org/nightly/std/default/trait.Default.html#tymethod.default Here is an example: ```rust #![feature(default_free_fn)] use std::default::default; #[derive(Default)] struct AppConfig { foo: FooConfig, bar: BarConfig, } #[derive(Default)] struct FooConfig { foo: i32, } #[derive(Default)] struct BarConfig { bar: f32, baz: u8, } fn main() { let options = AppConfig { foo: default(), bar: BarConfig { bar: 10.1, ..default() }, }; } ``` "##,}, Lint{ label: "derive_clone_copy", description: r##"# `derive_clone_copy` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "derive_eq", description: r##"# `derive_eq` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "doc_cfg", description: r##"# `doc_cfg` The tracking issue for this feature is: [#43781] ------ The `doc_cfg` feature allows an API be documented as only available in some specific platforms. This attribute has two effects: 1. In the annotated item's documentation, there will be a message saying "This is supported on (platform) only". 2. The item's doc-tests will only run on the specific platform. In addition to allowing the use of the `#[doc(cfg)]` attribute, this feature enables the use of a special conditional compilation flag, `#[cfg(doc)]`, set whenever building documentation on your crate. This feature was introduced as part of PR [#43348] to allow the platform-specific parts of the standard library be documented. ```rust #![feature(doc_cfg)] #[cfg(any(windows, doc))] #[doc(cfg(windows))] /// The application's icon in the notification area (a.k.a. system tray). /// /// # Examples /// /// ```no_run /// extern crate my_awesome_ui_library; /// use my_awesome_ui_library::current_app; /// use my_awesome_ui_library::windows::notification; /// /// let icon = current_app().get::(); /// icon.show(); /// icon.show_message("Hello"); /// ``` pub struct Icon { // ... } ``` [#43781]: https://github.com/rust-lang/rust/issues/43781 [#43348]: https://github.com/rust-lang/rust/issues/43348 "##,}, Lint{ label: "doc_masked", description: r##"# `doc_masked` The tracking issue for this feature is: [#44027] ----- The `doc_masked` feature allows a crate to exclude types from a given crate from appearing in lists of trait implementations. The specifics of the feature are as follows: 1. When rustdoc encounters an `extern crate` statement annotated with a `#[doc(masked)]` attribute, it marks the crate as being masked. 2. When listing traits a given type implements, rustdoc ensures that traits from masked crates are not emitted into the documentation. 3. When listing types that implement a given trait, rustdoc ensures that types from masked crates are not emitted into the documentation. This feature was introduced in PR [#44026] to ensure that compiler-internal and implementation-specific types and traits were not included in the standard library's documentation. Such types would introduce broken links into the documentation. [#44026]: https://github.com/rust-lang/rust/pull/44026 [#44027]: https://github.com/rust-lang/rust/pull/44027 "##,}, Lint{ label: "doc_notable_trait", description: r##"# `doc_notable_trait` The tracking issue for this feature is: [#45040] The `doc_notable_trait` feature allows the use of the `#[doc(notable_trait)]` attribute, which will display the trait in a "Notable traits" dialog for functions returning types that implement the trait. For example, this attribute is applied to the `Iterator`, `Future`, `io::Read`, and `io::Write` traits in the standard library. You can do this on your own traits like so: ``` #![feature(doc_notable_trait)] #[doc(notable_trait)] pub trait MyTrait {} pub struct MyStruct; impl MyTrait for MyStruct {} /// The docs for this function will have a button that displays a dialog about /// `MyStruct` implementing `MyTrait`. pub fn my_fn() -> MyStruct { MyStruct } ``` This feature was originally implemented in PR [#45039]. See also its documentation in [the rustdoc book][rustdoc-book-notable_trait]. [#45040]: https://github.com/rust-lang/rust/issues/45040 [#45039]: https://github.com/rust-lang/rust/pull/45039 [rustdoc-book-notable_trait]: ../../rustdoc/unstable-features.html#adding-your-trait-to-the-notable-traits-dialog "##,}, Lint{ label: "exclusive_range_pattern", description: r##"# `exclusive_range_pattern` The tracking issue for this feature is: [#37854]. [#67264]: https://github.com/rust-lang/rust/issues/67264 [#37854]: https://github.com/rust-lang/rust/issues/37854 ----- The `exclusive_range_pattern` feature allows non-inclusive range patterns (`0..10`) to be used in appropriate pattern matching contexts. It also can be combined with `#![feature(half_open_range_patterns]` to be able to use RangeTo patterns (`..10`). It also enabled RangeFrom patterns but that has since been stabilized. ```rust #![feature(exclusive_range_pattern)] let x = 5; match x { 0..10 => println!("single digit"), 10 => println!("ten isn't part of the above range"), _ => println!("nor is everything else.") } ``` "##,}, Lint{ label: "explicit_generic_args_with_impl_trait", description: r##"# `explicit_generic_args_with_impl_trait` The tracking issue for this feature is: [#83701] [#83701]: https://github.com/rust-lang/rust/issues/83701 ------------------------ The `explicit_generic_args_with_impl_trait` feature gate lets you specify generic arguments even when `impl Trait` is used in argument position. A simple example is: ```rust #![feature(explicit_generic_args_with_impl_trait)] fn foo(_f: impl AsRef) {} fn main() { foo::("".to_string()); } ``` This is currently rejected: ```text error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position --> src/main.rs:6:11 | 6 | foo::("".to_string()); | ^^^ explicit generic argument not allowed ``` However it would compile if `explicit_generic_args_with_impl_trait` is enabled. Note that the synthetic type parameters from `impl Trait` are still implicit and you cannot explicitly specify these: ```rust,compile_fail #![feature(explicit_generic_args_with_impl_trait)] fn foo(_f: impl AsRef) {} fn bar>(_f: F) {} fn main() { bar::("".to_string()); // Okay bar::("".to_string()); // Okay foo::("".to_string()); // Okay foo::("".to_string()); // Error, you cannot specify `impl Trait` explicitly } ``` "##,}, Lint{ label: "fd", description: r##"# `fd` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "fd_read", description: r##"# `fd_read` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "ffi_const", description: r##"# `ffi_const` The tracking issue for this feature is: [#58328] ------ The `#[ffi_const]` attribute applies clang's `const` attribute to foreign functions declarations. That is, `#[ffi_const]` functions shall have no effects except for its return value, which can only depend on the values of the function parameters, and is not affected by changes to the observable state of the program. Applying the `#[ffi_const]` attribute to a function that violates these requirements is undefined behaviour. This attribute enables Rust to perform common optimizations, like sub-expression elimination, and it can avoid emitting some calls in repeated invocations of the function with the same argument values regardless of other operations being performed in between these functions calls (as opposed to `#[ffi_pure]` functions). ## Pitfalls A `#[ffi_const]` function can only read global memory that would not affect its return value for the whole execution of the program (e.g. immutable global memory). `#[ffi_const]` functions are referentially-transparent and therefore more strict than `#[ffi_pure]` functions. A common pitfall involves applying the `#[ffi_const]` attribute to a function that reads memory through pointer arguments which do not necessarily point to immutable global memory. A `#[ffi_const]` function that returns unit has no effect on the abstract machine's state, and a `#[ffi_const]` function cannot be `#[ffi_pure]`. A `#[ffi_const]` function must not diverge, neither via a side effect (e.g. a call to `abort`) nor by infinite loops. When translating C headers to Rust FFI, it is worth verifying for which targets the `const` attribute is enabled in those headers, and using the appropriate `cfg` macros in the Rust side to match those definitions. While the semantics of `const` are implemented identically by many C and C++ compilers, e.g., clang, [GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily implemented in this way on all of them. It is therefore also worth verifying that the semantics of the C toolchain used to compile the binary being linked against are compatible with those of the `#[ffi_const]`. [#58328]: https://github.com/rust-lang/rust/issues/58328 [ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgigch.html [GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute [IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_const.htm "##,}, Lint{ label: "ffi_pure", description: r##"# `ffi_pure` The tracking issue for this feature is: [#58329] ------ The `#[ffi_pure]` attribute applies clang's `pure` attribute to foreign functions declarations. That is, `#[ffi_pure]` functions shall have no effects except for its return value, which shall not change across two consecutive function calls with the same parameters. Applying the `#[ffi_pure]` attribute to a function that violates these requirements is undefined behavior. This attribute enables Rust to perform common optimizations, like sub-expression elimination and loop optimizations. Some common examples of pure functions are `strlen` or `memcmp`. These optimizations are only applicable when the compiler can prove that no program state observable by the `#[ffi_pure]` function has changed between calls of the function, which could alter the result. See also the `#[ffi_const]` attribute, which provides stronger guarantees regarding the allowable behavior of a function, enabling further optimization. ## Pitfalls A `#[ffi_pure]` function can read global memory through the function parameters (e.g. pointers), globals, etc. `#[ffi_pure]` functions are not referentially-transparent, and are therefore more relaxed than `#[ffi_const]` functions. However, accessing global memory through volatile or atomic reads can violate the requirement that two consecutive function calls shall return the same value. A `pure` function that returns unit has no effect on the abstract machine's state. A `#[ffi_pure]` function must not diverge, neither via a side effect (e.g. a call to `abort`) nor by infinite loops. When translating C headers to Rust FFI, it is worth verifying for which targets the `pure` attribute is enabled in those headers, and using the appropriate `cfg` macros in the Rust side to match those definitions. While the semantics of `pure` are implemented identically by many C and C++ compilers, e.g., clang, [GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily implemented in this way on all of them. It is therefore also worth verifying that the semantics of the C toolchain used to compile the binary being linked against are compatible with those of the `#[ffi_pure]`. [#58329]: https://github.com/rust-lang/rust/issues/58329 [ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacigdac.html [GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute [IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_pure.htm "##,}, Lint{ label: "flt2dec", description: r##"# `flt2dec` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "fmt_internals", description: r##"# `fmt_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "fn_traits", description: r##"# `fn_traits` The tracking issue for this feature is [#29625] See Also: [`unboxed_closures`](../language-features/unboxed-closures.md) [#29625]: https://github.com/rust-lang/rust/issues/29625 ---- The `fn_traits` feature allows for implementation of the [`Fn*`] traits for creating custom closure-like types. [`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html ```rust #![feature(unboxed_closures)] #![feature(fn_traits)] struct Adder { a: u32 } impl FnOnce<(u32, )> for Adder { type Output = u32; extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output { self.a + b.0 } } fn main() { let adder = Adder { a: 3 }; assert_eq!(adder(2), 5); } ``` "##,}, Lint{ label: "generators", description: r##"# `generators` The tracking issue for this feature is: [#43122] [#43122]: https://github.com/rust-lang/rust/issues/43122 ------------------------ The `generators` feature gate in Rust allows you to define generator or coroutine literals. A generator is a "resumable function" that syntactically resembles a closure but compiles to much different semantics in the compiler itself. The primary feature of a generator is that it can be suspended during execution to be resumed at a later date. Generators use the `yield` keyword to "return", and then the caller can `resume` a generator to resume execution just after the `yield` keyword. Generators are an extra-unstable feature in the compiler right now. Added in [RFC 2033] they're mostly intended right now as a information/constraint gathering phase. The intent is that experimentation can happen on the nightly compiler before actual stabilization. A further RFC will be required to stabilize generators/coroutines and will likely contain at least a few small tweaks to the overall design. [RFC 2033]: https://github.com/rust-lang/rfcs/pull/2033 A syntactical example of a generator is: ```rust #![feature(generators, generator_trait)] use std::ops::{Generator, GeneratorState}; use std::pin::Pin; fn main() { let mut generator = || { yield 1; return "foo" }; match Pin::new(&mut generator).resume(()) { GeneratorState::Yielded(1) => {} _ => panic!("unexpected value from resume"), } match Pin::new(&mut generator).resume(()) { GeneratorState::Complete("foo") => {} _ => panic!("unexpected value from resume"), } } ``` Generators are closure-like literals which can contain a `yield` statement. The `yield` statement takes an optional expression of a value to yield out of the generator. All generator literals implement the `Generator` trait in the `std::ops` module. The `Generator` trait has one main method, `resume`, which resumes execution of the generator at the previous suspension point. An example of the control flow of generators is that the following example prints all numbers in order: ```rust #![feature(generators, generator_trait)] use std::ops::Generator; use std::pin::Pin; fn main() { let mut generator = || { println!("2"); yield; println!("4"); }; println!("1"); Pin::new(&mut generator).resume(()); println!("3"); Pin::new(&mut generator).resume(()); println!("5"); } ``` At this time the main intended use case of generators is an implementation primitive for async/await syntax, but generators will likely be extended to ergonomic implementations of iterators and other primitives in the future. Feedback on the design and usage is always appreciated! ### The `Generator` trait The `Generator` trait in `std::ops` currently looks like: ```rust # #![feature(arbitrary_self_types, generator_trait)] # use std::ops::GeneratorState; # use std::pin::Pin; pub trait Generator { type Yield; type Return; fn resume(self: Pin<&mut Self>, resume: R) -> GeneratorState; } ``` The `Generator::Yield` type is the type of values that can be yielded with the `yield` statement. The `Generator::Return` type is the returned type of the generator. This is typically the last expression in a generator's definition or any value passed to `return` in a generator. The `resume` function is the entry point for executing the `Generator` itself. The return value of `resume`, `GeneratorState`, looks like: ```rust pub enum GeneratorState { Yielded(Y), Complete(R), } ``` The `Yielded` variant indicates that the generator can later be resumed. This corresponds to a `yield` point in a generator. The `Complete` variant indicates that the generator is complete and cannot be resumed again. Calling `resume` after a generator has returned `Complete` will likely result in a panic of the program. ### Closure-like semantics The closure-like syntax for generators alludes to the fact that they also have closure-like semantics. Namely: * When created, a generator executes no code. A closure literal does not actually execute any of the closure's code on construction, and similarly a generator literal does not execute any code inside the generator when constructed. * Generators can capture outer variables by reference or by move, and this can be tweaked with the `move` keyword at the beginning of the closure. Like closures all generators will have an implicit environment which is inferred by the compiler. Outer variables can be moved into a generator for use as the generator progresses. * Generator literals produce a value with a unique type which implements the `std::ops::Generator` trait. This allows actual execution of the generator through the `Generator::resume` method as well as also naming it in return types and such. * Traits like `Send` and `Sync` are automatically implemented for a `Generator` depending on the captured variables of the environment. Unlike closures, generators also depend on variables live across suspension points. This means that although the ambient environment may be `Send` or `Sync`, the generator itself may not be due to internal variables live across `yield` points being not-`Send` or not-`Sync`. Note that generators do not implement traits like `Copy` or `Clone` automatically. * Whenever a generator is dropped it will drop all captured environment variables. ### Generators as state machines In the compiler, generators are currently compiled as state machines. Each `yield` expression will correspond to a different state that stores all live variables over that suspension point. Resumption of a generator will dispatch on the current state and then execute internally until a `yield` is reached, at which point all state is saved off in the generator and a value is returned. Let's take a look at an example to see what's going on here: ```rust #![feature(generators, generator_trait)] use std::ops::Generator; use std::pin::Pin; fn main() { let ret = "foo"; let mut generator = move || { yield 1; return ret }; Pin::new(&mut generator).resume(()); Pin::new(&mut generator).resume(()); } ``` This generator literal will compile down to something similar to: ```rust #![feature(arbitrary_self_types, generators, generator_trait)] use std::ops::{Generator, GeneratorState}; use std::pin::Pin; fn main() { let ret = "foo"; let mut generator = { enum __Generator { Start(&'static str), Yield1(&'static str), Done, } impl Generator for __Generator { type Yield = i32; type Return = &'static str; fn resume(mut self: Pin<&mut Self>, resume: ()) -> GeneratorState { use std::mem; match mem::replace(&mut *self, __Generator::Done) { __Generator::Start(s) => { *self = __Generator::Yield1(s); GeneratorState::Yielded(1) } __Generator::Yield1(s) => { *self = __Generator::Done; GeneratorState::Complete(s) } __Generator::Done => { panic!("generator resumed after completion") } } } } __Generator::Start(ret) }; Pin::new(&mut generator).resume(()); Pin::new(&mut generator).resume(()); } ``` Notably here we can see that the compiler is generating a fresh type, `__Generator` in this case. This type has a number of states (represented here as an `enum`) corresponding to each of the conceptual states of the generator. At the beginning we're closing over our outer variable `foo` and then that variable is also live over the `yield` point, so it's stored in both states. When the generator starts it'll immediately yield 1, but it saves off its state just before it does so indicating that it has reached the yield point. Upon resuming again we'll execute the `return ret` which returns the `Complete` state. Here we can also note that the `Done` state, if resumed, panics immediately as it's invalid to resume a completed generator. It's also worth noting that this is just a rough desugaring, not a normative specification for what the compiler does. "##,}, Lint{ label: "half_open_range_patterns", description: r##"# `half_open_range_patterns` The tracking issue for this feature is: [#67264] It is part of the `#![exclusive_range_pattern]` feature, tracked at [#37854]. [#67264]: https://github.com/rust-lang/rust/issues/67264 [#37854]: https://github.com/rust-lang/rust/issues/37854 ----- The `half_open_range_patterns` feature allows RangeTo patterns (`..10`) to be used in appropriate pattern matching contexts. This requires also enabling the `exclusive_range_pattern` feature. It also enabled RangeFrom patterns but that has since been stabilized. ```rust #![feature(half_open_range_patterns)] #![feature(exclusive_range_pattern)] let x = 5; match x { ..0 => println!("negative!"), // "RangeTo" pattern. Unstable. 0 => println!("zero!"), 1.. => println!("positive!"), // "RangeFrom" pattern. Stable. } ``` "##,}, Lint{ label: "infer_static_outlives_requirements", description: r##"# `infer_static_outlives_requirements` The tracking issue for this feature is: [#54185] [#54185]: https://github.com/rust-lang/rust/issues/54185 ------------------------ The `infer_static_outlives_requirements` feature indicates that certain `'static` outlives requirements can be inferred by the compiler rather than stating them explicitly. Note: It is an accompanying feature to `infer_outlives_requirements`, which must be enabled to infer outlives requirements. For example, currently generic struct definitions that contain references, require where-clauses of the form T: 'static. By using this feature the outlives predicates will be inferred, although they may still be written explicitly. ```rust,ignore (pseudo-Rust) struct Foo where U: 'static { // <-- currently required bar: Bar } struct Bar { x: T, } ``` ## Examples: ```rust,ignore (pseudo-Rust) #![feature(infer_outlives_requirements)] #![feature(infer_static_outlives_requirements)] #[rustc_outlives] // Implicitly infer U: 'static struct Foo { bar: Bar } struct Bar { x: T, } ``` "##,}, Lint{ label: "inline_const", description: r##"# `inline_const` The tracking issue for this feature is: [#76001] See also [`inline_const_pat`](inline-const-pat.md) ------ This feature allows you to use inline constant expressions. For example, you can turn this code: ```rust # fn add_one(x: i32) -> i32 { x + 1 } const MY_COMPUTATION: i32 = 1 + 2 * 3 / 4; fn main() { let x = add_one(MY_COMPUTATION); } ``` into this code: ```rust #![feature(inline_const)] # fn add_one(x: i32) -> i32 { x + 1 } fn main() { let x = add_one(const { 1 + 2 * 3 / 4 }); } ``` [#76001]: https://github.com/rust-lang/rust/issues/76001 "##,}, Lint{ label: "inline_const_pat", description: r##"# `inline_const_pat` The tracking issue for this feature is: [#76001] See also [`inline_const`](inline-const.md) ------ This feature allows you to use inline constant expressions in pattern position: ```rust #![feature(inline_const_pat)] const fn one() -> i32 { 1 } let some_int = 3; match some_int { const { 1 + 2 } => println!("Matched 1 + 2"), const { one() } => println!("Matched const fn returning 1"), _ => println!("Didn't match anything :("), } ``` [#76001]: https://github.com/rust-lang/rust/issues/76001 "##,}, Lint{ label: "int_error_internals", description: r##"# `int_error_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "internal_output_capture", description: r##"# `internal_output_capture` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "intra_doc_pointers", description: r##"# `intra-doc-pointers` The tracking issue for this feature is: [#80896] [#80896]: https://github.com/rust-lang/rust/issues/80896 ------------------------ Rustdoc does not currently allow disambiguating between `*const` and `*mut`, and raw pointers in intra-doc links are unstable until it does. ```rust #![feature(intra_doc_pointers)] //! [pointer::add] ``` "##,}, Lint{ label: "intrinsics", description: r##"# `intrinsics` The tracking issue for this feature is: None. Intrinsics are never intended to be stable directly, but intrinsics are often exported in some sort of stable manner. Prefer using the stable interfaces to the intrinsic directly when you can. ------------------------ These are imported as if they were FFI functions, with the special `rust-intrinsic` ABI. For example, if one was in a freestanding context, but wished to be able to `transmute` between types, and perform efficient pointer arithmetic, one would import those functions via a declaration like ```rust #![feature(intrinsics)] # fn main() {} extern "rust-intrinsic" { fn transmute(x: T) -> U; fn offset(dst: *const T, offset: isize) -> *const T; } ``` As with any other FFI functions, these are always `unsafe` to call. "##,}, Lint{ label: "is_sorted", description: r##"# `is_sorted` The tracking issue for this feature is: [#53485] [#53485]: https://github.com/rust-lang/rust/issues/53485 ------------------------ Add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to `[T]`; add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to `Iterator`. "##,}, Lint{ label: "lang_items", description: r##"# `lang_items` The tracking issue for this feature is: None. ------------------------ The `rustc` compiler has certain pluggable operations, that is, functionality that isn't hard-coded into the language, but is implemented in libraries, with a special marker to tell the compiler it exists. The marker is the attribute `#[lang = "..."]` and there are various different values of `...`, i.e. various different 'lang items'. For example, `Box` pointers require two lang items, one for allocation and one for deallocation. A freestanding program that uses the `Box` sugar for dynamic allocations via `malloc` and `free`: ```rust,ignore (libc-is-finicky) #![feature(lang_items, box_syntax, start, libc, core_intrinsics, rustc_private)] #![no_std] use core::intrinsics; use core::panic::PanicInfo; extern crate libc; #[lang = "owned_box"] pub struct Box(*mut T); #[lang = "exchange_malloc"] unsafe fn allocate(size: usize, _align: usize) -> *mut u8 { let p = libc::malloc(size as libc::size_t) as *mut u8; // Check if `malloc` failed: if p as usize == 0 { intrinsics::abort(); } p } #[lang = "box_free"] unsafe fn box_free(ptr: *mut T) { libc::free(ptr as *mut libc::c_void) } #[start] fn main(_argc: isize, _argv: *const *const u8) -> isize { let _x = box 1; 0 } #[lang = "eh_personality"] extern fn rust_eh_personality() {} #[lang = "panic_impl"] extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } #[no_mangle] pub extern fn rust_eh_register_frames () {} #[no_mangle] pub extern fn rust_eh_unregister_frames () {} ``` Note the use of `abort`: the `exchange_malloc` lang item is assumed to return a valid pointer, and so needs to do the check internally. Other features provided by lang items include: - overloadable operators via traits: the traits corresponding to the `==`, `<`, dereferencing (`*`) and `+` (etc.) operators are all marked with lang items; those specific four are `eq`, `ord`, `deref`, and `add` respectively. - stack unwinding and general failure; the `eh_personality`, `panic` and `panic_bounds_check` lang items. - the traits in `std::marker` used to indicate types of various kinds; lang items `send`, `sync` and `copy`. - the marker types and variance indicators found in `std::marker`; lang items `covariant_type`, `contravariant_lifetime`, etc. Lang items are loaded lazily by the compiler; e.g. if one never uses `Box` then there is no need to define functions for `exchange_malloc` and `box_free`. `rustc` will emit an error when an item is needed but not found in the current crate or any that it depends on. Most lang items are defined by `libcore`, but if you're trying to build an executable without the standard library, you'll run into the need for lang items. The rest of this page focuses on this use-case, even though lang items are a bit broader than that. ### Using libc In order to build a `#[no_std]` executable we will need libc as a dependency. We can specify this using our `Cargo.toml` file: ```toml [dependencies] libc = { version = "0.2.14", default-features = false } ``` Note that the default features have been disabled. This is a critical step - **the default features of libc include the standard library and so must be disabled.** ### Writing an executable without stdlib Controlling the entry point is possible in two ways: the `#[start]` attribute, or overriding the default shim for the C `main` function with your own. The function marked `#[start]` is passed the command line parameters in the same format as C: ```rust,ignore (libc-is-finicky) #![feature(lang_items, core_intrinsics, rustc_private)] #![feature(start)] #![no_std] use core::intrinsics; use core::panic::PanicInfo; // Pull in the system libc library for what crt0.o likely requires. extern crate libc; // Entry point for this program. #[start] fn start(_argc: isize, _argv: *const *const u8) -> isize { 0 } // These functions are used by the compiler, but not // for a bare-bones hello world. These are normally // provided by libstd. #[lang = "eh_personality"] #[no_mangle] pub extern fn rust_eh_personality() { } #[lang = "panic_impl"] #[no_mangle] pub extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } ``` To override the compiler-inserted `main` shim, one has to disable it with `#![no_main]` and then create the appropriate symbol with the correct ABI and the correct name, which requires overriding the compiler's name mangling too: ```rust,ignore (libc-is-finicky) #![feature(lang_items, core_intrinsics, rustc_private)] #![feature(start)] #![no_std] #![no_main] use core::intrinsics; use core::panic::PanicInfo; // Pull in the system libc library for what crt0.o likely requires. extern crate libc; // Entry point for this program. #[no_mangle] // ensure that this symbol is called `main` in the output pub extern fn main(_argc: i32, _argv: *const *const u8) -> i32 { 0 } // These functions are used by the compiler, but not // for a bare-bones hello world. These are normally // provided by libstd. #[lang = "eh_personality"] #[no_mangle] pub extern fn rust_eh_personality() { } #[lang = "panic_impl"] #[no_mangle] pub extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } ``` In many cases, you may need to manually link to the `compiler_builtins` crate when building a `no_std` binary. You may observe this via linker error messages such as "```undefined reference to `__rust_probestack'```". ## More about the language items The compiler currently makes a few assumptions about symbols which are available in the executable to call. Normally these functions are provided by the standard library, but without it you must define your own. These symbols are called "language items", and they each have an internal name, and then a signature that an implementation must conform to. The first of these functions, `rust_eh_personality`, is used by the failure mechanisms of the compiler. This is often mapped to GCC's personality function (see the [libstd implementation][unwind] for more information), but crates which do not trigger a panic can be assured that this function is never called. The language item's name is `eh_personality`. [unwind]: https://github.com/rust-lang/rust/blob/master/library/panic_unwind/src/gcc.rs The second function, `rust_begin_panic`, is also used by the failure mechanisms of the compiler. When a panic happens, this controls the message that's displayed on the screen. While the language item's name is `panic_impl`, the symbol name is `rust_begin_panic`. Finally, a `eh_catch_typeinfo` static is needed for certain targets which implement Rust panics on top of C++ exceptions. ## List of all language items This is a list of all language items in Rust along with where they are located in the source code. - Primitives - `i8`: `libcore/num/mod.rs` - `i16`: `libcore/num/mod.rs` - `i32`: `libcore/num/mod.rs` - `i64`: `libcore/num/mod.rs` - `i128`: `libcore/num/mod.rs` - `isize`: `libcore/num/mod.rs` - `u8`: `libcore/num/mod.rs` - `u16`: `libcore/num/mod.rs` - `u32`: `libcore/num/mod.rs` - `u64`: `libcore/num/mod.rs` - `u128`: `libcore/num/mod.rs` - `usize`: `libcore/num/mod.rs` - `f32`: `libstd/f32.rs` - `f64`: `libstd/f64.rs` - `char`: `libcore/char.rs` - `slice`: `liballoc/slice.rs` - `str`: `liballoc/str.rs` - `const_ptr`: `libcore/ptr.rs` - `mut_ptr`: `libcore/ptr.rs` - `unsafe_cell`: `libcore/cell.rs` - Runtime - `start`: `libstd/rt.rs` - `eh_personality`: `libpanic_unwind/emcc.rs` (EMCC) - `eh_personality`: `libpanic_unwind/gcc.rs` (GNU) - `eh_personality`: `libpanic_unwind/seh.rs` (SEH) - `eh_catch_typeinfo`: `libpanic_unwind/emcc.rs` (EMCC) - `panic`: `libcore/panicking.rs` - `panic_bounds_check`: `libcore/panicking.rs` - `panic_impl`: `libcore/panicking.rs` - `panic_impl`: `libstd/panicking.rs` - Allocations - `owned_box`: `liballoc/boxed.rs` - `exchange_malloc`: `liballoc/heap.rs` - `box_free`: `liballoc/heap.rs` - Operands - `not`: `libcore/ops/bit.rs` - `bitand`: `libcore/ops/bit.rs` - `bitor`: `libcore/ops/bit.rs` - `bitxor`: `libcore/ops/bit.rs` - `shl`: `libcore/ops/bit.rs` - `shr`: `libcore/ops/bit.rs` - `bitand_assign`: `libcore/ops/bit.rs` - `bitor_assign`: `libcore/ops/bit.rs` - `bitxor_assign`: `libcore/ops/bit.rs` - `shl_assign`: `libcore/ops/bit.rs` - `shr_assign`: `libcore/ops/bit.rs` - `deref`: `libcore/ops/deref.rs` - `deref_mut`: `libcore/ops/deref.rs` - `index`: `libcore/ops/index.rs` - `index_mut`: `libcore/ops/index.rs` - `add`: `libcore/ops/arith.rs` - `sub`: `libcore/ops/arith.rs` - `mul`: `libcore/ops/arith.rs` - `div`: `libcore/ops/arith.rs` - `rem`: `libcore/ops/arith.rs` - `neg`: `libcore/ops/arith.rs` - `add_assign`: `libcore/ops/arith.rs` - `sub_assign`: `libcore/ops/arith.rs` - `mul_assign`: `libcore/ops/arith.rs` - `div_assign`: `libcore/ops/arith.rs` - `rem_assign`: `libcore/ops/arith.rs` - `eq`: `libcore/cmp.rs` - `ord`: `libcore/cmp.rs` - Functions - `fn`: `libcore/ops/function.rs` - `fn_mut`: `libcore/ops/function.rs` - `fn_once`: `libcore/ops/function.rs` - `generator_state`: `libcore/ops/generator.rs` - `generator`: `libcore/ops/generator.rs` - Other - `coerce_unsized`: `libcore/ops/unsize.rs` - `drop`: `libcore/ops/drop.rs` - `drop_in_place`: `libcore/ptr.rs` - `clone`: `libcore/clone.rs` - `copy`: `libcore/marker.rs` - `send`: `libcore/marker.rs` - `sized`: `libcore/marker.rs` - `unsize`: `libcore/marker.rs` - `sync`: `libcore/marker.rs` - `phantom_data`: `libcore/marker.rs` - `discriminant_kind`: `libcore/marker.rs` - `freeze`: `libcore/marker.rs` - `debug_trait`: `libcore/fmt/mod.rs` - `non_zero`: `libcore/nonzero.rs` - `arc`: `liballoc/sync.rs` - `rc`: `liballoc/rc.rs` "##,}, Lint{ label: "libstd_sys_internals", description: r##"# `libstd_sys_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "libstd_thread_internals", description: r##"# `libstd_thread_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "link_cfg", description: r##"# `link_cfg` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "llvm_asm", description: r##"# `llvm_asm` The tracking issue for this feature is: [#70173] [#70173]: https://github.com/rust-lang/rust/issues/70173 ------------------------ For extremely low-level manipulations and performance reasons, one might wish to control the CPU directly. Rust supports using inline assembly to do this via the `llvm_asm!` macro. ```rust,ignore (pseudo-code) llvm_asm!(assembly template : output operands : input operands : clobbers : options ); ``` Any use of `llvm_asm` is feature gated (requires `#![feature(llvm_asm)]` on the crate to allow) and of course requires an `unsafe` block. > **Note**: the examples here are given in x86/x86-64 assembly, but > all platforms are supported. ## Assembly template The `assembly template` is the only required parameter and must be a literal string (i.e. `""`) ```rust #![feature(llvm_asm)] #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] fn foo() { unsafe { llvm_asm!("NOP"); } } // Other platforms: #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] fn foo() { /* ... */ } fn main() { // ... foo(); // ... } ``` (The `feature(llvm_asm)` and `#[cfg]`s are omitted from now on.) Output operands, input operands, clobbers and options are all optional but you must add the right number of `:` if you skip them: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { llvm_asm!("xor %eax, %eax" : : : "eax" ); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` Whitespace also doesn't matter: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` ## Operands Input and output operands follow the same format: `: "constraints1"(expr1), "constraints2"(expr2), ..."`. Output operand expressions must be mutable place, or not yet assigned: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] fn add(a: i32, b: i32) -> i32 { let c: i32; unsafe { llvm_asm!("add $2, $0" : "=r"(c) : "0"(a), "r"(b) ); } c } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn add(a: i32, b: i32) -> i32 { a + b } fn main() { assert_eq!(add(3, 14159), 14162) } ``` If you would like to use real operands in this position, however, you are required to put curly braces `{}` around the register that you want, and you are required to put the specific size of the operand. This is useful for very low level programming, where which register you use is important: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # unsafe fn read_byte_in(port: u16) -> u8 { let result: u8; llvm_asm!("in %dx, %al" : "={al}"(result) : "{dx}"(port)); result # } ``` ## Clobbers Some instructions modify registers which might otherwise have held different values so we use the clobbers list to indicate to the compiler not to assume any values loaded into those registers will stay valid. ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { // Put the value 0x200 in eax: llvm_asm!("mov $$0x200, %eax" : /* no outputs */ : /* no inputs */ : "eax"); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` Input and output registers need not be listed since that information is already communicated by the given constraints. Otherwise, any other registers used either implicitly or explicitly should be listed. If the assembly changes the condition code register `cc` should be specified as one of the clobbers. Similarly, if the assembly modifies memory, `memory` should also be specified. ## Options The last section, `options` is specific to Rust. The format is comma separated literal strings (i.e. `:"foo", "bar", "baz"`). It's used to specify some extra info about the inline assembly: Current valid options are: 1. `volatile` - specifying this is analogous to `__asm__ __volatile__ (...)` in gcc/clang. 2. `alignstack` - certain instructions expect the stack to be aligned a certain way (i.e. SSE) and specifying this indicates to the compiler to insert its usual stack alignment code 3. `intel` - use intel syntax instead of the default AT&T. ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { let result: i32; unsafe { llvm_asm!("mov eax, 2" : "={eax}"(result) : : : "intel") } println!("eax is currently {}", result); # } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` ## More Information The current implementation of the `llvm_asm!` macro is a direct binding to [LLVM's inline assembler expressions][llvm-docs], so be sure to check out [their documentation as well][llvm-docs] for more information about clobbers, constraints, etc. [llvm-docs]: http://llvm.org/docs/LangRef.html#inline-assembler-expressions "##,}, Lint{ label: "marker_trait_attr", description: r##"# `marker_trait_attr` The tracking issue for this feature is: [#29864] [#29864]: https://github.com/rust-lang/rust/issues/29864 ------------------------ Normally, Rust keeps you from adding trait implementations that could overlap with each other, as it would be ambiguous which to use. This feature, however, carves out an exception to that rule: a trait can opt-in to having overlapping implementations, at the cost that those implementations are not allowed to override anything (and thus the trait itself cannot have any associated items, as they're pointless when they'd need to do the same thing for every type anyway). ```rust #![feature(marker_trait_attr)] #[marker] trait CheapToClone: Clone {} impl CheapToClone for T {} // These could potentially overlap with the blanket implementation above, // so are only allowed because CheapToClone is a marker trait. impl CheapToClone for (T, U) {} impl CheapToClone for std::ops::Range {} fn cheap_clone(t: T) -> T { t.clone() } ``` This is expected to replace the unstable `overlapping_marker_traits` feature, which applied to all empty traits (without needing an opt-in). "##,}, Lint{ label: "more_qualified_paths", description: r##"# `more_qualified_paths` The `more_qualified_paths` feature can be used in order to enable the use of qualified paths in patterns. ## Example ```rust #![feature(more_qualified_paths)] fn main() { // destructure through a qualified path let ::Assoc { br } = StructStruct { br: 2 }; } struct StructStruct { br: i8, } struct Foo; trait A { type Assoc; } impl A for Foo { type Assoc = StructStruct; } ``` "##,}, Lint{ label: "native_link_modifiers", description: r##"# `native_link_modifiers` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers` feature allows you to use the `modifiers` syntax with the `#[link(..)]` attribute. Modifiers are specified as a comma-delimited string with each modifier prefixed with either a `+` or `-` to indicate that the modifier is enabled or disabled, respectively. The last boolean value specified for a given modifier wins. "##,}, Lint{ label: "native_link_modifiers_as_needed", description: r##"# `native_link_modifiers_as_needed` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_as_needed` feature allows you to use the `as-needed` modifier. `as-needed` is only compatible with the `dynamic` and `framework` linking kinds. Using any other kind will result in a compiler error. `+as-needed` means that the library will be actually linked only if it satisfies some undefined symbols at the point at which it is specified on the command line, making it similar to static libraries in this regard. This modifier translates to `--as-needed` for ld-like linkers, and to `-dead_strip_dylibs` / `-needed_library` / `-needed_framework` for ld64. The modifier does nothing for linkers that don't support it (e.g. `link.exe`). The default for this modifier is unclear, some targets currently specify it as `+as-needed`, some do not. We may want to try making `+as-needed` a default for all targets. "##,}, Lint{ label: "native_link_modifiers_bundle", description: r##"# `native_link_modifiers_bundle` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_bundle` feature allows you to use the `bundle` modifier. Only compatible with the `static` linking kind. Using any other kind will result in a compiler error. `+bundle` means objects from the static library are bundled into the produced crate (a rlib, for example) and are used from this crate later during linking of the final binary. `-bundle` means the static library is included into the produced rlib "by name" and object files from it are included only during linking of the final binary, the file search by that name is also performed during final linking. This modifier is supposed to supersede the `static-nobundle` linking kind defined by [RFC 1717](https://github.com/rust-lang/rfcs/pull/1717). The default for this modifier is currently `+bundle`, but it could be changed later on some future edition boundary. "##,}, Lint{ label: "native_link_modifiers_verbatim", description: r##"# `native_link_modifiers_verbatim` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_verbatim` feature allows you to use the `verbatim` modifier. `+verbatim` means that rustc itself won't add any target-specified library prefixes or suffixes (like `lib` or `.a`) to the library name, and will try its best to ask for the same thing from the linker. For `ld`-like linkers rustc will use the `-l:filename` syntax (note the colon) when passing the library, so the linker won't add any prefixes or suffixes as well. See [`-l namespec`](https://sourceware.org/binutils/docs/ld/Options.html) in ld documentation for more details. For linkers not supporting any verbatim modifiers (e.g. `link.exe` or `ld64`) the library name will be passed as is. The default for this modifier is `-verbatim`. This RFC changes the behavior of `raw-dylib` linking kind specified by [RFC 2627](https://github.com/rust-lang/rfcs/pull/2627). The `.dll` suffix (or other target-specified suffixes for other targets) is now added automatically. If your DLL doesn't have the `.dll` suffix, it can be specified with `+verbatim`. "##,}, Lint{ label: "native_link_modifiers_whole_archive", description: r##"# `native_link_modifiers_whole_archive` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_whole_archive` feature allows you to use the `whole-archive` modifier. Only compatible with the `static` linking kind. Using any other kind will result in a compiler error. `+whole-archive` means that the static library is linked as a whole archive without throwing any object files away. This modifier translates to `--whole-archive` for `ld`-like linkers, to `/WHOLEARCHIVE` for `link.exe`, and to `-force_load` for `ld64`. The modifier does nothing for linkers that don't support it. The default for this modifier is `-whole-archive`. "##,}, Lint{ label: "negative_impls", description: r##"# `negative_impls` The tracking issue for this feature is [#68318]. [#68318]: https://github.com/rust-lang/rust/issues/68318 ---- With the feature gate `negative_impls`, you can write negative impls as well as positive ones: ```rust #![feature(negative_impls)] trait DerefMut { } impl !DerefMut for &T { } ``` Negative impls indicate a semver guarantee that the given trait will not be implemented for the given types. Negative impls play an additional purpose for auto traits, described below. Negative impls have the following characteristics: * They do not have any items. * They must obey the orphan rules as if they were a positive impl. * They cannot "overlap" with any positive impls. ## Semver interaction It is a breaking change to remove a negative impl. Negative impls are a commitment not to implement the given trait for the named types. ## Orphan and overlap rules Negative impls must obey the same orphan rules as a positive impl. This implies you cannot add a negative impl for types defined in upstream crates and so forth. Similarly, negative impls cannot overlap with positive impls, again using the same "overlap" check that we ordinarily use to determine if two impls overlap. (Note that positive impls typically cannot overlap with one another either, except as permitted by specialization.) ## Interaction with auto traits Declaring a negative impl `impl !SomeAutoTrait for SomeType` for an auto-trait serves two purposes: * as with any trait, it declares that `SomeType` will never implement `SomeAutoTrait`; * it disables the automatic `SomeType: SomeAutoTrait` impl that would otherwise have been generated. Note that, at present, there is no way to indicate that a given type does not implement an auto trait *but that it may do so in the future*. For ordinary types, this is done by simply not declaring any impl at all, but that is not an option for auto traits. A workaround is that one could embed a marker type as one of the fields, where the marker type is `!AutoTrait`. ## Immediate uses Negative impls are used to declare that `&T: !DerefMut` and `&mut T: !Clone`, as required to fix the soundness of `Pin` described in [#66544](https://github.com/rust-lang/rust/issues/66544). This serves two purposes: * For proving the correctness of unsafe code, we can use that impl as evidence that no `DerefMut` or `Clone` impl exists. * It prevents downstream crates from creating such impls. "##,}, Lint{ label: "no_coverage", description: r##"# `no_coverage` The tracking issue for this feature is: [#84605] [#84605]: https://github.com/rust-lang/rust/issues/84605 --- The `no_coverage` attribute can be used to selectively disable coverage instrumentation in an annotated function. This might be useful to: - Avoid instrumentation overhead in a performance critical function - Avoid generating coverage for a function that is not meant to be executed, but still target 100% coverage for the rest of the program. ## Example ```rust #![feature(no_coverage)] // `foo()` will get coverage instrumentation (by default) fn foo() { // ... } #[no_coverage] fn bar() { // ... } ``` "##,}, Lint{ label: "no_sanitize", description: r##"# `no_sanitize` The tracking issue for this feature is: [#39699] [#39699]: https://github.com/rust-lang/rust/issues/39699 ------------------------ The `no_sanitize` attribute can be used to selectively disable sanitizer instrumentation in an annotated function. This might be useful to: avoid instrumentation overhead in a performance critical function, or avoid instrumenting code that contains constructs unsupported by given sanitizer. The precise effect of this annotation depends on particular sanitizer in use. For example, with `no_sanitize(thread)`, the thread sanitizer will no longer instrument non-atomic store / load operations, but it will instrument atomic operations to avoid reporting false positives and provide meaning full stack traces. ## Examples ``` rust #![feature(no_sanitize)] #[no_sanitize(address)] fn foo() { // ... } ``` "##,}, Lint{ label: "plugin", description: r##"# `plugin` The tracking issue for this feature is: [#29597] [#29597]: https://github.com/rust-lang/rust/issues/29597 This feature is part of "compiler plugins." It will often be used with the `rustc_private` feature. ------------------------ `rustc` can load compiler plugins, which are user-provided libraries that extend the compiler's behavior with new lint checks, etc. A plugin is a dynamic library crate with a designated *registrar* function that registers extensions with `rustc`. Other crates can load these extensions using the crate attribute `#![plugin(...)]`. See the `rustc_driver::plugin` documentation for more about the mechanics of defining and loading a plugin. In the vast majority of cases, a plugin should *only* be used through `#![plugin]` and not through an `extern crate` item. Linking a plugin would pull in all of librustc_ast and librustc as dependencies of your crate. This is generally unwanted unless you are building another plugin. The usual practice is to put compiler plugins in their own crate, separate from any `macro_rules!` macros or ordinary Rust code meant to be used by consumers of a library. # Lint plugins Plugins can extend [Rust's lint infrastructure](../../reference/attributes/diagnostics.md#lint-check-attributes) with additional checks for code style, safety, etc. Now let's write a plugin [`lint-plugin-test.rs`](https://github.com/rust-lang/rust/blob/master/tests/ui-fulldeps/auxiliary/lint-plugin-test.rs) that warns about any item named `lintme`. ```rust,ignore (requires-stage-2) #![feature(box_syntax, rustc_private)] extern crate rustc_ast; // Load rustc as a plugin to get macros extern crate rustc_driver; #[macro_use] extern crate rustc_lint; #[macro_use] extern crate rustc_session; use rustc_driver::plugin::Registry; use rustc_lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass}; use rustc_ast::ast; declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); declare_lint_pass!(Pass => [TEST_LINT]); impl EarlyLintPass for Pass { fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) { if it.ident.name.as_str() == "lintme" { cx.lint(TEST_LINT, |lint| { lint.build("item is named 'lintme'").set_span(it.span).emit() }); } } } #[no_mangle] fn __rustc_plugin_registrar(reg: &mut Registry) { reg.lint_store.register_lints(&[&TEST_LINT]); reg.lint_store.register_early_pass(|| box Pass); } ``` Then code like ```rust,ignore (requires-plugin) #![feature(plugin)] #![plugin(lint_plugin_test)] fn lintme() { } ``` will produce a compiler warning: ```txt foo.rs:4:1: 4:16 warning: item is named 'lintme', #[warn(test_lint)] on by default foo.rs:4 fn lintme() { } ^~~~~~~~~~~~~~~ ``` The components of a lint plugin are: * one or more `declare_lint!` invocations, which define static `Lint` structs; * a struct holding any state needed by the lint pass (here, none); * a `LintPass` implementation defining how to check each syntax element. A single `LintPass` may call `span_lint` for several different `Lint`s, but should register them all through the `get_lints` method. Lint passes are syntax traversals, but they run at a late stage of compilation where type information is available. `rustc`'s [built-in lints](https://github.com/rust-lang/rust/blob/master/src/librustc_session/lint/builtin.rs) mostly use the same infrastructure as lint plugins, and provide examples of how to access type information. Lints defined by plugins are controlled by the usual [attributes and compiler flags](../../reference/attributes/diagnostics.md#lint-check-attributes), e.g. `#[allow(test_lint)]` or `-A test-lint`. These identifiers are derived from the first argument to `declare_lint!`, with appropriate case and punctuation conversion. You can run `rustc -W help foo.rs` to see a list of lints known to `rustc`, including those provided by plugins loaded by `foo.rs`. "##,}, Lint{ label: "print_internals", description: r##"# `print_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "profiler_runtime", description: r##"# `profiler_runtime` The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524). ------------------------ "##,}, Lint{ label: "profiler_runtime_lib", description: r##"# `profiler_runtime_lib` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "raw_dylib", description: r##"# `raw_dylib` The tracking issue for this feature is: [#58713] [#58713]: https://github.com/rust-lang/rust/issues/58713 ------------------------ The `raw_dylib` feature allows you to link against the implementations of functions in an `extern` block without, on Windows, linking against an import library. ```rust,ignore (partial-example) #![feature(raw_dylib)] #[link(name="library", kind="raw-dylib")] extern { fn extern_function(x: i32); } fn main() { unsafe { extern_function(14); } } ``` ## Limitations Currently, this feature is only supported on `-windows-msvc` targets. Non-Windows platforms don't have import libraries, and an incompatibility between LLVM and the BFD linker means that it is not currently supported on `-windows-gnu` targets. On the `i686-pc-windows-msvc` target, this feature supports only the `cdecl`, `stdcall`, `system`, and `fastcall` calling conventions. "##,}, Lint{ label: "repr128", description: r##"# `repr128` The tracking issue for this feature is: [#56071] [#56071]: https://github.com/rust-lang/rust/issues/56071 ------------------------ The `repr128` feature adds support for `#[repr(u128)]` on `enum`s. ```rust #![feature(repr128)] #[repr(u128)] enum Foo { Bar(u64), } ``` "##,}, Lint{ label: "rt", description: r##"# `rt` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "rustc_attrs", description: r##"# `rustc_attrs` This feature has no tracking issue, and is therefore internal to the compiler, not being intended for general use. Note: `rustc_attrs` enables many rustc-internal attributes and this page only discuss a few of them. ------------------------ The `rustc_attrs` feature allows debugging rustc type layouts by using `#[rustc_layout(...)]` to debug layout at compile time (it even works with `cargo check`) as an alternative to `rustc -Z print-type-sizes` that is way more verbose. Options provided by `#[rustc_layout(...)]` are `debug`, `size`, `align`, `abi`. Note that it only works on sized types without generics. ## Examples ```rust,compile_fail #![feature(rustc_attrs)] #[rustc_layout(abi, size)] pub enum X { Y(u8, u8, u8), Z(isize), } ``` When that is compiled, the compiler will error with something like ```text error: abi: Aggregate { sized: true } --> src/lib.rs:4:1 | 4 | / pub enum T { 5 | | Y(u8, u8, u8), 6 | | Z(isize), 7 | | } | |_^ error: size: Size { raw: 16 } --> src/lib.rs:4:1 | 4 | / pub enum T { 5 | | Y(u8, u8, u8), 6 | | Z(isize), 7 | | } | |_^ error: aborting due to 2 previous errors ``` "##,}, Lint{ label: "sort_internals", description: r##"# `sort_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "str_internals", description: r##"# `str_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "test", description: r##"# `test` The tracking issue for this feature is: None. ------------------------ The internals of the `test` crate are unstable, behind the `test` flag. The most widely used part of the `test` crate are benchmark tests, which can test the performance of your code. Let's make our `src/lib.rs` look like this (comments elided): ```rust,no_run #![feature(test)] extern crate test; pub fn add_two(a: i32) -> i32 { a + 2 } #[cfg(test)] mod tests { use super::*; use test::Bencher; #[test] fn it_works() { assert_eq!(4, add_two(2)); } #[bench] fn bench_add_two(b: &mut Bencher) { b.iter(|| add_two(2)); } } ``` Note the `test` feature gate, which enables this unstable feature. We've imported the `test` crate, which contains our benchmarking support. We have a new function as well, with the `bench` attribute. Unlike regular tests, which take no arguments, benchmark tests take a `&mut Bencher`. This `Bencher` provides an `iter` method, which takes a closure. This closure contains the code we'd like to benchmark. We can run benchmark tests with `cargo bench`: ```bash $ cargo bench Compiling adder v0.0.1 (file:///home/steve/tmp/adder) Running target/release/adder-91b3e234d4ed382a running 2 tests test tests::it_works ... ignored test tests::bench_add_two ... bench: 1 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured ``` Our non-benchmark test was ignored. You may have noticed that `cargo bench` takes a bit longer than `cargo test`. This is because Rust runs our benchmark a number of times, and then takes the average. Because we're doing so little work in this example, we have a `1 ns/iter (+/- 0)`, but this would show the variance if there was one. Advice on writing benchmarks: * Move setup code outside the `iter` loop; only put the part you want to measure inside * Make the code do "the same thing" on each iteration; do not accumulate or change state * Make the outer function idempotent too; the benchmark runner is likely to run it many times * Make the inner `iter` loop short and fast so benchmark runs are fast and the calibrator can adjust the run-length at fine resolution * Make the code in the `iter` loop do something simple, to assist in pinpointing performance improvements (or regressions) ## Gotcha: optimizations There's another tricky part to writing benchmarks: benchmarks compiled with optimizations activated can be dramatically changed by the optimizer so that the benchmark is no longer benchmarking what one expects. For example, the compiler might recognize that some calculation has no external effects and remove it entirely. ```rust,no_run #![feature(test)] extern crate test; use test::Bencher; #[bench] fn bench_xor_1000_ints(b: &mut Bencher) { b.iter(|| { (0..1000).fold(0, |old, new| old ^ new); }); } ``` gives the following results ```text running 1 test test bench_xor_1000_ints ... bench: 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured ``` The benchmarking runner offers two ways to avoid this. Either, the closure that the `iter` method receives can return an arbitrary value which forces the optimizer to consider the result used and ensures it cannot remove the computation entirely. This could be done for the example above by adjusting the `b.iter` call to ```rust # struct X; # impl X { fn iter(&self, _: F) where F: FnMut() -> T {} } let b = X; b.iter(|| { // Note lack of `;` (could also use an explicit `return`). (0..1000).fold(0, |old, new| old ^ new) }); ``` Or, the other option is to call the generic `test::black_box` function, which is an opaque "black box" to the optimizer and so forces it to consider any argument as used. ```rust #![feature(test)] extern crate test; # fn main() { # struct X; # impl X { fn iter(&self, _: F) where F: FnMut() -> T {} } let b = X; b.iter(|| { let n = test::black_box(1000); (0..n).fold(0, |a, b| a ^ b) }) # } ``` Neither of these read or modify the value, and are very cheap for small values. Larger values can be passed indirectly to reduce overhead (e.g. `black_box(&huge_struct)`). Performing either of the above changes gives the following benchmarking results ```text running 1 test test bench_xor_1000_ints ... bench: 131 ns/iter (+/- 3) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured ``` However, the optimizer can still modify a testcase in an undesirable manner even when using either of the above. "##,}, Lint{ label: "thread_local_internals", description: r##"# `thread_local_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "trace_macros", description: r##"# `trace_macros` The tracking issue for this feature is [#29598]. [#29598]: https://github.com/rust-lang/rust/issues/29598 ------------------------ With `trace_macros` you can trace the expansion of macros in your code. ## Examples ```rust #![feature(trace_macros)] fn main() { trace_macros!(true); println!("Hello, Rust!"); trace_macros!(false); } ``` The `cargo build` output: ```txt note: trace_macro --> src/main.rs:5:5 | 5 | println!("Hello, Rust!"); | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: expanding `println! { "Hello, Rust!" }` = note: to `print ! ( concat ! ( "Hello, Rust!" , "\n" ) )` = note: expanding `print! { concat ! ( "Hello, Rust!" , "\n" ) }` = note: to `$crate :: io :: _print ( format_args ! ( concat ! ( "Hello, Rust!" , "\n" ) ) )` Finished dev [unoptimized + debuginfo] target(s) in 0.60 secs ``` "##,}, Lint{ label: "trait_alias", description: r##"# `trait_alias` The tracking issue for this feature is: [#41517] [#41517]: https://github.com/rust-lang/rust/issues/41517 ------------------------ The `trait_alias` feature adds support for trait aliases. These allow aliases to be created for one or more traits (currently just a single regular trait plus any number of auto-traits), and used wherever traits would normally be used as either bounds or trait objects. ```rust #![feature(trait_alias)] trait Foo = std::fmt::Debug + Send; trait Bar = Foo + Sync; // Use trait alias as bound on type parameter. fn foo(v: &T) { println!("{:?}", v); } pub fn main() { foo(&1); // Use trait alias for trait objects. let a: &Bar = &123; println!("{:?}", a); let b = Box::new(456) as Box; println!("{:?}", b); } ``` "##,}, Lint{ label: "trait_upcasting", description: r##"# `trait_upcasting` The tracking issue for this feature is: [#65991] [#65991]: https://github.com/rust-lang/rust/issues/65991 ------------------------ The `trait_upcasting` feature adds support for trait upcasting coercion. This allows a trait object of type `dyn Bar` to be cast to a trait object of type `dyn Foo` so long as `Bar: Foo`. ```rust,edition2018 #![feature(trait_upcasting)] #![allow(incomplete_features)] trait Foo {} trait Bar: Foo {} impl Foo for i32 {} impl Bar for T {} let bar: &dyn Bar = &123; let foo: &dyn Foo = bar; ``` "##,}, Lint{ label: "transparent_unions", description: r##"# `transparent_unions` The tracking issue for this feature is [#60405] [#60405]: https://github.com/rust-lang/rust/issues/60405 ---- The `transparent_unions` feature allows you mark `union`s as `#[repr(transparent)]`. A `union` may be `#[repr(transparent)]` in exactly the same conditions in which a `struct` may be `#[repr(transparent)]` (generally, this means the `union` must have exactly one non-zero-sized field). Some concrete illustrations follow. ```rust #![feature(transparent_unions)] // This union has the same representation as `f32`. #[repr(transparent)] union SingleFieldUnion { field: f32, } // This union has the same representation as `usize`. #[repr(transparent)] union MultiFieldUnion { field: usize, nothing: (), } ``` For consistency with transparent `struct`s, `union`s must have exactly one non-zero-sized field. If all fields are zero-sized, the `union` must not be `#[repr(transparent)]`: ```rust #![feature(transparent_unions)] // This (non-transparent) union is already valid in stable Rust: pub union GoodUnion { pub nothing: (), } // Error: transparent union needs exactly one non-zero-sized field, but has 0 // #[repr(transparent)] // pub union BadUnion { // pub nothing: (), // } ``` The one exception is if the `union` is generic over `T` and has a field of type `T`, it may be `#[repr(transparent)]` even if `T` is a zero-sized type: ```rust #![feature(transparent_unions)] // This union has the same representation as `T`. #[repr(transparent)] pub union GenericUnion { // Unions with non-`Copy` fields are unstable. pub field: T, pub nothing: (), } // This is okay even though `()` is a zero-sized type. pub const THIS_IS_OKAY: GenericUnion<()> = GenericUnion { field: () }; ``` Like transparent `struct`s, a transparent `union` of type `U` has the same layout, size, and ABI as its single non-ZST field. If it is generic over a type `T`, and all its fields are ZSTs except for exactly one field of type `T`, then it has the same layout and ABI as `T` (even if `T` is a ZST when monomorphized). Like transparent `struct`s, transparent `union`s are FFI-safe if and only if their underlying representation type is also FFI-safe. A `union` may not be eligible for the same nonnull-style optimizations that a `struct` or `enum` (with the same fields) are eligible for. Adding `#[repr(transparent)]` to `union` does not change this. To give a more concrete example, it is unspecified whether `size_of::()` is equal to `size_of::>()`, where `T` is a `union` (regardless of whether or not it is transparent). The Rust compiler is free to perform this optimization if possible, but is not required to, and different compiler versions may differ in their application of these optimizations. "##,}, Lint{ label: "try_blocks", description: r##"# `try_blocks` The tracking issue for this feature is: [#31436] [#31436]: https://github.com/rust-lang/rust/issues/31436 ------------------------ The `try_blocks` feature adds support for `try` blocks. A `try` block creates a new scope one can use the `?` operator in. ```rust,edition2018 #![feature(try_blocks)] use std::num::ParseIntError; let result: Result = try { "1".parse::()? + "2".parse::()? + "3".parse::()? }; assert_eq!(result, Ok(6)); let result: Result = try { "1".parse::()? + "foo".parse::()? + "3".parse::()? }; assert!(result.is_err()); ``` "##,}, Lint{ label: "type_changing_struct_update", description: r##"# `type_changing_struct_update` The tracking issue for this feature is: [#86555] [#86555]: https://github.com/rust-lang/rust/issues/86555 ------------------------ This implements [RFC2528]. When turned on, you can create instances of the same struct that have different generic type or lifetime parameters. [RFC2528]: https://github.com/rust-lang/rfcs/blob/master/text/2528-type-changing-struct-update-syntax.md ```rust #![allow(unused_variables, dead_code)] #![feature(type_changing_struct_update)] fn main () { struct Foo { field1: T, field2: U, } let base: Foo = Foo { field1: String::from("hello"), field2: 1234, }; let updated: Foo = Foo { field1: 3.14, ..base }; } ``` "##,}, Lint{ label: "unboxed_closures", description: r##"# `unboxed_closures` The tracking issue for this feature is [#29625] See Also: [`fn_traits`](../library-features/fn-traits.md) [#29625]: https://github.com/rust-lang/rust/issues/29625 ---- The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI, required for implementing the [`Fn*`] family of traits. `"rust-call"` functions must have exactly one (non self) argument, a tuple representing the argument list. [`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html ```rust #![feature(unboxed_closures)] extern "rust-call" fn add_args(args: (u32, u32)) -> u32 { args.0 + args.1 } fn main() {} ``` "##,}, Lint{ label: "unsized_locals", description: r##"# `unsized_locals` The tracking issue for this feature is: [#48055] [#48055]: https://github.com/rust-lang/rust/issues/48055 ------------------------ This implements [RFC1909]. When turned on, you can have unsized arguments and locals: [RFC1909]: https://github.com/rust-lang/rfcs/blob/master/text/1909-unsized-rvalues.md ```rust #![allow(incomplete_features)] #![feature(unsized_locals, unsized_fn_params)] use std::any::Any; fn main() { let x: Box = Box::new(42); let x: dyn Any = *x; // ^ unsized local variable // ^^ unsized temporary foo(x); } fn foo(_: dyn Any) {} // ^^^^^^ unsized argument ``` The RFC still forbids the following unsized expressions: ```rust,compile_fail #![feature(unsized_locals)] use std::any::Any; struct MyStruct { content: T, } struct MyTupleStruct(T); fn answer() -> Box { Box::new(42) } fn main() { // You CANNOT have unsized statics. static X: dyn Any = *answer(); // ERROR const Y: dyn Any = *answer(); // ERROR // You CANNOT have struct initialized unsized. MyStruct { content: *answer() }; // ERROR MyTupleStruct(*answer()); // ERROR (42, *answer()); // ERROR // You CANNOT have unsized return types. fn my_function() -> dyn Any { *answer() } // ERROR // You CAN have unsized local variables... let mut x: dyn Any = *answer(); // OK // ...but you CANNOT reassign to them. x = *answer(); // ERROR // You CANNOT even initialize them separately. let y: dyn Any; // OK y = *answer(); // ERROR // Not mentioned in the RFC, but by-move captured variables are also Sized. let x: dyn Any = *answer(); (move || { // ERROR let y = x; })(); // You CAN create a closure with unsized arguments, // but you CANNOT call it. // This is an implementation detail and may be changed in the future. let f = |x: dyn Any| {}; f(*answer()); // ERROR } ``` ## By-value trait objects With this feature, you can have by-value `self` arguments without `Self: Sized` bounds. ```rust #![feature(unsized_fn_params)] trait Foo { fn foo(self) {} } impl Foo for T {} fn main() { let slice: Box<[i32]> = Box::new([1, 2, 3]); <[i32] as Foo>::foo(*slice); } ``` And `Foo` will also be object-safe. ```rust #![feature(unsized_fn_params)] trait Foo { fn foo(self) {} } impl Foo for T {} fn main () { let slice: Box = Box::new([1, 2, 3]); // doesn't compile yet ::foo(*slice); } ``` One of the objectives of this feature is to allow `Box`. ## Variable length arrays The RFC also describes an extension to the array literal syntax: `[e; dyn n]`. In the syntax, `n` isn't necessarily a constant expression. The array is dynamically allocated on the stack and has the type of `[T]`, instead of `[T; n]`. ```rust,ignore (not-yet-implemented) #![feature(unsized_locals)] fn mergesort(a: &mut [T]) { let mut tmp = [T; dyn a.len()]; // ... } fn main() { let mut a = [3, 1, 5, 6]; mergesort(&mut a); assert_eq!(a, [1, 3, 5, 6]); } ``` VLAs are not implemented yet. The syntax isn't final, either. We may need an alternative syntax for Rust 2015 because, in Rust 2015, expressions like `[e; dyn(1)]` would be ambiguous. One possible alternative proposed in the RFC is `[e; n]`: if `n` captures one or more local variables, then it is considered as `[e; dyn n]`. ## Advisory on stack usage It's advised not to casually use the `#![feature(unsized_locals)]` feature. Typical use-cases are: - When you need a by-value trait objects. - When you really need a fast allocation of small temporary arrays. Another pitfall is repetitive allocation and temporaries. Currently the compiler simply extends the stack frame every time it encounters an unsized assignment. So for example, the code ```rust #![feature(unsized_locals)] fn main() { let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]); let _x = {{{{{{{{{{*x}}}}}}}}}}; } ``` and the code ```rust #![feature(unsized_locals)] fn main() { for _ in 0..10 { let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]); let _x = *x; } } ``` will unnecessarily extend the stack frame. "##,}, Lint{ label: "unsized_tuple_coercion", description: r##"# `unsized_tuple_coercion` The tracking issue for this feature is: [#42877] [#42877]: https://github.com/rust-lang/rust/issues/42877 ------------------------ This is a part of [RFC0401]. According to the RFC, there should be an implementation like this: ```rust,ignore (partial-example) impl<..., T, U: ?Sized> Unsized<(..., U)> for (..., T) where T: Unsized {} ``` This implementation is currently gated behind `#[feature(unsized_tuple_coercion)]` to avoid insta-stability. Therefore you can use it like this: ```rust #![feature(unsized_tuple_coercion)] fn main() { let x : ([i32; 3], [i32; 3]) = ([1, 2, 3], [4, 5, 6]); let y : &([i32; 3], [i32]) = &x; assert_eq!(y.1[0], 4); } ``` [RFC0401]: https://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.md "##,}, Lint{ label: "update_panic_count", description: r##"# `update_panic_count` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "windows_c", description: r##"# `windows_c` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "windows_handle", description: r##"# `windows_handle` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "windows_net", description: r##"# `windows_net` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}, Lint{ label: "windows_stdio", description: r##"# `windows_stdio` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ "##,}]f abi_c_cmse_nonsecure_call# `abi_c_cmse_nonsecure_call` The tracking issue for this feature is: [#81391] [#81391]: https://github.com/rust-lang/rust/issues/81391 ------------------------ The [TrustZone-M feature](https://developer.arm.com/documentation/100690/latest/) is available for targets with the Armv8-M architecture profile (`thumbv8m` in their target name). LLVM, the Rust compiler and the linker are providing [support](https://developer.arm.com/documentation/ecm0359818/latest/) for the TrustZone-M feature. One of the things provided, with this unstable feature, is the `C-cmse-nonsecure-call` function ABI. This ABI is used on function pointers to non-secure code to mark a non-secure function call (see [section 5.5](https://developer.arm.com/documentation/ecm0359818/latest/) for details). With this ABI, the compiler will do the following to perform the call: * save registers needed after the call to Secure memory * clear all registers that might contain confidential information * clear the Least Significant Bit of the function address * branches using the BLXNS instruction To avoid using the non-secure stack, the compiler will constrain the number and type of parameters/return value. The `extern "C-cmse-nonsecure-call"` ABI is otherwise equivalent to the `extern "C"` ABI. ``` rust,ignore #![no_std] #![feature(abi_c_cmse_nonsecure_call)] #[no_mangle] pub fn call_nonsecure_function(addr: usize) -> u32 { let non_secure_function = unsafe { core::mem::transmute:: u32>(addr) }; non_secure_function() } ``` ``` text $ rustc --emit asm --crate-type lib --target thumbv8m.main-none-eabi function.rs call_nonsecure_function: .fnstart .save {r7, lr} push {r7, lr} .setfp r7, sp mov r7, sp .pad #16 sub sp, #16 str r0, [sp, #12] ldr r0, [sp, #12] str r0, [sp, #8] b .LBB0_1 .LBB0_1: ldr r0, [sp, #8] push.w {r4, r5, r6, r7, r8, r9, r10, r11} bic r0, r0, #1 mov r1, r0 mov r2, r0 mov r3, r0 mov r4, r0 mov r5, r0 mov r6, r0 mov r7, r0 mov r8, r0 mov r9, r0 mov r10, r0 mov r11, r0 mov r12, r0 msr apsr_nzcvq, r0 blxns r0 pop.w {r4, r5, r6, r7, r8, r9, r10, r11} str r0, [sp, #4] b .LBB0_2 .LBB0_2: ldr r0, [sp, #4] add sp, #16 pop {r7, pc} ```   ьabi_msp430_interrupt # `abi_msp430_interrupt` The tracking issue for this feature is: [#38487] [#38487]: https://github.com/rust-lang/rust/issues/38487 ------------------------ In the MSP430 architecture, interrupt handlers have a special calling convention. You can use the `"msp430-interrupt"` ABI to make the compiler apply the right calling convention to the interrupt handlers you define. ``` rust,ignore #![feature(abi_msp430_interrupt)] #![no_std] // Place the interrupt handler at the appropriate memory address // (Alternatively, you can use `#[used]` and remove `pub` and `#[no_mangle]`) #[link_section = "__interrupt_vector_10"] #[no_mangle] pub static TIM0_VECTOR: extern "msp430-interrupt" fn() = tim0; // The interrupt handler extern "msp430-interrupt" fn tim0() { // .. } ``` ``` text $ msp430-elf-objdump -CD ./target/msp430/release/app Disassembly of section __interrupt_vector_10: 0000fff2 : fff2: 00 c0 interrupt service routine at 0xc000 Disassembly of section .text: 0000c000 : c000: 00 13 reti ```    abi_ptxÖ  # `abi_ptx` The tracking issue for this feature is: [#38788] [#38788]: https://github.com/rust-lang/rust/issues/38788 ------------------------ When emitting PTX code, all vanilla Rust functions (`fn`) get translated to "device" functions. These functions are *not* callable from the host via the CUDA API so a crate with only device functions is not too useful! OTOH, "global" functions *can* be called by the host; you can think of them as the real public API of your crate. To produce a global function use the `"ptx-kernel"` ABI. ``` rust,ignore #![feature(abi_ptx)] #![no_std] pub unsafe extern "ptx-kernel" fn global_function() { device_function(); } pub fn device_function() { // .. } ``` ``` text $ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm $ cat $(find -name '*.s') // // Generated by LLVM NVPTX Back-End // .version 3.2 .target sm_20 .address_size 64 // .globl _ZN6kernel15global_function17h46111ebe6516b382E .visible .entry _ZN6kernel15global_function17h46111ebe6516b382E() { ret; } // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E .visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E() { ret; } ```    abi_thiscall # `abi_thiscall` The tracking issue for this feature is: [#42202] [#42202]: https://github.com/rust-lang/rust/issues/42202 ------------------------ The MSVC ABI on x86 Windows uses the `thiscall` calling convention for C++ instance methods by default; it is identical to the usual (C) calling convention on x86 Windows except that the first parameter of the method, the `this` pointer, is passed in the ECX register. ֤  allocator_api # `allocator_api` The tracking issue for this feature is [#32838] [#32838]: https://github.com/rust-lang/rust/issues/32838 ------------------------ Sometimes you want the memory for one collection to use a different allocator than the memory for another collection. In this case, replacing the global allocator is not a workable option. Instead, you need to pass in an instance of an `AllocRef` to each collection for which you want a custom allocator. TBD  allocator_internals# `allocator_internals` This feature does not have a tracking issue, it is an unstable implementation detail of the `global_allocator` feature not intended for use outside the compiler. ------------------------  arbitrary_enum_discriminant# `arbitrary_enum_discriminant` The tracking issue for this feature is: [#60553] [#60553]: https://github.com/rust-lang/rust/issues/60553 ------------------------ The `arbitrary_enum_discriminant` feature permits tuple-like and struct-like enum variants with `#[repr()]` to have explicit discriminants. ## Examples ```rust #![feature(arbitrary_enum_discriminant)] #[allow(dead_code)] #[repr(u8)] enum Enum { Unit = 3, Tuple(u16) = 2, Struct { a: u8, b: u16, } = 1, } impl Enum { fn tag(&self) -> u8 { unsafe { *(self as *const Self as *const u8) } } } assert_eq!(3, Enum::Unit.tag()); assert_eq!(2, Enum::Tuple(5).tag()); assert_eq!(1, Enum::Struct{a: 7, b: 11}.tag()); ```    asm_const # `asm_const` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `const ` operand type to `asm!` and `global_asm!`. - `` must be an integer constant expression. - The value of the expression is formatted as a string and substituted directly into the asm template string. H ǵasm_experimental_archGG# `asm_experimental_arch` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature tracks `asm!` and `global_asm!` support for the following architectures: - NVPTX - PowerPC - Hexagon - MIPS32r2 and MIPS64r2 - wasm32 - BPF - SPIR-V - AVR ## Register classes | Architecture | Register class | Registers | LLVM constraint code | | ------------ | -------------- | ---------------------------------- | -------------------- | | MIPS | `reg` | `$[2-25]` | `r` | | MIPS | `freg` | `$f[0-31]` | `f` | | NVPTX | `reg16` | None\* | `h` | | NVPTX | `reg32` | None\* | `r` | | NVPTX | `reg64` | None\* | `l` | | Hexagon | `reg` | `r[0-28]` | `r` | | PowerPC | `reg` | `r[0-31]` | `r` | | PowerPC | `reg_nonzero` | `r[1-31]` | `b` | | PowerPC | `freg` | `f[0-31]` | `f` | | PowerPC | `cr` | `cr[0-7]`, `cr` | Only clobbers | | PowerPC | `xer` | `xer` | Only clobbers | | wasm32 | `local` | None\* | `r` | | BPF | `reg` | `r[0-10]` | `r` | | BPF | `wreg` | `w[0-10]` | `w` | | AVR | `reg` | `r[2-25]`, `XH`, `XL`, `ZH`, `ZL` | `r` | | AVR | `reg_upper` | `r[16-25]`, `XH`, `XL`, `ZH`, `ZL` | `d` | | AVR | `reg_pair` | `r3r2` .. `r25r24`, `X`, `Z` | `r` | | AVR | `reg_iw` | `r25r24`, `X`, `Z` | `w` | | AVR | `reg_ptr` | `X`, `Z` | `e` | > **Notes**: > - NVPTX doesn't have a fixed register set, so named registers are not supported. > > - WebAssembly doesn't have registers, so named registers are not supported. # Register class supported types | Architecture | Register class | Target feature | Allowed types | | ------------ | ------------------------------- | -------------- | --------------------------------------- | | MIPS32 | `reg` | None | `i8`, `i16`, `i32`, `f32` | | MIPS32 | `freg` | None | `f32`, `f64` | | MIPS64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` | | MIPS64 | `freg` | None | `f32`, `f64` | | NVPTX | `reg16` | None | `i8`, `i16` | | NVPTX | `reg32` | None | `i8`, `i16`, `i32`, `f32` | | NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` | | Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` | | PowerPC | `reg` | None | `i8`, `i16`, `i32` | | PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32` | | PowerPC | `freg` | None | `f32`, `f64` | | PowerPC | `cr` | N/A | Only clobbers | | PowerPC | `xer` | N/A | Only clobbers | | wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` | | BPF | `reg` | None | `i8` `i16` `i32` `i64` | | BPF | `wreg` | `alu32` | `i8` `i16` `i32` | | AVR | `reg`, `reg_upper` | None | `i8` | | AVR | `reg_pair`, `reg_iw`, `reg_ptr` | None | `i16` | ## Register aliases | Architecture | Base register | Aliases | | ------------ | ------------- | --------- | | Hexagon | `r29` | `sp` | | Hexagon | `r30` | `fr` | | Hexagon | `r31` | `lr` | | BPF | `r[0-10]` | `w[0-10]` | | AVR | `XH` | `r27` | | AVR | `XL` | `r26` | | AVR | `ZH` | `r31` | | AVR | `ZL` | `r30` | ## Unsupported registers | Architecture | Unsupported register | Reason | | ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | All | `sp` | The stack pointer must be restored to its original value at the end of an asm code block. | | All | `fr` (Hexagon), `$fp` (MIPS), `Y` (AVR) | The frame pointer cannot be used as an input or output. | | All | `r19` (Hexagon) | This is used internally by LLVM as a "base pointer" for functions with complex stack frames. | | MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. | | MIPS | `$1` or `$at` | Reserved for assembler. | | MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. | | MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. | | MIPS | `$ra` | Return address cannot be used as inputs or outputs. | | Hexagon | `lr` | This is the link register which cannot be used as an input or output. | | AVR | `r0`, `r1`, `r1r0` | Due to an issue in LLVM, the `r0` and `r1` registers cannot be used as inputs or outputs. If modified, they must be restored to their original values before the end of the block. | ## Template modifiers | Architecture | Register class | Modifier | Example output | LLVM modifier | | ------------ | -------------- | -------- | -------------- | ------------- | | MIPS | `reg` | None | `$2` | None | | MIPS | `freg` | None | `$f0` | None | | NVPTX | `reg16` | None | `rs0` | None | | NVPTX | `reg32` | None | `r0` | None | | NVPTX | `reg64` | None | `rd0` | None | | Hexagon | `reg` | None | `r0` | None | | PowerPC | `reg` | None | `0` | None | | PowerPC | `reg_nonzero` | None | `3` | `b` | | PowerPC | `freg` | None | `0` | None | # Flags covered by `preserves_flags` These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set: - AVR - The status register `SREG`. GG  asm_sym# `asm_sym` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `sym ` operand type to `asm!` and `global_asm!`. - `` must refer to a `fn` or `static`. - A mangled symbol name referring to the item is substituted into the asm template string. - The substituted string does not include any modifiers (e.g. GOT, PLT, relocations, etc). - `` is allowed to point to a `#[thread_local]` static, in which case the asm code can combine the symbol with relocations (e.g. `@plt`, `@TPOFF`) to read from thread-local data.  ̃  asm_unwind # `asm_unwind` The tracking issue for this feature is: [#72016] [#72016]: https://github.com/rust-lang/rust/issues/72016 ------------------------ This feature adds a `may_unwind` option to `asm!` which allows an `asm` block to unwind stack and be part of the stack unwinding process. This option is only supported by the LLVM backend right now.    auto_traits # `auto_traits` The tracking issue for this feature is [#13231] [#13231]: https://github.com/rust-lang/rust/issues/13231 ---- The `auto_traits` feature gate allows you to define auto traits. Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits that are automatically implemented for every type, unless the type, or a type it contains, has explicitly opted out via a negative impl. (Negative impls are separately controlled by the `negative_impls` feature.) [`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html [`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html ```rust,ignore (partial-example) impl !Trait for Type {} ``` Example: ```rust #![feature(negative_impls)] #![feature(auto_traits)] auto trait Valid {} struct True; struct False; impl !Valid for False {} struct MaybeValid(T); fn must_be_valid(_t: T) { } fn main() { // works must_be_valid( MaybeValid(True) ); // compiler error - trait bound not satisfied // must_be_valid( MaybeValid(False) ); } ``` ## Automatic trait implementations When a type is declared as an `auto trait`, we will automatically create impls for every struct/enum/union, unless an explicit impl is provided. These automatic impls contain a where clause for each field of the form `T: AutoTrait`, where `T` is the type of the field and `AutoTrait` is the auto trait in question. As an example, consider the struct `List` and the auto trait `Send`: ```rust struct List { data: T, next: Option>>, } ``` Presuming that there is no explicit impl of `Send` for `List`, the compiler will supply an automatic impl of the form: ```rust struct List { data: T, next: Option>>, } unsafe impl Send for List where T: Send, // from the field `data` Option>>: Send, // from the field `next` { } ``` Explicit impls may be either positive or negative. They take the form: ```rust,ignore (partial-example) impl<...> AutoTrait for StructName<..> { } impl<...> !AutoTrait for StructName<..> { } ``` ## Coinduction: Auto traits permit cyclic matching Unlike ordinary trait matching, auto traits are **coinductive**. This means, in short, that cycles which occur in trait matching are considered ok. As an example, consider the recursive struct `List` introduced in the previous section. In attempting to determine whether `List: Send`, we would wind up in a cycle: to apply the impl, we must show that `Option>: Send`, which will in turn require `Box: Send` and then finally `List: Send` again. Under ordinary trait matching, this cycle would be an error, but for an auto trait it is considered a successful match. ## Items Auto traits cannot have any trait items, such as methods or associated types. This ensures that we can generate default implementations. ## Supertraits Auto traits cannot have supertraits. This is for soundness reasons, as the interaction of coinduction with implied bounds is difficult to reconcile.   box_patterns # `box_patterns` The tracking issue for this feature is: [#29641] [#29641]: https://github.com/rust-lang/rust/issues/29641 See also [`box_syntax`](box-syntax.md) ------------------------ Box patterns let you match on `Box`s: ```rust #![feature(box_patterns)] fn main() { let b = Some(Box::new(5)); match b { Some(box n) if n < 0 => { println!("Box contains negative number {}", n); }, Some(box n) if n >= 0 => { println!("Box contains non-negative number {}", n); }, None => { println!("No box"); }, _ => unreachable!() } } ``` Τ   box_syntax # `box_syntax` The tracking issue for this feature is: [#49733] [#49733]: https://github.com/rust-lang/rust/issues/49733 See also [`box_patterns`](box-patterns.md) ------------------------ Currently the only stable way to create a `Box` is via the `Box::new` method. Also it is not possible in stable Rust to destructure a `Box` in a match pattern. The unstable `box` keyword can be used to create a `Box`. An example usage would be: ```rust #![feature(box_syntax)] fn main() { let b = box 5; } ```   c_unwindЩ# `c_unwind` The tracking issue for this feature is: [#74990] [#74990]: https://github.com/rust-lang/rust/issues/74990 ------------------------ Introduces four new ABI strings: "C-unwind", "stdcall-unwind", "thiscall-unwind", and "system-unwind". These enable unwinding from other languages (such as C++) into Rust frames and from Rust into other languages. See [RFC 2945] for more information. [RFC 2945]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md ɭ ߭  c_variadic # `c_variadic` The tracking issue for this feature is: [#44930] [#44930]: https://github.com/rust-lang/rust/issues/44930 ------------------------ The `c_variadic` language feature enables C-variadic functions to be defined in Rust. The may be called both from within Rust and via FFI. ## Examples ```rust #![feature(c_variadic)] pub unsafe extern "C" fn add(n: usize, mut args: ...) -> usize { let mut sum = 0; for _ in 0..n { sum += args.arg::(); } sum } ```    c_variadic # `c_variadic` The tracking issue for this feature is: [#44930] [#44930]: https://github.com/rust-lang/rust/issues/44930 ------------------------ The `c_variadic` library feature exposes the `VaList` structure, Rust's analogue of C's `va_list` type. ## Examples ```rust #![feature(c_variadic)] use std::ffi::VaList; pub unsafe extern "C" fn vadd(n: usize, mut args: VaList) -> usize { let mut sum = 0; for _ in 0..n { sum += args.arg::(); } sum } ```  նc_void_variant# `c_void_variant` This feature is internal to the Rust compiler and is not intended for general use. ------------------------    cfg_panic ɸ# `cfg_panic` The tracking issue for this feature is: [#77443] [#77443]: https://github.com/rust-lang/rust/issues/77443 ------------------------ The `cfg_panic` feature makes it possible to execute different code depending on the panic strategy. Possible values at the moment are `"unwind"` or `"abort"`, although it is possible that new panic strategies may be added to Rust in the future. ## Examples ```rust #![feature(cfg_panic)] #[cfg(panic = "unwind")] fn a() { // ... } #[cfg(not(panic = "unwind"))] fn a() { // ... } fn b() { if cfg!(panic = "abort") { // ... } else { // ... } } ``` ۽  cfg_sanitize # `cfg_sanitize` The tracking issue for this feature is: [#39699] [#39699]: https://github.com/rust-lang/rust/issues/39699 ------------------------ The `cfg_sanitize` feature makes it possible to execute different code depending on whether a particular sanitizer is enabled or not. ## Examples ```rust #![feature(cfg_sanitize)] #[cfg(sanitize = "thread")] fn a() { // ... } #[cfg(not(sanitize = "thread"))] fn a() { // ... } fn b() { if cfg!(sanitize = "leak") { // ... } else { // ... } } ```    cfg_version # `cfg_version` The tracking issue for this feature is: [#64796] [#64796]: https://github.com/rust-lang/rust/issues/64796 ------------------------ The `cfg_version` feature makes it possible to execute different code depending on the compiler version. It will return true if the compiler version is greater than or equal to the specified version. ## Examples ```rust #![feature(cfg_version)] #[cfg(version("1.42"))] // 1.42 and above fn a() { // ... } #[cfg(not(version("1.42")))] // 1.41 and below fn a() { // ... } fn b() { if cfg!(version("1.42")) { // ... } else { // ... } } ```  char_error_internals# `char_error_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------  closure_track_caller# `closure_track_caller` The tracking issue for this feature is: [#87417] [#87417]: https://github.com/rust-lang/rust/issues/87417 ------------------------ Allows using the `#[track_caller]` attribute on closures and generators. Calls made to the closure or generator will have caller information available through `std::panic::Location::caller()`, just like using `#[track_caller]` on a function.  cmse_nonsecure_entry# `cmse_nonsecure_entry` The tracking issue for this feature is: [#75835] [#75835]: https://github.com/rust-lang/rust/issues/75835 ------------------------ The [TrustZone-M feature](https://developer.arm.com/documentation/100690/latest/) is available for targets with the Armv8-M architecture profile (`thumbv8m` in their target name). LLVM, the Rust compiler and the linker are providing [support](https://developer.arm.com/documentation/ecm0359818/latest/) for the TrustZone-M feature. One of the things provided, with this unstable feature, is the `cmse_nonsecure_entry` attribute. This attribute marks a Secure function as an entry function (see [section 5.4](https://developer.arm.com/documentation/ecm0359818/latest/) for details). With this attribute, the compiler will do the following: * add a special symbol on the function which is the `__acle_se_` prefix and the standard function name * constrain the number of parameters to avoid using the Non-Secure stack * before returning from the function, clear registers that might contain Secure information * use the `BXNS` instruction to return Because the stack can not be used to pass parameters, there will be compilation errors if: * the total size of all parameters is too big (for example more than four 32 bits integers) * the entry function is not using a C ABI The special symbol `__acle_se_` will be used by the linker to generate a secure gateway veneer. ``` rust,ignore #![feature(cmse_nonsecure_entry)] #[no_mangle] #[cmse_nonsecure_entry] pub extern "C" fn entry_function(input: u32) -> u32 { input + 6 } ``` ``` text $ rustc --emit obj --crate-type lib --target thumbv8m.main-none-eabi function.rs $ arm-none-eabi-objdump -D function.o 00000000 : 0: b580 push {r7, lr} 2: 466f mov r7, sp 4: b082 sub sp, #8 6: 9001 str r0, [sp, #4] 8: 1d81 adds r1, r0, #6 a: 460a mov r2, r1 c: 4281 cmp r1, r0 e: 9200 str r2, [sp, #0] 10: d30b bcc.n 2a 12: e7ff b.n 14 14: 9800 ldr r0, [sp, #0] 16: b002 add sp, #8 18: e8bd 4080 ldmia.w sp!, {r7, lr} 1c: 4671 mov r1, lr 1e: 4672 mov r2, lr 20: 4673 mov r3, lr 22: 46f4 mov ip, lr 24: f38e 8800 msr CPSR_f, lr 28: 4774 bxns lr 2a: f240 0000 movw r0, #0 2e: f2c0 0000 movt r0, #0 32: f240 0200 movw r2, #0 36: f2c0 0200 movt r2, #0 3a: 211c movs r1, #28 3c: f7ff fffe bl 0 <_ZN4core9panicking5panic17h5c028258ca2fb3f5E> 40: defe udf #254 ; 0xfe ```  compiler_builtins# `compiler_builtins` This feature is internal to the Rust compiler and is not intended for general use. ------------------------   concat_idents # `concat_idents` The tracking issue for this feature is: [#29599] [#29599]: https://github.com/rust-lang/rust/issues/29599 ------------------------ The `concat_idents` feature adds a macro for concatenating multiple identifiers into one identifier. ## Examples ```rust #![feature(concat_idents)] fn main() { fn foobar() -> u32 { 23 } let f = concat_idents!(foo, bar); assert_eq!(f(), 23); } ```  const_eval_limit# `const_eval_limit` The tracking issue for this feature is: [#67217] [#67217]: https://github.com/rust-lang/rust/issues/67217 The `const_eval_limit` allows someone to limit the evaluation steps the CTFE undertakes to evaluate a `const fn`.  core_intrinsics# `core_intrinsics` This feature is internal to the Rust compiler and is not intended for general use. ------------------------    core_panic }# `core_panic` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ }} core_private_bignum# `core_private_bignum` This feature is internal to the Rust compiler and is not intended for general use. ------------------------  core_private_diy_float# `core_private_diy_float` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ ! crate_visibility_modifier# `crate_visibility_modifier` The tracking issue for this feature is: [#53120] [#53120]: https://github.com/rust-lang/rust/issues/53120 ----- The `crate_visibility_modifier` feature allows the `crate` keyword to be used as a visibility modifier synonymous to `pub(crate)`, indicating that a type (function, _&c._) is to be visible to the entire enclosing crate, but not to other crates. ```rust #![feature(crate_visibility_modifier)] crate struct Foo { bar: usize, } ``` " custom_test_frameworks# `custom_test_frameworks` The tracking issue for this feature is: [#50297] [#50297]: https://github.com/rust-lang/rust/issues/50297 ------------------------ The `custom_test_frameworks` feature allows the use of `#[test_case]` and `#![test_runner]`. Any function, const, or static can be annotated with `#[test_case]` causing it to be aggregated (like `#[test]`) and be passed to the test runner determined by the `#![test_runner]` crate attribute. ```rust #![feature(custom_test_frameworks)] #![test_runner(my_runner)] fn my_runner(tests: &[&i32]) { for t in tests { if **t == 0 { println!("PASSED"); } else { println!("FAILED"); } } } #[test_case] const WILL_PASS: i32 = 0; #[test_case] const WILL_FAIL: i32 = 4; ``` #  dec2fltz# `dec2flt` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ zz$ default_free_fnɁ# `default_free_fn` The tracking issue for this feature is: [#73014] [#73014]: https://github.com/rust-lang/rust/issues/73014 ------------------------ Adds a free `default()` function to the `std::default` module. This function just forwards to [`Default::default()`], but may remove repetition of the word "default" from the call site. [`Default::default()`]: https://doc.rust-lang.org/nightly/std/default/trait.Default.html#tymethod.default Here is an example: ```rust #![feature(default_free_fn)] use std::default::default; #[derive(Default)] struct AppConfig { foo: FooConfig, bar: BarConfig, } #[derive(Default)] struct FooConfig { foo: i32, } #[derive(Default)] struct BarConfig { bar: f32, baz: u8, } fn main() { let options = AppConfig { foo: default(), bar: BarConfig { bar: 10.1, ..default() }, }; } ``` % derive_clone_copy# `derive_clone_copy` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ & ъ  derive_eq |# `derive_eq` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ || '  doc_cfg  # `doc_cfg` The tracking issue for this feature is: [#43781] ------ The `doc_cfg` feature allows an API be documented as only available in some specific platforms. This attribute has two effects: 1. In the annotated item's documentation, there will be a message saying "This is supported on (platform) only". 2. The item's doc-tests will only run on the specific platform. In addition to allowing the use of the `#[doc(cfg)]` attribute, this feature enables the use of a special conditional compilation flag, `#[cfg(doc)]`, set whenever building documentation on your crate. This feature was introduced as part of PR [#43348] to allow the platform-specific parts of the standard library be documented. ```rust #![feature(doc_cfg)] #[cfg(any(windows, doc))] #[doc(cfg(windows))] /// The application's icon in the notification area (a.k.a. system tray). /// /// # Examples /// /// ```no_run /// extern crate my_awesome_ui_library; /// use my_awesome_ui_library::current_app; /// use my_awesome_ui_library::windows::notification; /// /// let icon = current_app().get::(); /// icon.show(); /// icon.show_message("Hello"); /// ``` pub struct Icon { // ... } ``` [#43781]: https://github.com/rust-lang/rust/issues/43781 [#43348]: https://github.com/rust-lang/rust/issues/43348  (   doc_masked # `doc_masked` The tracking issue for this feature is: [#44027] ----- The `doc_masked` feature allows a crate to exclude types from a given crate from appearing in lists of trait implementations. The specifics of the feature are as follows: 1. When rustdoc encounters an `extern crate` statement annotated with a `#[doc(masked)]` attribute, it marks the crate as being masked. 2. When listing traits a given type implements, rustdoc ensures that traits from masked crates are not emitted into the documentation. 3. When listing types that implement a given trait, rustdoc ensures that types from masked crates are not emitted into the documentation. This feature was introduced in PR [#44026] to ensure that compiler-internal and implementation-specific types and traits were not included in the standard library's documentation. Such types would introduce broken links into the documentation. [#44026]: https://github.com/rust-lang/rust/pull/44026 [#44027]: https://github.com/rust-lang/rust/pull/44027  ) ʟdoc_notable_trait# `doc_notable_trait` The tracking issue for this feature is: [#45040] The `doc_notable_trait` feature allows the use of the `#[doc(notable_trait)]` attribute, which will display the trait in a "Notable traits" dialog for functions returning types that implement the trait. For example, this attribute is applied to the `Iterator`, `Future`, `io::Read`, and `io::Write` traits in the standard library. You can do this on your own traits like so: ``` #![feature(doc_notable_trait)] #[doc(notable_trait)] pub trait MyTrait {} pub struct MyStruct; impl MyTrait for MyStruct {} /// The docs for this function will have a button that displays a dialog about /// `MyStruct` implementing `MyTrait`. pub fn my_fn() -> MyStruct { MyStruct } ``` This feature was originally implemented in PR [#45039]. See also its documentation in [the rustdoc book][rustdoc-book-notable_trait]. [#45040]: https://github.com/rust-lang/rust/issues/45040 [#45039]: https://github.com/rust-lang/rust/pull/45039 [rustdoc-book-notable_trait]: ../../rustdoc/unstable-features.html#adding-your-trait-to-the-notable-traits-dialog ڨ* exclusive_range_pattern# `exclusive_range_pattern` The tracking issue for this feature is: [#37854]. [#67264]: https://github.com/rust-lang/rust/issues/67264 [#37854]: https://github.com/rust-lang/rust/issues/37854 ----- The `exclusive_range_pattern` feature allows non-inclusive range patterns (`0..10`) to be used in appropriate pattern matching contexts. It also can be combined with `#![feature(half_open_range_patterns]` to be able to use RangeTo patterns (`..10`). It also enabled RangeFrom patterns but that has since been stabilized. ```rust #![feature(exclusive_range_pattern)] let x = 5; match x { 0..10 => println!("single digit"), 10 => println!("ten isn't part of the above range"), _ => println!("nor is everything else.") } ```  + į'%explicit_generic_args_with_impl_trait%%  # `explicit_generic_args_with_impl_trait` The tracking issue for this feature is: [#83701] [#83701]: https://github.com/rust-lang/rust/issues/83701 ------------------------ The `explicit_generic_args_with_impl_trait` feature gate lets you specify generic arguments even when `impl Trait` is used in argument position. A simple example is: ```rust #![feature(explicit_generic_args_with_impl_trait)] fn foo(_f: impl AsRef) {} fn main() { foo::("".to_string()); } ``` This is currently rejected: ```text error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position --> src/main.rs:6:11 | 6 | foo::("".to_string()); | ^^^ explicit generic argument not allowed ``` However it would compile if `explicit_generic_args_with_impl_trait` is enabled. Note that the synthetic type parameters from `impl Trait` are still implicit and you cannot explicitly specify these: ```rust,compile_fail #![feature(explicit_generic_args_with_impl_trait)] fn foo(_f: impl AsRef) {} fn bar>(_f: F) {} fn main() { bar::("".to_string()); // Okay bar::("".to_string()); // Okay foo::("".to_string()); // Okay foo::("".to_string()); // Error, you cannot specify `impl Trait` explicitly } ```  , fd|u# `fd` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ uu-  fd_readռz# `fd_read` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ zz.   ffi_const # `ffi_const` The tracking issue for this feature is: [#58328] ------ The `#[ffi_const]` attribute applies clang's `const` attribute to foreign functions declarations. That is, `#[ffi_const]` functions shall have no effects except for its return value, which can only depend on the values of the function parameters, and is not affected by changes to the observable state of the program. Applying the `#[ffi_const]` attribute to a function that violates these requirements is undefined behaviour. This attribute enables Rust to perform common optimizations, like sub-expression elimination, and it can avoid emitting some calls in repeated invocations of the function with the same argument values regardless of other operations being performed in between these functions calls (as opposed to `#[ffi_pure]` functions). ## Pitfalls A `#[ffi_const]` function can only read global memory that would not affect its return value for the whole execution of the program (e.g. immutable global memory). `#[ffi_const]` functions are referentially-transparent and therefore more strict than `#[ffi_pure]` functions. A common pitfall involves applying the `#[ffi_const]` attribute to a function that reads memory through pointer arguments which do not necessarily point to immutable global memory. A `#[ffi_const]` function that returns unit has no effect on the abstract machine's state, and a `#[ffi_const]` function cannot be `#[ffi_pure]`. A `#[ffi_const]` function must not diverge, neither via a side effect (e.g. a call to `abort`) nor by infinite loops. When translating C headers to Rust FFI, it is worth verifying for which targets the `const` attribute is enabled in those headers, and using the appropriate `cfg` macros in the Rust side to match those definitions. While the semantics of `const` are implemented identically by many C and C++ compilers, e.g., clang, [GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily implemented in this way on all of them. It is therefore also worth verifying that the semantics of the C toolchain used to compile the binary being linked against are compatible with those of the `#[ffi_const]`. [#58328]: https://github.com/rust-lang/rust/issues/58328 [ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgigch.html [GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute [IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_const.htm /  ffi_pure# `ffi_pure` The tracking issue for this feature is: [#58329] ------ The `#[ffi_pure]` attribute applies clang's `pure` attribute to foreign functions declarations. That is, `#[ffi_pure]` functions shall have no effects except for its return value, which shall not change across two consecutive function calls with the same parameters. Applying the `#[ffi_pure]` attribute to a function that violates these requirements is undefined behavior. This attribute enables Rust to perform common optimizations, like sub-expression elimination and loop optimizations. Some common examples of pure functions are `strlen` or `memcmp`. These optimizations are only applicable when the compiler can prove that no program state observable by the `#[ffi_pure]` function has changed between calls of the function, which could alter the result. See also the `#[ffi_const]` attribute, which provides stronger guarantees regarding the allowable behavior of a function, enabling further optimization. ## Pitfalls A `#[ffi_pure]` function can read global memory through the function parameters (e.g. pointers), globals, etc. `#[ffi_pure]` functions are not referentially-transparent, and are therefore more relaxed than `#[ffi_const]` functions. However, accessing global memory through volatile or atomic reads can violate the requirement that two consecutive function calls shall return the same value. A `pure` function that returns unit has no effect on the abstract machine's state. A `#[ffi_pure]` function must not diverge, neither via a side effect (e.g. a call to `abort`) nor by infinite loops. When translating C headers to Rust FFI, it is worth verifying for which targets the `pure` attribute is enabled in those headers, and using the appropriate `cfg` macros in the Rust side to match those definitions. While the semantics of `pure` are implemented identically by many C and C++ compilers, e.g., clang, [GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily implemented in this way on all of them. It is therefore also worth verifying that the semantics of the C toolchain used to compile the binary being linked against are compatible with those of the `#[ffi_pure]`. [#58329]: https://github.com/rust-lang/rust/issues/58329 [ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacigdac.html [GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute [IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_pure.htm 0  flt2decz# `flt2dec` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ zz1  fmt_internals # `fmt_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ 2   fn_traits # `fn_traits` The tracking issue for this feature is [#29625] See Also: [`unboxed_closures`](../language-features/unboxed-closures.md) [#29625]: https://github.com/rust-lang/rust/issues/29625 ---- The `fn_traits` feature allows for implementation of the [`Fn*`] traits for creating custom closure-like types. [`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html ```rust #![feature(unboxed_closures)] #![feature(fn_traits)] struct Adder { a: u32 } impl FnOnce<(u32, )> for Adder { type Output = u32; extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output { self.a + b.0 } } fn main() { let adder = Adder { a: 3 }; assert_eq!(adder(2), 5); } ``` C3   generators BB# `generators` The tracking issue for this feature is: [#43122] [#43122]: https://github.com/rust-lang/rust/issues/43122 ------------------------ The `generators` feature gate in Rust allows you to define generator or coroutine literals. A generator is a "resumable function" that syntactically resembles a closure but compiles to much different semantics in the compiler itself. The primary feature of a generator is that it can be suspended during execution to be resumed at a later date. Generators use the `yield` keyword to "return", and then the caller can `resume` a generator to resume execution just after the `yield` keyword. Generators are an extra-unstable feature in the compiler right now. Added in [RFC 2033] they're mostly intended right now as a information/constraint gathering phase. The intent is that experimentation can happen on the nightly compiler before actual stabilization. A further RFC will be required to stabilize generators/coroutines and will likely contain at least a few small tweaks to the overall design. [RFC 2033]: https://github.com/rust-lang/rfcs/pull/2033 A syntactical example of a generator is: ```rust #![feature(generators, generator_trait)] use std::ops::{Generator, GeneratorState}; use std::pin::Pin; fn main() { let mut generator = || { yield 1; return "foo" }; match Pin::new(&mut generator).resume(()) { GeneratorState::Yielded(1) => {} _ => panic!("unexpected value from resume"), } match Pin::new(&mut generator).resume(()) { GeneratorState::Complete("foo") => {} _ => panic!("unexpected value from resume"), } } ``` Generators are closure-like literals which can contain a `yield` statement. The `yield` statement takes an optional expression of a value to yield out of the generator. All generator literals implement the `Generator` trait in the `std::ops` module. The `Generator` trait has one main method, `resume`, which resumes execution of the generator at the previous suspension point. An example of the control flow of generators is that the following example prints all numbers in order: ```rust #![feature(generators, generator_trait)] use std::ops::Generator; use std::pin::Pin; fn main() { let mut generator = || { println!("2"); yield; println!("4"); }; println!("1"); Pin::new(&mut generator).resume(()); println!("3"); Pin::new(&mut generator).resume(()); println!("5"); } ``` At this time the main intended use case of generators is an implementation primitive for async/await syntax, but generators will likely be extended to ergonomic implementations of iterators and other primitives in the future. Feedback on the design and usage is always appreciated! ### The `Generator` trait The `Generator` trait in `std::ops` currently looks like: ```rust # #![feature(arbitrary_self_types, generator_trait)] # use std::ops::GeneratorState; # use std::pin::Pin; pub trait Generator { type Yield; type Return; fn resume(self: Pin<&mut Self>, resume: R) -> GeneratorState; } ``` The `Generator::Yield` type is the type of values that can be yielded with the `yield` statement. The `Generator::Return` type is the returned type of the generator. This is typically the last expression in a generator's definition or any value passed to `return` in a generator. The `resume` function is the entry point for executing the `Generator` itself. The return value of `resume`, `GeneratorState`, looks like: ```rust pub enum GeneratorState { Yielded(Y), Complete(R), } ``` The `Yielded` variant indicates that the generator can later be resumed. This corresponds to a `yield` point in a generator. The `Complete` variant indicates that the generator is complete and cannot be resumed again. Calling `resume` after a generator has returned `Complete` will likely result in a panic of the program. ### Closure-like semantics The closure-like syntax for generators alludes to the fact that they also have closure-like semantics. Namely: * When created, a generator executes no code. A closure literal does not actually execute any of the closure's code on construction, and similarly a generator literal does not execute any code inside the generator when constructed. * Generators can capture outer variables by reference or by move, and this can be tweaked with the `move` keyword at the beginning of the closure. Like closures all generators will have an implicit environment which is inferred by the compiler. Outer variables can be moved into a generator for use as the generator progresses. * Generator literals produce a value with a unique type which implements the `std::ops::Generator` trait. This allows actual execution of the generator through the `Generator::resume` method as well as also naming it in return types and such. * Traits like `Send` and `Sync` are automatically implemented for a `Generator` depending on the captured variables of the environment. Unlike closures, generators also depend on variables live across suspension points. This means that although the ambient environment may be `Send` or `Sync`, the generator itself may not be due to internal variables live across `yield` points being not-`Send` or not-`Sync`. Note that generators do not implement traits like `Copy` or `Clone` automatically. * Whenever a generator is dropped it will drop all captured environment variables. ### Generators as state machines In the compiler, generators are currently compiled as state machines. Each `yield` expression will correspond to a different state that stores all live variables over that suspension point. Resumption of a generator will dispatch on the current state and then execute internally until a `yield` is reached, at which point all state is saved off in the generator and a value is returned. Let's take a look at an example to see what's going on here: ```rust #![feature(generators, generator_trait)] use std::ops::Generator; use std::pin::Pin; fn main() { let ret = "foo"; let mut generator = move || { yield 1; return ret }; Pin::new(&mut generator).resume(()); Pin::new(&mut generator).resume(()); } ``` This generator literal will compile down to something similar to: ```rust #![feature(arbitrary_self_types, generators, generator_trait)] use std::ops::{Generator, GeneratorState}; use std::pin::Pin; fn main() { let ret = "foo"; let mut generator = { enum __Generator { Start(&'static str), Yield1(&'static str), Done, } impl Generator for __Generator { type Yield = i32; type Return = &'static str; fn resume(mut self: Pin<&mut Self>, resume: ()) -> GeneratorState { use std::mem; match mem::replace(&mut *self, __Generator::Done) { __Generator::Start(s) => { *self = __Generator::Yield1(s); GeneratorState::Yielded(1) } __Generator::Yield1(s) => { *self = __Generator::Done; GeneratorState::Complete(s) } __Generator::Done => { panic!("generator resumed after completion") } } } } __Generator::Start(ret) }; Pin::new(&mut generator).resume(()); Pin::new(&mut generator).resume(()); } ``` Notably here we can see that the compiler is generating a fresh type, `__Generator` in this case. This type has a number of states (represented here as an `enum`) corresponding to each of the conceptual states of the generator. At the beginning we're closing over our outer variable `foo` and then that variable is also live over the `yield` point, so it's stored in both states. When the generator starts it'll immediately yield 1, but it saves off its state just before it does so indicating that it has reached the yield point. Upon resuming again we'll execute the `return ret` which returns the `Complete` state. Here we can also note that the `Done` state, if resumed, panics immediately as it's invalid to resume a completed generator. It's also worth noting that this is just a rough desugaring, not a normative specification for what the compiler does. BB4 half_open_range_patterns# `half_open_range_patterns` The tracking issue for this feature is: [#67264] It is part of the `#![exclusive_range_pattern]` feature, tracked at [#37854]. [#67264]: https://github.com/rust-lang/rust/issues/67264 [#37854]: https://github.com/rust-lang/rust/issues/37854 ----- The `half_open_range_patterns` feature allows RangeTo patterns (`..10`) to be used in appropriate pattern matching contexts. This requires also enabling the `exclusive_range_pattern` feature. It also enabled RangeFrom patterns but that has since been stabilized. ```rust #![feature(half_open_range_patterns)] #![feature(exclusive_range_pattern)] let x = 5; match x { ..0 => println!("negative!"), // "RangeTo" pattern. Unstable. 0 => println!("zero!"), 1.. => println!("positive!"), // "RangeFrom" pattern. Stable. } ```  5 Ѻ$"infer_static_outlives_requirements""# `infer_static_outlives_requirements` The tracking issue for this feature is: [#54185] [#54185]: https://github.com/rust-lang/rust/issues/54185 ------------------------ The `infer_static_outlives_requirements` feature indicates that certain `'static` outlives requirements can be inferred by the compiler rather than stating them explicitly. Note: It is an accompanying feature to `infer_outlives_requirements`, which must be enabled to infer outlives requirements. For example, currently generic struct definitions that contain references, require where-clauses of the form T: 'static. By using this feature the outlives predicates will be inferred, although they may still be written explicitly. ```rust,ignore (pseudo-Rust) struct Foo where U: 'static { // <-- currently required bar: Bar } struct Bar { x: T, } ``` ## Examples: ```rust,ignore (pseudo-Rust) #![feature(infer_outlives_requirements)] #![feature(infer_static_outlives_requirements)] #[rustc_outlives] // Implicitly infer U: 'static struct Foo { bar: Bar } struct Bar { x: T, } ``` 6  inline_const # `inline_const` The tracking issue for this feature is: [#76001] See also [`inline_const_pat`](inline-const-pat.md) ------ This feature allows you to use inline constant expressions. For example, you can turn this code: ```rust # fn add_one(x: i32) -> i32 { x + 1 } const MY_COMPUTATION: i32 = 1 + 2 * 3 / 4; fn main() { let x = add_one(MY_COMPUTATION); } ``` into this code: ```rust #![feature(inline_const)] # fn add_one(x: i32) -> i32 { x + 1 } fn main() { let x = add_one(const { 1 + 2 * 3 / 4 }); } ``` [#76001]: https://github.com/rust-lang/rust/issues/76001 7 inline_const_pat# `inline_const_pat` The tracking issue for this feature is: [#76001] See also [`inline_const`](inline-const.md) ------ This feature allows you to use inline constant expressions in pattern position: ```rust #![feature(inline_const_pat)] const fn one() -> i32 { 1 } let some_int = 3; match some_int { const { 1 + 2 } => println!("Matched 1 + 2"), const { one() } => println!("Matched const fn returning 1"), _ => println!("Didn't match anything :("), } ``` [#76001]: https://github.com/rust-lang/rust/issues/76001 8 int_error_internals# `int_error_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ 9 internal_output_capture# `internal_output_capture` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ : intra_doc_pointers# `intra-doc-pointers` The tracking issue for this feature is: [#80896] [#80896]: https://github.com/rust-lang/rust/issues/80896 ------------------------ Rustdoc does not currently allow disambiguating between `*const` and `*mut`, and raw pointers in intra-doc links are unstable until it does. ```rust #![feature(intra_doc_pointers)] //! [pointer::add] ``` ;   intrinsics # `intrinsics` The tracking issue for this feature is: None. Intrinsics are never intended to be stable directly, but intrinsics are often exported in some sort of stable manner. Prefer using the stable interfaces to the intrinsic directly when you can. ------------------------ These are imported as if they were FFI functions, with the special `rust-intrinsic` ABI. For example, if one was in a freestanding context, but wished to be able to `transmute` between types, and perform efficient pointer arithmetic, one would import those functions via a declaration like ```rust #![feature(intrinsics)] # fn main() {} extern "rust-intrinsic" { fn transmute(x: T) -> U; fn offset(dst: *const T, offset: isize) -> *const T; } ``` As with any other FFI functions, these are always `unsafe` to call. <   is_sorted # `is_sorted` The tracking issue for this feature is: [#53485] [#53485]: https://github.com/rust-lang/rust/issues/53485 ------------------------ Add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to `[T]`; add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to `Iterator`. N=   lang_items MM# `lang_items` The tracking issue for this feature is: None. ------------------------ The `rustc` compiler has certain pluggable operations, that is, functionality that isn't hard-coded into the language, but is implemented in libraries, with a special marker to tell the compiler it exists. The marker is the attribute `#[lang = "..."]` and there are various different values of `...`, i.e. various different 'lang items'. For example, `Box` pointers require two lang items, one for allocation and one for deallocation. A freestanding program that uses the `Box` sugar for dynamic allocations via `malloc` and `free`: ```rust,ignore (libc-is-finicky) #![feature(lang_items, box_syntax, start, libc, core_intrinsics, rustc_private)] #![no_std] use core::intrinsics; use core::panic::PanicInfo; extern crate libc; #[lang = "owned_box"] pub struct Box(*mut T); #[lang = "exchange_malloc"] unsafe fn allocate(size: usize, _align: usize) -> *mut u8 { let p = libc::malloc(size as libc::size_t) as *mut u8; // Check if `malloc` failed: if p as usize == 0 { intrinsics::abort(); } p } #[lang = "box_free"] unsafe fn box_free(ptr: *mut T) { libc::free(ptr as *mut libc::c_void) } #[start] fn main(_argc: isize, _argv: *const *const u8) -> isize { let _x = box 1; 0 } #[lang = "eh_personality"] extern fn rust_eh_personality() {} #[lang = "panic_impl"] extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } #[no_mangle] pub extern fn rust_eh_register_frames () {} #[no_mangle] pub extern fn rust_eh_unregister_frames () {} ``` Note the use of `abort`: the `exchange_malloc` lang item is assumed to return a valid pointer, and so needs to do the check internally. Other features provided by lang items include: - overloadable operators via traits: the traits corresponding to the `==`, `<`, dereferencing (`*`) and `+` (etc.) operators are all marked with lang items; those specific four are `eq`, `ord`, `deref`, and `add` respectively. - stack unwinding and general failure; the `eh_personality`, `panic` and `panic_bounds_check` lang items. - the traits in `std::marker` used to indicate types of various kinds; lang items `send`, `sync` and `copy`. - the marker types and variance indicators found in `std::marker`; lang items `covariant_type`, `contravariant_lifetime`, etc. Lang items are loaded lazily by the compiler; e.g. if one never uses `Box` then there is no need to define functions for `exchange_malloc` and `box_free`. `rustc` will emit an error when an item is needed but not found in the current crate or any that it depends on. Most lang items are defined by `libcore`, but if you're trying to build an executable without the standard library, you'll run into the need for lang items. The rest of this page focuses on this use-case, even though lang items are a bit broader than that. ### Using libc In order to build a `#[no_std]` executable we will need libc as a dependency. We can specify this using our `Cargo.toml` file: ```toml [dependencies] libc = { version = "0.2.14", default-features = false } ``` Note that the default features have been disabled. This is a critical step - **the default features of libc include the standard library and so must be disabled.** ### Writing an executable without stdlib Controlling the entry point is possible in two ways: the `#[start]` attribute, or overriding the default shim for the C `main` function with your own. The function marked `#[start]` is passed the command line parameters in the same format as C: ```rust,ignore (libc-is-finicky) #![feature(lang_items, core_intrinsics, rustc_private)] #![feature(start)] #![no_std] use core::intrinsics; use core::panic::PanicInfo; // Pull in the system libc library for what crt0.o likely requires. extern crate libc; // Entry point for this program. #[start] fn start(_argc: isize, _argv: *const *const u8) -> isize { 0 } // These functions are used by the compiler, but not // for a bare-bones hello world. These are normally // provided by libstd. #[lang = "eh_personality"] #[no_mangle] pub extern fn rust_eh_personality() { } #[lang = "panic_impl"] #[no_mangle] pub extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } ``` To override the compiler-inserted `main` shim, one has to disable it with `#![no_main]` and then create the appropriate symbol with the correct ABI and the correct name, which requires overriding the compiler's name mangling too: ```rust,ignore (libc-is-finicky) #![feature(lang_items, core_intrinsics, rustc_private)] #![feature(start)] #![no_std] #![no_main] use core::intrinsics; use core::panic::PanicInfo; // Pull in the system libc library for what crt0.o likely requires. extern crate libc; // Entry point for this program. #[no_mangle] // ensure that this symbol is called `main` in the output pub extern fn main(_argc: i32, _argv: *const *const u8) -> i32 { 0 } // These functions are used by the compiler, but not // for a bare-bones hello world. These are normally // provided by libstd. #[lang = "eh_personality"] #[no_mangle] pub extern fn rust_eh_personality() { } #[lang = "panic_impl"] #[no_mangle] pub extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } } ``` In many cases, you may need to manually link to the `compiler_builtins` crate when building a `no_std` binary. You may observe this via linker error messages such as "```undefined reference to `__rust_probestack'```". ## More about the language items The compiler currently makes a few assumptions about symbols which are available in the executable to call. Normally these functions are provided by the standard library, but without it you must define your own. These symbols are called "language items", and they each have an internal name, and then a signature that an implementation must conform to. The first of these functions, `rust_eh_personality`, is used by the failure mechanisms of the compiler. This is often mapped to GCC's personality function (see the [libstd implementation][unwind] for more information), but crates which do not trigger a panic can be assured that this function is never called. The language item's name is `eh_personality`. [unwind]: https://github.com/rust-lang/rust/blob/master/library/panic_unwind/src/gcc.rs The second function, `rust_begin_panic`, is also used by the failure mechanisms of the compiler. When a panic happens, this controls the message that's displayed on the screen. While the language item's name is `panic_impl`, the symbol name is `rust_begin_panic`. Finally, a `eh_catch_typeinfo` static is needed for certain targets which implement Rust panics on top of C++ exceptions. ## List of all language items This is a list of all language items in Rust along with where they are located in the source code. - Primitives - `i8`: `libcore/num/mod.rs` - `i16`: `libcore/num/mod.rs` - `i32`: `libcore/num/mod.rs` - `i64`: `libcore/num/mod.rs` - `i128`: `libcore/num/mod.rs` - `isize`: `libcore/num/mod.rs` - `u8`: `libcore/num/mod.rs` - `u16`: `libcore/num/mod.rs` - `u32`: `libcore/num/mod.rs` - `u64`: `libcore/num/mod.rs` - `u128`: `libcore/num/mod.rs` - `usize`: `libcore/num/mod.rs` - `f32`: `libstd/f32.rs` - `f64`: `libstd/f64.rs` - `char`: `libcore/char.rs` - `slice`: `liballoc/slice.rs` - `str`: `liballoc/str.rs` - `const_ptr`: `libcore/ptr.rs` - `mut_ptr`: `libcore/ptr.rs` - `unsafe_cell`: `libcore/cell.rs` - Runtime - `start`: `libstd/rt.rs` - `eh_personality`: `libpanic_unwind/emcc.rs` (EMCC) - `eh_personality`: `libpanic_unwind/gcc.rs` (GNU) - `eh_personality`: `libpanic_unwind/seh.rs` (SEH) - `eh_catch_typeinfo`: `libpanic_unwind/emcc.rs` (EMCC) - `panic`: `libcore/panicking.rs` - `panic_bounds_check`: `libcore/panicking.rs` - `panic_impl`: `libcore/panicking.rs` - `panic_impl`: `libstd/panicking.rs` - Allocations - `owned_box`: `liballoc/boxed.rs` - `exchange_malloc`: `liballoc/heap.rs` - `box_free`: `liballoc/heap.rs` - Operands - `not`: `libcore/ops/bit.rs` - `bitand`: `libcore/ops/bit.rs` - `bitor`: `libcore/ops/bit.rs` - `bitxor`: `libcore/ops/bit.rs` - `shl`: `libcore/ops/bit.rs` - `shr`: `libcore/ops/bit.rs` - `bitand_assign`: `libcore/ops/bit.rs` - `bitor_assign`: `libcore/ops/bit.rs` - `bitxor_assign`: `libcore/ops/bit.rs` - `shl_assign`: `libcore/ops/bit.rs` - `shr_assign`: `libcore/ops/bit.rs` - `deref`: `libcore/ops/deref.rs` - `deref_mut`: `libcore/ops/deref.rs` - `index`: `libcore/ops/index.rs` - `index_mut`: `libcore/ops/index.rs` - `add`: `libcore/ops/arith.rs` - `sub`: `libcore/ops/arith.rs` - `mul`: `libcore/ops/arith.rs` - `div`: `libcore/ops/arith.rs` - `rem`: `libcore/ops/arith.rs` - `neg`: `libcore/ops/arith.rs` - `add_assign`: `libcore/ops/arith.rs` - `sub_assign`: `libcore/ops/arith.rs` - `mul_assign`: `libcore/ops/arith.rs` - `div_assign`: `libcore/ops/arith.rs` - `rem_assign`: `libcore/ops/arith.rs` - `eq`: `libcore/cmp.rs` - `ord`: `libcore/cmp.rs` - Functions - `fn`: `libcore/ops/function.rs` - `fn_mut`: `libcore/ops/function.rs` - `fn_once`: `libcore/ops/function.rs` - `generator_state`: `libcore/ops/generator.rs` - `generator`: `libcore/ops/generator.rs` - Other - `coerce_unsized`: `libcore/ops/unsize.rs` - `drop`: `libcore/ops/drop.rs` - `drop_in_place`: `libcore/ptr.rs` - `clone`: `libcore/clone.rs` - `copy`: `libcore/marker.rs` - `send`: `libcore/marker.rs` - `sized`: `libcore/marker.rs` - `unsize`: `libcore/marker.rs` - `sync`: `libcore/marker.rs` - `phantom_data`: `libcore/marker.rs` - `discriminant_kind`: `libcore/marker.rs` - `freeze`: `libcore/marker.rs` - `debug_trait`: `libcore/fmt/mod.rs` - `non_zero`: `libcore/nonzero.rs` - `arc`: `liballoc/sync.rs` - `rc`: `liballoc/rc.rs` MM> libstd_sys_internalsѭ# `libstd_sys_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ ? libstd_thread_internals# `libstd_thread_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ а@  link_cfg{# `link_cfg` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ {{(A  llvm_asmͲ((# `llvm_asm` The tracking issue for this feature is: [#70173] [#70173]: https://github.com/rust-lang/rust/issues/70173 ------------------------ For extremely low-level manipulations and performance reasons, one might wish to control the CPU directly. Rust supports using inline assembly to do this via the `llvm_asm!` macro. ```rust,ignore (pseudo-code) llvm_asm!(assembly template : output operands : input operands : clobbers : options ); ``` Any use of `llvm_asm` is feature gated (requires `#![feature(llvm_asm)]` on the crate to allow) and of course requires an `unsafe` block. > **Note**: the examples here are given in x86/x86-64 assembly, but > all platforms are supported. ## Assembly template The `assembly template` is the only required parameter and must be a literal string (i.e. `""`) ```rust #![feature(llvm_asm)] #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] fn foo() { unsafe { llvm_asm!("NOP"); } } // Other platforms: #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] fn foo() { /* ... */ } fn main() { // ... foo(); // ... } ``` (The `feature(llvm_asm)` and `#[cfg]`s are omitted from now on.) Output operands, input operands, clobbers and options are all optional but you must add the right number of `:` if you skip them: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { llvm_asm!("xor %eax, %eax" : : : "eax" ); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` Whitespace also doesn't matter: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { llvm_asm!("xor %eax, %eax" ::: "eax"); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` ## Operands Input and output operands follow the same format: `: "constraints1"(expr1), "constraints2"(expr2), ..."`. Output operand expressions must be mutable place, or not yet assigned: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] fn add(a: i32, b: i32) -> i32 { let c: i32; unsafe { llvm_asm!("add $2, $0" : "=r"(c) : "0"(a), "r"(b) ); } c } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn add(a: i32, b: i32) -> i32 { a + b } fn main() { assert_eq!(add(3, 14159), 14162) } ``` If you would like to use real operands in this position, however, you are required to put curly braces `{}` around the register that you want, and you are required to put the specific size of the operand. This is useful for very low level programming, where which register you use is important: ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # unsafe fn read_byte_in(port: u16) -> u8 { let result: u8; llvm_asm!("in %dx, %al" : "={al}"(result) : "{dx}"(port)); result # } ``` ## Clobbers Some instructions modify registers which might otherwise have held different values so we use the clobbers list to indicate to the compiler not to assume any values loaded into those registers will stay valid. ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { unsafe { // Put the value 0x200 in eax: llvm_asm!("mov $$0x200, %eax" : /* no outputs */ : /* no inputs */ : "eax"); # } } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` Input and output registers need not be listed since that information is already communicated by the given constraints. Otherwise, any other registers used either implicitly or explicitly should be listed. If the assembly changes the condition code register `cc` should be specified as one of the clobbers. Similarly, if the assembly modifies memory, `memory` should also be specified. ## Options The last section, `options` is specific to Rust. The format is comma separated literal strings (i.e. `:"foo", "bar", "baz"`). It's used to specify some extra info about the inline assembly: Current valid options are: 1. `volatile` - specifying this is analogous to `__asm__ __volatile__ (...)` in gcc/clang. 2. `alignstack` - certain instructions expect the stack to be aligned a certain way (i.e. SSE) and specifying this indicates to the compiler to insert its usual stack alignment code 3. `intel` - use intel syntax instead of the default AT&T. ```rust # #![feature(llvm_asm)] # #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] # fn main() { let result: i32; unsafe { llvm_asm!("mov eax, 2" : "={eax}"(result) : : : "intel") } println!("eax is currently {}", result); # } # #[cfg(not(any(target_arch = "x86", target_arch = "x86_64")))] # fn main() {} ``` ## More Information The current implementation of the `llvm_asm!` macro is a direct binding to [LLVM's inline assembler expressions][llvm-docs], so be sure to check out [their documentation as well][llvm-docs] for more information about clobbers, constraints, etc. [llvm-docs]: http://llvm.org/docs/LangRef.html#inline-assembler-expressions (( B marker_trait_attr  # `marker_trait_attr` The tracking issue for this feature is: [#29864] [#29864]: https://github.com/rust-lang/rust/issues/29864 ------------------------ Normally, Rust keeps you from adding trait implementations that could overlap with each other, as it would be ambiguous which to use. This feature, however, carves out an exception to that rule: a trait can opt-in to having overlapping implementations, at the cost that those implementations are not allowed to override anything (and thus the trait itself cannot have any associated items, as they're pointless when they'd need to do the same thing for every type anyway). ```rust #![feature(marker_trait_attr)] #[marker] trait CheapToClone: Clone {} impl CheapToClone for T {} // These could potentially overlap with the blanket implementation above, // so are only allowed because CheapToClone is a marker trait. impl CheapToClone for (T, U) {} impl CheapToClone for std::ops::Range {} fn cheap_clone(t: T) -> T { t.clone() } ``` This is expected to replace the unstable `overlapping_marker_traits` feature, which applied to all empty traits (without needing an opt-in).  C more_qualified_paths# `more_qualified_paths` The `more_qualified_paths` feature can be used in order to enable the use of qualified paths in patterns. ## Example ```rust #![feature(more_qualified_paths)] fn main() { // destructure through a qualified path let ::Assoc { br } = StructStruct { br: 2 }; } struct StructStruct { br: i8, } struct Foo; trait A { type Assoc; } impl A for Foo { type Assoc = StructStruct; } ``` D native_link_modifiers# `native_link_modifiers` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers` feature allows you to use the `modifiers` syntax with the `#[link(..)]` attribute. Modifiers are specified as a comma-delimited string with each modifier prefixed with either a `+` or `-` to indicate that the modifier is enabled or disabled, respectively. The last boolean value specified for a given modifier wins. E !native_link_modifiers_as_needed# `native_link_modifiers_as_needed` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_as_needed` feature allows you to use the `as-needed` modifier. `as-needed` is only compatible with the `dynamic` and `framework` linking kinds. Using any other kind will result in a compiler error. `+as-needed` means that the library will be actually linked only if it satisfies some undefined symbols at the point at which it is specified on the command line, making it similar to static libraries in this regard. This modifier translates to `--as-needed` for ld-like linkers, and to `-dead_strip_dylibs` / `-needed_library` / `-needed_framework` for ld64. The modifier does nothing for linkers that don't support it (e.g. `link.exe`). The default for this modifier is unclear, some targets currently specify it as `+as-needed`, some do not. We may want to try making `+as-needed` a default for all targets. F native_link_modifiers_bundle# `native_link_modifiers_bundle` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_bundle` feature allows you to use the `bundle` modifier. Only compatible with the `static` linking kind. Using any other kind will result in a compiler error. `+bundle` means objects from the static library are bundled into the produced crate (a rlib, for example) and are used from this crate later during linking of the final binary. `-bundle` means the static library is included into the produced rlib "by name" and object files from it are included only during linking of the final binary, the file search by that name is also performed during final linking. This modifier is supposed to supersede the `static-nobundle` linking kind defined by [RFC 1717](https://github.com/rust-lang/rfcs/pull/1717). The default for this modifier is currently `+bundle`, but it could be changed later on some future edition boundary.  G  native_link_modifiers_verbatim  # `native_link_modifiers_verbatim` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_verbatim` feature allows you to use the `verbatim` modifier. `+verbatim` means that rustc itself won't add any target-specified library prefixes or suffixes (like `lib` or `.a`) to the library name, and will try its best to ask for the same thing from the linker. For `ld`-like linkers rustc will use the `-l:filename` syntax (note the colon) when passing the library, so the linker won't add any prefixes or suffixes as well. See [`-l namespec`](https://sourceware.org/binutils/docs/ld/Options.html) in ld documentation for more details. For linkers not supporting any verbatim modifiers (e.g. `link.exe` or `ld64`) the library name will be passed as is. The default for this modifier is `-verbatim`. This RFC changes the behavior of `raw-dylib` linking kind specified by [RFC 2627](https://github.com/rust-lang/rfcs/pull/2627). The `.dll` suffix (or other target-specified suffixes for other targets) is now added automatically. If your DLL doesn't have the `.dll` suffix, it can be specified with `+verbatim`.  ډH %#native_link_modifiers_whole_archive### `native_link_modifiers_whole_archive` The tracking issue for this feature is: [#81490] [#81490]: https://github.com/rust-lang/rust/issues/81490 ------------------------ The `native_link_modifiers_whole_archive` feature allows you to use the `whole-archive` modifier. Only compatible with the `static` linking kind. Using any other kind will result in a compiler error. `+whole-archive` means that the static library is linked as a whole archive without throwing any object files away. This modifier translates to `--whole-archive` for `ld`-like linkers, to `/WHOLEARCHIVE` for `link.exe`, and to `-force_load` for `ld64`. The modifier does nothing for linkers that don't support it. The default for this modifier is `-whole-archive`. I negative_impls# `negative_impls` The tracking issue for this feature is [#68318]. [#68318]: https://github.com/rust-lang/rust/issues/68318 ---- With the feature gate `negative_impls`, you can write negative impls as well as positive ones: ```rust #![feature(negative_impls)] trait DerefMut { } impl !DerefMut for &T { } ``` Negative impls indicate a semver guarantee that the given trait will not be implemented for the given types. Negative impls play an additional purpose for auto traits, described below. Negative impls have the following characteristics: * They do not have any items. * They must obey the orphan rules as if they were a positive impl. * They cannot "overlap" with any positive impls. ## Semver interaction It is a breaking change to remove a negative impl. Negative impls are a commitment not to implement the given trait for the named types. ## Orphan and overlap rules Negative impls must obey the same orphan rules as a positive impl. This implies you cannot add a negative impl for types defined in upstream crates and so forth. Similarly, negative impls cannot overlap with positive impls, again using the same "overlap" check that we ordinarily use to determine if two impls overlap. (Note that positive impls typically cannot overlap with one another either, except as permitted by specialization.) ## Interaction with auto traits Declaring a negative impl `impl !SomeAutoTrait for SomeType` for an auto-trait serves two purposes: * as with any trait, it declares that `SomeType` will never implement `SomeAutoTrait`; * it disables the automatic `SomeType: SomeAutoTrait` impl that would otherwise have been generated. Note that, at present, there is no way to indicate that a given type does not implement an auto trait *but that it may do so in the future*. For ordinary types, this is done by simply not declaring any impl at all, but that is not an option for auto traits. A workaround is that one could embed a marker type as one of the fields, where the marker type is `!AutoTrait`. ## Immediate uses Negative impls are used to declare that `&T: !DerefMut` and `&mut T: !Clone`, as required to fix the soundness of `Pin` described in [#66544](https://github.com/rust-lang/rust/issues/66544). This serves two purposes: * For proving the correctness of unsafe code, we can use that impl as evidence that no `DerefMut` or `Clone` impl exists. * It prevents downstream crates from creating such impls. J   no_coverage Ǥ# `no_coverage` The tracking issue for this feature is: [#84605] [#84605]: https://github.com/rust-lang/rust/issues/84605 --- The `no_coverage` attribute can be used to selectively disable coverage instrumentation in an annotated function. This might be useful to: - Avoid instrumentation overhead in a performance critical function - Avoid generating coverage for a function that is not meant to be executed, but still target 100% coverage for the rest of the program. ## Example ```rust #![feature(no_coverage)] // `foo()` will get coverage instrumentation (by default) fn foo() { // ... } #[no_coverage] fn bar() { // ... } ``` K   no_sanitize # `no_sanitize` The tracking issue for this feature is: [#39699] [#39699]: https://github.com/rust-lang/rust/issues/39699 ------------------------ The `no_sanitize` attribute can be used to selectively disable sanitizer instrumentation in an annotated function. This might be useful to: avoid instrumentation overhead in a performance critical function, or avoid instrumenting code that contains constructs unsupported by given sanitizer. The precise effect of this annotation depends on particular sanitizer in use. For example, with `no_sanitize(thread)`, the thread sanitizer will no longer instrument non-atomic store / load operations, but it will instrument atomic operations to avoid reporting false positives and provide meaning full stack traces. ## Examples ``` rust #![feature(no_sanitize)] #[no_sanitize(address)] fn foo() { // ... } ``` L pluginƱ# `plugin` The tracking issue for this feature is: [#29597] [#29597]: https://github.com/rust-lang/rust/issues/29597 This feature is part of "compiler plugins." It will often be used with the `rustc_private` feature. ------------------------ `rustc` can load compiler plugins, which are user-provided libraries that extend the compiler's behavior with new lint checks, etc. A plugin is a dynamic library crate with a designated *registrar* function that registers extensions with `rustc`. Other crates can load these extensions using the crate attribute `#![plugin(...)]`. See the `rustc_driver::plugin` documentation for more about the mechanics of defining and loading a plugin. In the vast majority of cases, a plugin should *only* be used through `#![plugin]` and not through an `extern crate` item. Linking a plugin would pull in all of librustc_ast and librustc as dependencies of your crate. This is generally unwanted unless you are building another plugin. The usual practice is to put compiler plugins in their own crate, separate from any `macro_rules!` macros or ordinary Rust code meant to be used by consumers of a library. # Lint plugins Plugins can extend [Rust's lint infrastructure](../../reference/attributes/diagnostics.md#lint-check-attributes) with additional checks for code style, safety, etc. Now let's write a plugin [`lint-plugin-test.rs`](https://github.com/rust-lang/rust/blob/master/tests/ui-fulldeps/auxiliary/lint-plugin-test.rs) that warns about any item named `lintme`. ```rust,ignore (requires-stage-2) #![feature(box_syntax, rustc_private)] extern crate rustc_ast; // Load rustc as a plugin to get macros extern crate rustc_driver; #[macro_use] extern crate rustc_lint; #[macro_use] extern crate rustc_session; use rustc_driver::plugin::Registry; use rustc_lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass}; use rustc_ast::ast; declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'"); declare_lint_pass!(Pass => [TEST_LINT]); impl EarlyLintPass for Pass { fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) { if it.ident.name.as_str() == "lintme" { cx.lint(TEST_LINT, |lint| { lint.build("item is named 'lintme'").set_span(it.span).emit() }); } } } #[no_mangle] fn __rustc_plugin_registrar(reg: &mut Registry) { reg.lint_store.register_lints(&[&TEST_LINT]); reg.lint_store.register_early_pass(|| box Pass); } ``` Then code like ```rust,ignore (requires-plugin) #![feature(plugin)] #![plugin(lint_plugin_test)] fn lintme() { } ``` will produce a compiler warning: ```txt foo.rs:4:1: 4:16 warning: item is named 'lintme', #[warn(test_lint)] on by default foo.rs:4 fn lintme() { } ^~~~~~~~~~~~~~~ ``` The components of a lint plugin are: * one or more `declare_lint!` invocations, which define static `Lint` structs; * a struct holding any state needed by the lint pass (here, none); * a `LintPass` implementation defining how to check each syntax element. A single `LintPass` may call `span_lint` for several different `Lint`s, but should register them all through the `get_lints` method. Lint passes are syntax traversals, but they run at a late stage of compilation where type information is available. `rustc`'s [built-in lints](https://github.com/rust-lang/rust/blob/master/src/librustc_session/lint/builtin.rs) mostly use the same infrastructure as lint plugins, and provide examples of how to access type information. Lints defined by plugins are controlled by the usual [attributes and compiler flags](../../reference/attributes/diagnostics.md#lint-check-attributes), e.g. `#[allow(test_lint)]` or `-A test-lint`. These identifiers are derived from the first argument to `declare_lint!`, with appropriate case and punctuation conversion. You can run `rustc -W help foo.rs` to see a list of lints known to `rustc`, including those provided by plugins loaded by `foo.rs`. M print_internals# `print_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ N profiler_runtime# `profiler_runtime` The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524). ------------------------ O profiler_runtime_lib# `profiler_runtime_lib` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ P   raw_dylib # `raw_dylib` The tracking issue for this feature is: [#58713] [#58713]: https://github.com/rust-lang/rust/issues/58713 ------------------------ The `raw_dylib` feature allows you to link against the implementations of functions in an `extern` block without, on Windows, linking against an import library. ```rust,ignore (partial-example) #![feature(raw_dylib)] #[link(name="library", kind="raw-dylib")] extern { fn extern_function(x: i32); } fn main() { unsafe { extern_function(14); } } ``` ## Limitations Currently, this feature is only supported on `-windows-msvc` targets. Non-Windows platforms don't have import libraries, and an incompatibility between LLVM and the BFD linker means that it is not currently supported on `-windows-gnu` targets. On the `i686-pc-windows-msvc` target, this feature supports only the `cdecl`, `stdcall`, `system`, and `fastcall` calling conventions. Q  repr128# `repr128` The tracking issue for this feature is: [#56071] [#56071]: https://github.com/rust-lang/rust/issues/56071 ------------------------ The `repr128` feature adds support for `#[repr(u128)]` on `enum`s. ```rust #![feature(repr128)] #[repr(u128)] enum Foo { Bar(u64), } ``` R rt|u# `rt` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ uu S   rustc_attrs   # `rustc_attrs` This feature has no tracking issue, and is therefore internal to the compiler, not being intended for general use. Note: `rustc_attrs` enables many rustc-internal attributes and this page only discuss a few of them. ------------------------ The `rustc_attrs` feature allows debugging rustc type layouts by using `#[rustc_layout(...)]` to debug layout at compile time (it even works with `cargo check`) as an alternative to `rustc -Z print-type-sizes` that is way more verbose. Options provided by `#[rustc_layout(...)]` are `debug`, `size`, `align`, `abi`. Note that it only works on sized types without generics. ## Examples ```rust,compile_fail #![feature(rustc_attrs)] #[rustc_layout(abi, size)] pub enum X { Y(u8, u8, u8), Z(isize), } ``` When that is compiled, the compiler will error with something like ```text error: abi: Aggregate { sized: true } --> src/lib.rs:4:1 | 4 | / pub enum T { 5 | | Y(u8, u8, u8), 6 | | Z(isize), 7 | | } | |_^ error: size: Size { raw: 16 } --> src/lib.rs:4:1 | 4 | / pub enum T { 5 | | Y(u8, u8, u8), 6 | | Z(isize), 7 | | } | |_^ error: aborting due to 2 previous errors ```  T sort_internals# `sort_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ U  str_internals # `str_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ $V test### `test` The tracking issue for this feature is: None. ------------------------ The internals of the `test` crate are unstable, behind the `test` flag. The most widely used part of the `test` crate are benchmark tests, which can test the performance of your code. Let's make our `src/lib.rs` look like this (comments elided): ```rust,no_run #![feature(test)] extern crate test; pub fn add_two(a: i32) -> i32 { a + 2 } #[cfg(test)] mod tests { use super::*; use test::Bencher; #[test] fn it_works() { assert_eq!(4, add_two(2)); } #[bench] fn bench_add_two(b: &mut Bencher) { b.iter(|| add_two(2)); } } ``` Note the `test` feature gate, which enables this unstable feature. We've imported the `test` crate, which contains our benchmarking support. We have a new function as well, with the `bench` attribute. Unlike regular tests, which take no arguments, benchmark tests take a `&mut Bencher`. This `Bencher` provides an `iter` method, which takes a closure. This closure contains the code we'd like to benchmark. We can run benchmark tests with `cargo bench`: ```bash $ cargo bench Compiling adder v0.0.1 (file:///home/steve/tmp/adder) Running target/release/adder-91b3e234d4ed382a running 2 tests test tests::it_works ... ignored test tests::bench_add_two ... bench: 1 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured ``` Our non-benchmark test was ignored. You may have noticed that `cargo bench` takes a bit longer than `cargo test`. This is because Rust runs our benchmark a number of times, and then takes the average. Because we're doing so little work in this example, we have a `1 ns/iter (+/- 0)`, but this would show the variance if there was one. Advice on writing benchmarks: * Move setup code outside the `iter` loop; only put the part you want to measure inside * Make the code do "the same thing" on each iteration; do not accumulate or change state * Make the outer function idempotent too; the benchmark runner is likely to run it many times * Make the inner `iter` loop short and fast so benchmark runs are fast and the calibrator can adjust the run-length at fine resolution * Make the code in the `iter` loop do something simple, to assist in pinpointing performance improvements (or regressions) ## Gotcha: optimizations There's another tricky part to writing benchmarks: benchmarks compiled with optimizations activated can be dramatically changed by the optimizer so that the benchmark is no longer benchmarking what one expects. For example, the compiler might recognize that some calculation has no external effects and remove it entirely. ```rust,no_run #![feature(test)] extern crate test; use test::Bencher; #[bench] fn bench_xor_1000_ints(b: &mut Bencher) { b.iter(|| { (0..1000).fold(0, |old, new| old ^ new); }); } ``` gives the following results ```text running 1 test test bench_xor_1000_ints ... bench: 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured ``` The benchmarking runner offers two ways to avoid this. Either, the closure that the `iter` method receives can return an arbitrary value which forces the optimizer to consider the result used and ensures it cannot remove the computation entirely. This could be done for the example above by adjusting the `b.iter` call to ```rust # struct X; # impl X { fn iter(&self, _: F) where F: FnMut() -> T {} } let b = X; b.iter(|| { // Note lack of `;` (could also use an explicit `return`). (0..1000).fold(0, |old, new| old ^ new) }); ``` Or, the other option is to call the generic `test::black_box` function, which is an opaque "black box" to the optimizer and so forces it to consider any argument as used. ```rust #![feature(test)] extern crate test; # fn main() { # struct X; # impl X { fn iter(&self, _: F) where F: FnMut() -> T {} } let b = X; b.iter(|| { let n = test::black_box(1000); (0..n).fold(0, |a, b| a ^ b) }) # } ``` Neither of these read or modify the value, and are very cheap for small values. Larger values can be passed indirectly to reduce overhead (e.g. `black_box(&huge_struct)`). Performing either of the above changes gives the following benchmarking results ```text running 1 test test bench_xor_1000_ints ... bench: 131 ns/iter (+/- 3) test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured ``` However, the optimizer can still modify a testcase in an undesirable manner even when using either of the above. ##W thread_local_internalsՓ# `thread_local_internals` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ X  trace_macros # `trace_macros` The tracking issue for this feature is [#29598]. [#29598]: https://github.com/rust-lang/rust/issues/29598 ------------------------ With `trace_macros` you can trace the expansion of macros in your code. ## Examples ```rust #![feature(trace_macros)] fn main() { trace_macros!(true); println!("Hello, Rust!"); trace_macros!(false); } ``` The `cargo build` output: ```txt note: trace_macro --> src/main.rs:5:5 | 5 | println!("Hello, Rust!"); | ^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: expanding `println! { "Hello, Rust!" }` = note: to `print ! ( concat ! ( "Hello, Rust!" , "\n" ) )` = note: expanding `print! { concat ! ( "Hello, Rust!" , "\n" ) }` = note: to `$crate :: io :: _print ( format_args ! ( concat ! ( "Hello, Rust!" , "\n" ) ) )` Finished dev [unoptimized + debuginfo] target(s) in 0.60 secs ``` Y Ŝ  trait_alias # `trait_alias` The tracking issue for this feature is: [#41517] [#41517]: https://github.com/rust-lang/rust/issues/41517 ------------------------ The `trait_alias` feature adds support for trait aliases. These allow aliases to be created for one or more traits (currently just a single regular trait plus any number of auto-traits), and used wherever traits would normally be used as either bounds or trait objects. ```rust #![feature(trait_alias)] trait Foo = std::fmt::Debug + Send; trait Bar = Foo + Sync; // Use trait alias as bound on type parameter. fn foo(v: &T) { println!("{:?}", v); } pub fn main() { foo(&1); // Use trait alias for trait objects. let a: &Bar = &123; println!("{:?}", a); let b = Box::new(456) as Box; println!("{:?}", b); } ``` Z trait_upcasting# `trait_upcasting` The tracking issue for this feature is: [#65991] [#65991]: https://github.com/rust-lang/rust/issues/65991 ------------------------ The `trait_upcasting` feature adds support for trait upcasting coercion. This allows a trait object of type `dyn Bar` to be cast to a trait object of type `dyn Foo` so long as `Bar: Foo`. ```rust,edition2018 #![feature(trait_upcasting)] #![allow(incomplete_features)] trait Foo {} trait Bar: Foo {} impl Foo for i32 {} impl Bar for T {} let bar: &dyn Bar = &123; let foo: &dyn Foo = bar; ``` [ ʨtransparent_unions# `transparent_unions` The tracking issue for this feature is [#60405] [#60405]: https://github.com/rust-lang/rust/issues/60405 ---- The `transparent_unions` feature allows you mark `union`s as `#[repr(transparent)]`. A `union` may be `#[repr(transparent)]` in exactly the same conditions in which a `struct` may be `#[repr(transparent)]` (generally, this means the `union` must have exactly one non-zero-sized field). Some concrete illustrations follow. ```rust #![feature(transparent_unions)] // This union has the same representation as `f32`. #[repr(transparent)] union SingleFieldUnion { field: f32, } // This union has the same representation as `usize`. #[repr(transparent)] union MultiFieldUnion { field: usize, nothing: (), } ``` For consistency with transparent `struct`s, `union`s must have exactly one non-zero-sized field. If all fields are zero-sized, the `union` must not be `#[repr(transparent)]`: ```rust #![feature(transparent_unions)] // This (non-transparent) union is already valid in stable Rust: pub union GoodUnion { pub nothing: (), } // Error: transparent union needs exactly one non-zero-sized field, but has 0 // #[repr(transparent)] // pub union BadUnion { // pub nothing: (), // } ``` The one exception is if the `union` is generic over `T` and has a field of type `T`, it may be `#[repr(transparent)]` even if `T` is a zero-sized type: ```rust #![feature(transparent_unions)] // This union has the same representation as `T`. #[repr(transparent)] pub union GenericUnion { // Unions with non-`Copy` fields are unstable. pub field: T, pub nothing: (), } // This is okay even though `()` is a zero-sized type. pub const THIS_IS_OKAY: GenericUnion<()> = GenericUnion { field: () }; ``` Like transparent `struct`s, a transparent `union` of type `U` has the same layout, size, and ABI as its single non-ZST field. If it is generic over a type `T`, and all its fields are ZSTs except for exactly one field of type `T`, then it has the same layout and ABI as `T` (even if `T` is a ZST when monomorphized). Like transparent `struct`s, transparent `union`s are FFI-safe if and only if their underlying representation type is also FFI-safe. A `union` may not be eligible for the same nonnull-style optimizations that a `struct` or `enum` (with the same fields) are eligible for. Adding `#[repr(transparent)]` to `union` does not change this. To give a more concrete example, it is unspecified whether `size_of::()` is equal to `size_of::>()`, where `T` is a `union` (regardless of whether or not it is transparent). The Rust compiler is free to perform this optimization if possible, but is not required to, and different compiler versions may differ in their application of these optimizations. \   try_blocks # `try_blocks` The tracking issue for this feature is: [#31436] [#31436]: https://github.com/rust-lang/rust/issues/31436 ------------------------ The `try_blocks` feature adds support for `try` blocks. A `try` block creates a new scope one can use the `?` operator in. ```rust,edition2018 #![feature(try_blocks)] use std::num::ParseIntError; let result: Result = try { "1".parse::()? + "2".parse::()? + "3".parse::()? }; assert_eq!(result, Ok(6)); let result: Result = try { "1".parse::()? + "foo".parse::()? + "3".parse::()? }; assert!(result.is_err()); ``` ] type_changing_struct_update# `type_changing_struct_update` The tracking issue for this feature is: [#86555] [#86555]: https://github.com/rust-lang/rust/issues/86555 ------------------------ This implements [RFC2528]. When turned on, you can create instances of the same struct that have different generic type or lifetime parameters. [RFC2528]: https://github.com/rust-lang/rfcs/blob/master/text/2528-type-changing-struct-update-syntax.md ```rust #![allow(unused_variables, dead_code)] #![feature(type_changing_struct_update)] fn main () { struct Foo { field1: T, field2: U, } let base: Foo = Foo { field1: String::from("hello"), field2: 1234, }; let updated: Foo = Foo { field1: 3.14, ..base }; } ``` ^ unboxed_closures# `unboxed_closures` The tracking issue for this feature is [#29625] See Also: [`fn_traits`](../library-features/fn-traits.md) [#29625]: https://github.com/rust-lang/rust/issues/29625 ---- The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI, required for implementing the [`Fn*`] family of traits. `"rust-call"` functions must have exactly one (non self) argument, a tuple representing the argument list. [`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html ```rust #![feature(unboxed_closures)] extern "rust-call" fn add_args(args: (u32, u32)) -> u32 { args.0 + args.1 } fn main() {} ``` "_ unsized_locals!!# `unsized_locals` The tracking issue for this feature is: [#48055] [#48055]: https://github.com/rust-lang/rust/issues/48055 ------------------------ This implements [RFC1909]. When turned on, you can have unsized arguments and locals: [RFC1909]: https://github.com/rust-lang/rfcs/blob/master/text/1909-unsized-rvalues.md ```rust #![allow(incomplete_features)] #![feature(unsized_locals, unsized_fn_params)] use std::any::Any; fn main() { let x: Box = Box::new(42); let x: dyn Any = *x; // ^ unsized local variable // ^^ unsized temporary foo(x); } fn foo(_: dyn Any) {} // ^^^^^^ unsized argument ``` The RFC still forbids the following unsized expressions: ```rust,compile_fail #![feature(unsized_locals)] use std::any::Any; struct MyStruct { content: T, } struct MyTupleStruct(T); fn answer() -> Box { Box::new(42) } fn main() { // You CANNOT have unsized statics. static X: dyn Any = *answer(); // ERROR const Y: dyn Any = *answer(); // ERROR // You CANNOT have struct initialized unsized. MyStruct { content: *answer() }; // ERROR MyTupleStruct(*answer()); // ERROR (42, *answer()); // ERROR // You CANNOT have unsized return types. fn my_function() -> dyn Any { *answer() } // ERROR // You CAN have unsized local variables... let mut x: dyn Any = *answer(); // OK // ...but you CANNOT reassign to them. x = *answer(); // ERROR // You CANNOT even initialize them separately. let y: dyn Any; // OK y = *answer(); // ERROR // Not mentioned in the RFC, but by-move captured variables are also Sized. let x: dyn Any = *answer(); (move || { // ERROR let y = x; })(); // You CAN create a closure with unsized arguments, // but you CANNOT call it. // This is an implementation detail and may be changed in the future. let f = |x: dyn Any| {}; f(*answer()); // ERROR } ``` ## By-value trait objects With this feature, you can have by-value `self` arguments without `Self: Sized` bounds. ```rust #![feature(unsized_fn_params)] trait Foo { fn foo(self) {} } impl Foo for T {} fn main() { let slice: Box<[i32]> = Box::new([1, 2, 3]); <[i32] as Foo>::foo(*slice); } ``` And `Foo` will also be object-safe. ```rust #![feature(unsized_fn_params)] trait Foo { fn foo(self) {} } impl Foo for T {} fn main () { let slice: Box = Box::new([1, 2, 3]); // doesn't compile yet ::foo(*slice); } ``` One of the objectives of this feature is to allow `Box`. ## Variable length arrays The RFC also describes an extension to the array literal syntax: `[e; dyn n]`. In the syntax, `n` isn't necessarily a constant expression. The array is dynamically allocated on the stack and has the type of `[T]`, instead of `[T; n]`. ```rust,ignore (not-yet-implemented) #![feature(unsized_locals)] fn mergesort(a: &mut [T]) { let mut tmp = [T; dyn a.len()]; // ... } fn main() { let mut a = [3, 1, 5, 6]; mergesort(&mut a); assert_eq!(a, [1, 3, 5, 6]); } ``` VLAs are not implemented yet. The syntax isn't final, either. We may need an alternative syntax for Rust 2015 because, in Rust 2015, expressions like `[e; dyn(1)]` would be ambiguous. One possible alternative proposed in the RFC is `[e; n]`: if `n` captures one or more local variables, then it is considered as `[e; dyn n]`. ## Advisory on stack usage It's advised not to casually use the `#![feature(unsized_locals)]` feature. Typical use-cases are: - When you need a by-value trait objects. - When you really need a fast allocation of small temporary arrays. Another pitfall is repetitive allocation and temporaries. Currently the compiler simply extends the stack frame every time it encounters an unsized assignment. So for example, the code ```rust #![feature(unsized_locals)] fn main() { let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]); let _x = {{{{{{{{{{*x}}}}}}}}}}; } ``` and the code ```rust #![feature(unsized_locals)] fn main() { for _ in 0..10 { let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]); let _x = *x; } } ``` will unnecessarily extend the stack frame. !!` unsized_tuple_coercion# `unsized_tuple_coercion` The tracking issue for this feature is: [#42877] [#42877]: https://github.com/rust-lang/rust/issues/42877 ------------------------ This is a part of [RFC0401]. According to the RFC, there should be an implementation like this: ```rust,ignore (partial-example) impl<..., T, U: ?Sized> Unsized<(..., U)> for (..., T) where T: Unsized {} ``` This implementation is currently gated behind `#[feature(unsized_tuple_coercion)]` to avoid insta-stability. Therefore you can use it like this: ```rust #![feature(unsized_tuple_coercion)] fn main() { let x : ([i32; 3], [i32; 3]) = ([1, 2, 3], [4, 5, 6]); let y : &([i32; 3], [i32]) = &x; assert_eq!(y.1[0], 4); } ``` [RFC0401]: https://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.md a update_panic_count# `update_panic_count` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ b   windows_c |# `windows_c` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ ||c windows_handle# `windows_handle` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ d   windows_net ~# `windows_net` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ ~~ e   windows_stdio  # `windows_stdio` This feature is internal to the Rust compiler and is not intended for general use. ------------------------ ̋ d      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcde͋͋f͋̋  ֤HΤɭ۽  ڨ C Nа(  ډ $" ͋ۂ ۂ ۂ ۂ  ۂ ۂ ۂ     т !ۂ !ۂ !܂        v “    ٞ            u                  U            Z                   u |    ӈ    ^  VŐ    |   ޚ      Ϣ   Ŧ  }  Ы   v v   y _ | ö \     Ŀ               ~                             _˃        w ]ŏ ِ   v   ˘   Ԝ ߝ        ^  ɬ  w }       ̹    ھ ~޿   V              |                             ^     ˃  y v     [ ؍             ١         Ѯ  y    ͸      _            R               X      ~   R   Ҁ     ԇ ۈ    ю   u w  z          צ y֧   ޫ Э zЮ  ұ ų  |    ݼ               w                  P                Vك†ڋw׌ԑNڢΨ^κջ}ؼz{| [v!ۂ  &[Lint{ label: "clippy::absurd_extreme_comparisons", description: r##"Checks for comparisons where one side of the relation is either the minimum or maximum value for its type and warns if it involves a case that is always true or always false. Only integer and boolean types are checked."##,}, Lint{ label: "clippy::almost_swapped", description: r##"Checks for `foo = bar; bar = foo` sequences."##,}, Lint{ label: "clippy::approx_constant", description: r##"Checks for floating point literals that approximate constants which are defined in [`std::f32::consts`](https://doc.rust-lang.org/stable/std/f32/consts/#constants) or [`std::f64::consts`](https://doc.rust-lang.org/stable/std/f64/consts/#constants), respectively, suggesting to use the predefined constant."##,}, Lint{ label: "clippy::as_conversions", description: r##"Checks for usage of `as` conversions. Note that this lint is specialized in linting *every single* use of `as` regardless of whether good alternatives exist or not. If you want more precise lints for `as`, please consider using these separate lints: `unnecessary_cast`, `cast_lossless/possible_truncation/possible_wrap/precision_loss/sign_loss`, `fn_to_numeric_cast(_with_truncation)`, `char_lit_as_u8`, `ref_to_mut` and `ptr_as_ptr`. There is a good explanation the reason why this lint should work in this way and how it is useful [in this issue](https://github.com/rust-lang/rust-clippy/issues/5122)."##,}, Lint{ label: "clippy::assertions_on_constants", description: r##"Checks for `assert!(true)` and `assert!(false)` calls."##,}, Lint{ label: "clippy::assign_op_pattern", description: r##"Checks for `a = a op b` or `a = b commutative_op a` patterns."##,}, Lint{ label: "clippy::assign_ops", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::async_yields_async", description: r##"Checks for async blocks that yield values of types that can themselves be awaited."##,}, Lint{ label: "clippy::await_holding_lock", description: r##"Checks for calls to await while holding a non-async-aware MutexGuard."##,}, Lint{ label: "clippy::await_holding_refcell_ref", description: r##"Checks for calls to await while holding a `RefCell` `Ref` or `RefMut`."##,}, Lint{ label: "clippy::bad_bit_mask", description: r##"Checks for incompatible bit masks in comparisons. The formula for detecting if an expression of the type `_ m c` (where `` is one of {`&`, `|`} and `` is one of {`!=`, `>=`, `>`, `!=`, `>=`, `>`}) can be determined from the following table: |Comparison |Bit Op|Example |is always|Formula | |------------|------|------------|---------|----------------------| |`==` or `!=`| `&` |`x & 2 == 3`|`false` |`c & m != c` | |`<` or `>=`| `&` |`x & 2 < 3` |`true` |`m < c` | |`>` or `<=`| `&` |`x & 1 > 1` |`false` |`m <= c` | |`==` or `!=`| `|` |`x | 1 == 0`|`false` |`c | m != c` | |`<` or `>=`| `|` |`x | 1 < 1` |`false` |`m >= c` | |`<=` or `>` | `|` |`x | 1 > 0` |`true` |`m > c` |"##,}, Lint{ label: "clippy::bind_instead_of_map", description: r##"Checks for usage of `_.and_then(|x| Some(y))`, `_.and_then(|x| Ok(y))` or `_.or_else(|x| Err(y))`."##,}, Lint{ label: "clippy::blacklisted_name", description: r##"Checks for usage of blacklisted names for variables, such as `foo`."##,}, Lint{ label: "clippy::blanket_clippy_restriction_lints", description: r##"Checks for `warn`/`deny`/`forbid` attributes targeting the whole clippy::restriction category."##,}, Lint{ label: "clippy::blocks_in_if_conditions", description: r##"Checks for `if` conditions that use blocks containing an expression, statements or conditions that use closures with blocks."##,}, Lint{ label: "clippy::bool_assert_comparison", description: r##"This lint warns about boolean comparisons in assert-like macros."##,}, Lint{ label: "clippy::bool_comparison", description: r##"Checks for expressions of the form `x == true`, `x != true` and order comparisons such as `x < true` (or vice versa) and suggest using the variable directly."##,}, Lint{ label: "clippy::borrow_interior_mutable_const", description: r##"Checks if `const` items which is interior mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.) has been borrowed directly."##,}, Lint{ label: "clippy::borrowed_box", description: r##"Checks for use of `&Box` anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,}, Lint{ label: "clippy::box_collection", description: r##"Checks for use of `Box` where T is a collection such as Vec anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,}, Lint{ label: "clippy::boxed_local", description: r##"Checks for usage of `Box` where an unboxed `T` would work fine."##,}, Lint{ label: "clippy::branches_sharing_code", description: r##"Checks if the `if` and `else` block contain shared code that can be moved out of the blocks."##,}, Lint{ label: "clippy::builtin_type_shadow", description: r##"Warns if a generic shadows a built-in type."##,}, Lint{ label: "clippy::bytes_nth", description: r##"Checks for the use of `.bytes().nth()`."##,}, Lint{ label: "clippy::cargo_common_metadata", description: r##"Checks to see if all common metadata is defined in `Cargo.toml`. See: https://rust-lang-nursery.github.io/api-guidelines/documentation.html#cargotoml-includes-all-common-metadata-c-metadata"##,}, Lint{ label: "clippy::case_sensitive_file_extension_comparisons", description: r##"Checks for calls to `ends_with` with possible file extensions and suggests to use a case-insensitive approach instead."##,}, Lint{ label: "clippy::cast_lossless", description: r##"Checks for casts between numerical types that may be replaced by safe conversion functions."##,}, Lint{ label: "clippy::cast_possible_truncation", description: r##"Checks for casts between numerical types that may truncate large values. This is expected behavior, so the cast is `Allow` by default."##,}, Lint{ label: "clippy::cast_possible_wrap", description: r##"Checks for casts from an unsigned type to a signed type of the same size. Performing such a cast is a 'no-op' for the compiler, i.e., nothing is changed at the bit level, and the binary representation of the value is reinterpreted. This can cause wrapping if the value is too big for the target signed type. However, the cast works as defined, so this lint is `Allow` by default."##,}, Lint{ label: "clippy::cast_precision_loss", description: r##"Checks for casts from any numerical to a float type where the receiving type cannot store all values from the original type without rounding errors. This possible rounding is to be expected, so this lint is `Allow` by default. Basically, this warns on casting any integer with 32 or more bits to `f32` or any 64-bit integer to `f64`."##,}, Lint{ label: "clippy::cast_ptr_alignment", description: r##"Checks for casts, using `as` or `pointer::cast`, from a less-strictly-aligned pointer to a more-strictly-aligned pointer"##,}, Lint{ label: "clippy::cast_ref_to_mut", description: r##"Checks for casts of `&T` to `&mut T` anywhere in the code."##,}, Lint{ label: "clippy::cast_sign_loss", description: r##"Checks for casts from a signed to an unsigned numerical type. In this case, negative values wrap around to large positive values, which can be quite surprising in practice. However, as the cast works as defined, this lint is `Allow` by default."##,}, Lint{ label: "clippy::char_lit_as_u8", description: r##"Checks for expressions where a character literal is cast to `u8` and suggests using a byte literal instead."##,}, Lint{ label: "clippy::chars_last_cmp", description: r##"Checks for usage of `_.chars().last()` or `_.chars().next_back()` on a `str` to check if it ends with a given char."##,}, Lint{ label: "clippy::chars_next_cmp", description: r##"Checks for usage of `.chars().next()` on a `str` to check if it starts with a given char."##,}, Lint{ label: "clippy::checked_conversions", description: r##"Checks for explicit bounds checking when casting."##,}, Lint{ label: "clippy::clone_double_ref", description: r##"Checks for usage of `.clone()` on an `&&T`."##,}, Lint{ label: "clippy::clone_on_copy", description: r##"Checks for usage of `.clone()` on a `Copy` type."##,}, Lint{ label: "clippy::clone_on_ref_ptr", description: r##"Checks for usage of `.clone()` on a ref-counted pointer, (`Rc`, `Arc`, `rc::Weak`, or `sync::Weak`), and suggests calling Clone via unified function syntax instead (e.g., `Rc::clone(foo)`)."##,}, Lint{ label: "clippy::cloned_instead_of_copied", description: r##"Checks for usages of `cloned()` on an `Iterator` or `Option` where `copied()` could be used instead."##,}, Lint{ label: "clippy::cmp_nan", description: r##"Checks for comparisons to NaN."##,}, Lint{ label: "clippy::cmp_null", description: r##"This lint checks for equality comparisons with `ptr::null`"##,}, Lint{ label: "clippy::cmp_owned", description: r##"Checks for conversions to owned values just for the sake of a comparison."##,}, Lint{ label: "clippy::cognitive_complexity", description: r##"Checks for methods with high cognitive complexity."##,}, Lint{ label: "clippy::collapsible_else_if", description: r##"Checks for collapsible `else { if ... }` expressions that can be collapsed to `else if ...`."##,}, Lint{ label: "clippy::collapsible_if", description: r##"Checks for nested `if` statements which can be collapsed by `&&`-combining their conditions."##,}, Lint{ label: "clippy::collapsible_match", description: r##"Finds nested `match` or `if let` expressions where the patterns may be collapsed together without adding any branches. Note that this lint is not intended to find _all_ cases where nested match patterns can be merged, but only cases where merging would most likely make the code more readable."##,}, Lint{ label: "clippy::comparison_chain", description: r##"Checks comparison chains written with `if` that can be rewritten with `match` and `cmp`."##,}, Lint{ label: "clippy::comparison_to_empty", description: r##"Checks for comparing to an empty slice such as `` or `[]`, and suggests using `.is_empty()` where applicable."##,}, Lint{ label: "clippy::copy_iterator", description: r##"Checks for types that implement `Copy` as well as `Iterator`."##,}, Lint{ label: "clippy::create_dir", description: r##"Checks usage of `std::fs::create_dir` and suggest using `std::fs::create_dir_all` instead."##,}, Lint{ label: "clippy::crosspointer_transmute", description: r##"Checks for transmutes between a type `T` and `*T`."##,}, Lint{ label: "clippy::dbg_macro", description: r##"Checks for usage of dbg!() macro."##,}, Lint{ label: "clippy::debug_assert_with_mut_call", description: r##"Checks for function/method calls with a mutable parameter in `debug_assert!`, `debug_assert_eq!` and `debug_assert_ne!` macros."##,}, Lint{ label: "clippy::decimal_literal_representation", description: r##"Warns if there is a better representation for a numeric literal."##,}, Lint{ label: "clippy::declare_interior_mutable_const", description: r##"Checks for declaration of `const` items which is interior mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.)."##,}, Lint{ label: "clippy::default_numeric_fallback", description: r##"Checks for usage of unconstrained numeric literals which may cause default numeric fallback in type inference. Default numeric fallback means that if numeric types have not yet been bound to concrete types at the end of type inference, then integer type is bound to `i32`, and similarly floating type is bound to `f64`. See [RFC0212](https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md) for more information about the fallback."##,}, Lint{ label: "clippy::default_trait_access", description: r##"Checks for literal calls to `Default::default()`."##,}, Lint{ label: "clippy::deprecated_cfg_attr", description: r##"Checks for `#[cfg_attr(rustfmt, rustfmt_skip)]` and suggests to replace it with `#[rustfmt::skip]`."##,}, Lint{ label: "clippy::deprecated_semver", description: r##"Checks for `#[deprecated]` annotations with a `since` field that is not a valid semantic version."##,}, Lint{ label: "clippy::deref_addrof", description: r##"Checks for usage of `*&` and `*&mut` in expressions."##,}, Lint{ label: "clippy::derivable_impls", description: r##"Detects manual `std::default::Default` implementations that are identical to a derived implementation."##,}, Lint{ label: "clippy::derive_hash_xor_eq", description: r##"Checks for deriving `Hash` but implementing `PartialEq` explicitly or vice versa."##,}, Lint{ label: "clippy::derive_ord_xor_partial_ord", description: r##"Checks for deriving `Ord` but implementing `PartialOrd` explicitly or vice versa."##,}, Lint{ label: "clippy::disallowed_methods", description: r##"Denies the configured methods and functions in clippy.toml"##,}, Lint{ label: "clippy::disallowed_script_idents", description: r##"Checks for usage of unicode scripts other than those explicitly allowed by the lint config. This lint doesn't take into account non-text scripts such as `Unknown` and `Linear_A`. It also ignores the `Common` script type. While configuring, be sure to use official script name [aliases] from [the list of supported scripts][supported_scripts]. See also: [`non_ascii_idents`]. [aliases]: http://www.unicode.org/reports/tr24/tr24-31.html#Script_Value_Aliases [supported_scripts]: https://www.unicode.org/iso15924/iso15924-codes.html"##,}, Lint{ label: "clippy::disallowed_types", description: r##"Denies the configured types in clippy.toml."##,}, Lint{ label: "clippy::diverging_sub_expression", description: r##"Checks for diverging calls that are not match arms or statements."##,}, Lint{ label: "clippy::doc_markdown", description: r##"Checks for the presence of `_`, `::` or camel-case words outside ticks in documentation."##,}, Lint{ label: "clippy::double_comparisons", description: r##"Checks for double comparisons that could be simplified to a single expression."##,}, Lint{ label: "clippy::double_must_use", description: r##"Checks for a `#[must_use]` attribute without further information on functions and methods that return a type already marked as `#[must_use]`."##,}, Lint{ label: "clippy::double_neg", description: r##"Detects expressions of the form `--x`."##,}, Lint{ label: "clippy::double_parens", description: r##"Checks for unnecessary double parentheses."##,}, Lint{ label: "clippy::drop_copy", description: r##"Checks for calls to `std::mem::drop` with a value that derives the Copy trait"##,}, Lint{ label: "clippy::drop_ref", description: r##"Checks for calls to `std::mem::drop` with a reference instead of an owned value."##,}, Lint{ label: "clippy::duplicate_underscore_argument", description: r##"Checks for function arguments having the similar names differing by an underscore."##,}, Lint{ label: "clippy::duration_subsec", description: r##"Checks for calculation of subsecond microseconds or milliseconds from other `Duration` methods."##,}, Lint{ label: "clippy::else_if_without_else", description: r##"Checks for usage of if expressions with an `else if` branch, but without a final `else` branch."##,}, Lint{ label: "clippy::empty_enum", description: r##"Checks for `enum`s with no variants. As of this writing, the `never_type` is still a nightly-only experimental API. Therefore, this lint is only triggered if the `never_type` is enabled."##,}, Lint{ label: "clippy::empty_line_after_outer_attr", description: r##"Checks for empty lines after outer attributes"##,}, Lint{ label: "clippy::empty_loop", description: r##"Checks for empty `loop` expressions."##,}, Lint{ label: "clippy::enum_clike_unportable_variant", description: r##"Checks for C-like enumerations that are `repr(isize/usize)` and have values that don't fit into an `i32`."##,}, Lint{ label: "clippy::enum_glob_use", description: r##"Checks for `use Enum::*`."##,}, Lint{ label: "clippy::enum_variant_names", description: r##"Detects enumeration variants that are prefixed or suffixed by the same characters."##,}, Lint{ label: "clippy::eq_op", description: r##"Checks for equal operands to comparison, logical and bitwise, difference and division binary operators (`==`, `>`, etc., `&&`, `||`, `&`, `|`, `^`, `-` and `/`)."##,}, Lint{ label: "clippy::equatable_if_let", description: r##"Checks for pattern matchings that can be expressed using equality."##,}, Lint{ label: "clippy::erasing_op", description: r##"Checks for erasing operations, e.g., `x * 0`."##,}, Lint{ label: "clippy::eval_order_dependence", description: r##"Checks for a read and a write to the same variable where whether the read occurs before or after the write depends on the evaluation order of sub-expressions."##,}, Lint{ label: "clippy::excessive_precision", description: r##"Checks for float literals with a precision greater than that supported by the underlying type."##,}, Lint{ label: "clippy::exhaustive_enums", description: r##"Warns on any exported `enum`s that are not tagged `#[non_exhaustive]`"##,}, Lint{ label: "clippy::exhaustive_structs", description: r##"Warns on any exported `structs`s that are not tagged `#[non_exhaustive]`"##,}, Lint{ label: "clippy::exit", description: r##"`exit()` terminates the program and doesn't provide a stack trace."##,}, Lint{ label: "clippy::expect_fun_call", description: r##"Checks for calls to `.expect(&format!(...))`, `.expect(foo(..))`, etc., and suggests to use `unwrap_or_else` instead"##,}, Lint{ label: "clippy::expect_used", description: r##"Checks for `.expect()` calls on `Option`s and `Result`s."##,}, Lint{ label: "clippy::expl_impl_clone_on_copy", description: r##"Checks for explicit `Clone` implementations for `Copy` types."##,}, Lint{ label: "clippy::explicit_counter_loop", description: r##"Checks `for` loops over slices with an explicit counter and suggests the use of `.enumerate()`."##,}, Lint{ label: "clippy::explicit_deref_methods", description: r##"Checks for explicit `deref()` or `deref_mut()` method calls."##,}, Lint{ label: "clippy::explicit_into_iter_loop", description: r##"Checks for loops on `y.into_iter()` where `y` will do, and suggests the latter."##,}, Lint{ label: "clippy::explicit_iter_loop", description: r##"Checks for loops on `x.iter()` where `&x` will do, and suggests the latter."##,}, Lint{ label: "clippy::explicit_write", description: r##"Checks for usage of `write!()` / `writeln()!` which can be replaced with `(e)print!()` / `(e)println!()`"##,}, Lint{ label: "clippy::extend_from_slice", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::extend_with_drain", description: r##"Checks for occurrences where one vector gets extended instead of append"##,}, Lint{ label: "clippy::extra_unused_lifetimes", description: r##"Checks for lifetimes in generics that are never used anywhere else."##,}, Lint{ label: "clippy::fallible_impl_from", description: r##"Checks for impls of `From<..>` that contain `panic!()` or `unwrap()`"##,}, Lint{ label: "clippy::field_reassign_with_default", description: r##"Checks for immediate reassignment of fields initialized with Default::default()."##,}, Lint{ label: "clippy::filetype_is_file", description: r##"Checks for `FileType::is_file()`."##,}, Lint{ label: "clippy::filter_map", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::filter_map_identity", description: r##"Checks for usage of `filter_map(|x| x)`."##,}, Lint{ label: "clippy::filter_map_next", description: r##"Checks for usage of `_.filter_map(_).next()`."##,}, Lint{ label: "clippy::filter_next", description: r##"Checks for usage of `_.filter(_).next()`."##,}, Lint{ label: "clippy::find_map", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::flat_map_identity", description: r##"Checks for usage of `flat_map(|x| x)`."##,}, Lint{ label: "clippy::flat_map_option", description: r##"Checks for usages of `Iterator::flat_map()` where `filter_map()` could be used instead."##,}, Lint{ label: "clippy::float_arithmetic", description: r##"Checks for float arithmetic."##,}, Lint{ label: "clippy::float_cmp", description: r##"Checks for (in-)equality comparisons on floating-point values (apart from zero), except in functions called `*eq*` (which probably implement equality for a type involving floats)."##,}, Lint{ label: "clippy::float_cmp_const", description: r##"Checks for (in-)equality comparisons on floating-point value and constant, except in functions called `*eq*` (which probably implement equality for a type involving floats)."##,}, Lint{ label: "clippy::float_equality_without_abs", description: r##"Checks for statements of the form `(a - b) < f32::EPSILON` or `(a - b) < f64::EPSILON`. Notes the missing `.abs()`."##,}, Lint{ label: "clippy::fn_address_comparisons", description: r##"Checks for comparisons with an address of a function item."##,}, Lint{ label: "clippy::fn_params_excessive_bools", description: r##"Checks for excessive use of bools in function definitions."##,}, Lint{ label: "clippy::fn_to_numeric_cast", description: r##"Checks for casts of function pointers to something other than usize"##,}, Lint{ label: "clippy::fn_to_numeric_cast_any", description: r##"Checks for casts of a function pointer to any integer type."##,}, Lint{ label: "clippy::fn_to_numeric_cast_with_truncation", description: r##"Checks for casts of a function pointer to a numeric type not wide enough to store address."##,}, Lint{ label: "clippy::for_kv_map", description: r##"Checks for iterating a map (`HashMap` or `BTreeMap`) and ignoring either the keys or values."##,}, Lint{ label: "clippy::for_loops_over_fallibles", description: r##"Checks for `for` loops over `Option` or `Result` values."##,}, Lint{ label: "clippy::forget_copy", description: r##"Checks for calls to `std::mem::forget` with a value that derives the Copy trait"##,}, Lint{ label: "clippy::forget_ref", description: r##"Checks for calls to `std::mem::forget` with a reference instead of an owned value."##,}, Lint{ label: "clippy::format_in_format_args", description: r##"Detects `format!` within the arguments of another macro that does formatting such as `format!` itself, `write!` or `println!`. Suggests inlining the `format!` call."##,}, Lint{ label: "clippy::from_iter_instead_of_collect", description: r##"Checks for `from_iter()` function calls on types that implement the `FromIterator` trait."##,}, Lint{ label: "clippy::from_over_into", description: r##"Searches for implementations of the `Into<..>` trait and suggests to implement `From<..>` instead."##,}, Lint{ label: "clippy::from_str_radix_10", description: r##"Checks for function invocations of the form `primitive::from_str_radix(s, 10)`"##,}, Lint{ label: "clippy::future_not_send", description: r##"This lint requires Future implementations returned from functions and methods to implement the `Send` marker trait. It is mostly used by library authors (public and internal) that target an audience where multithreaded executors are likely to be used for running these Futures."##,}, Lint{ label: "clippy::get_last_with_len", description: r##"Checks for using `x.get(x.len() - 1)` instead of `x.last()`."##,}, Lint{ label: "clippy::get_unwrap", description: r##"Checks for use of `.get().unwrap()` (or `.get_mut().unwrap`) on a standard library type which implements `Index`"##,}, Lint{ label: "clippy::identity_op", description: r##"Checks for identity operations, e.g., `x + 0`."##,}, Lint{ label: "clippy::if_let_mutex", description: r##"Checks for `Mutex::lock` calls in `if let` expression with lock calls in any of the else blocks."##,}, Lint{ label: "clippy::if_let_redundant_pattern_matching", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::if_not_else", description: r##"Checks for usage of `!` or `!=` in an if condition with an else branch."##,}, Lint{ label: "clippy::if_same_then_else", description: r##"Checks for `if/else` with the same body as the *then* part and the *else* part."##,}, Lint{ label: "clippy::if_then_some_else_none", description: r##"Checks for if-else that could be written to `bool::then`."##,}, Lint{ label: "clippy::ifs_same_cond", description: r##"Checks for consecutive `if`s with the same condition."##,}, Lint{ label: "clippy::implicit_clone", description: r##"Checks for the usage of `_.to_owned()`, `vec.to_vec()`, or similar when calling `_.clone()` would be clearer."##,}, Lint{ label: "clippy::implicit_hasher", description: r##"Checks for public `impl` or `fn` missing generalization over different hashers and implicitly defaulting to the default hashing algorithm (`SipHash`)."##,}, Lint{ label: "clippy::implicit_return", description: r##"Checks for missing return statements at the end of a block."##,}, Lint{ label: "clippy::implicit_saturating_sub", description: r##"Checks for implicit saturating subtraction."##,}, Lint{ label: "clippy::imprecise_flops", description: r##"Looks for floating-point expressions that can be expressed using built-in methods to improve accuracy at the cost of performance."##,}, Lint{ label: "clippy::inconsistent_digit_grouping", description: r##"Warns if an integral or floating-point constant is grouped inconsistently with underscores."##,}, Lint{ label: "clippy::inconsistent_struct_constructor", description: r##"Checks for struct constructors where all fields are shorthand and the order of the field init shorthand in the constructor is inconsistent with the order in the struct definition."##,}, Lint{ label: "clippy::index_refutable_slice", description: r##"The lint checks for slice bindings in patterns that are only used to access individual slice values."##,}, Lint{ label: "clippy::indexing_slicing", description: r##"Checks for usage of indexing or slicing. Arrays are special cases, this lint does report on arrays if we can tell that slicing operations are in bounds and does not lint on constant `usize` indexing on arrays because that is handled by rustc's `const_err` lint."##,}, Lint{ label: "clippy::ineffective_bit_mask", description: r##"Checks for bit masks in comparisons which can be removed without changing the outcome. The basic structure can be seen in the following table: |Comparison| Bit Op |Example |equals | |----------|---------|-----------|-------| |`>` / `<=`|`|` / `^`|`x | 2 > 3`|`x > 3`| |`<` / `>=`|`|` / `^`|`x ^ 1 < 4`|`x < 4`|"##,}, Lint{ label: "clippy::inefficient_to_string", description: r##"Checks for usage of `.to_string()` on an `&&T` where `T` implements `ToString` directly (like `&&str` or `&&String`)."##,}, Lint{ label: "clippy::infallible_destructuring_match", description: r##"Checks for matches being used to destructure a single-variant enum or tuple struct where a `let` will suffice."##,}, Lint{ label: "clippy::infinite_iter", description: r##"Checks for iteration that is guaranteed to be infinite."##,}, Lint{ label: "clippy::inherent_to_string", description: r##"Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`."##,}, Lint{ label: "clippy::inherent_to_string_shadow_display", description: r##"Checks for the definition of inherent methods with a signature of `to_string(&self) -> String` and if the type implementing this method also implements the `Display` trait."##,}, Lint{ label: "clippy::inline_always", description: r##"Checks for items annotated with `#[inline(always)]`, unless the annotated function is empty or simply panics."##,}, Lint{ label: "clippy::inline_asm_x86_att_syntax", description: r##"Checks for usage of AT&T x86 assembly syntax."##,}, Lint{ label: "clippy::inline_asm_x86_intel_syntax", description: r##"Checks for usage of Intel x86 assembly syntax."##,}, Lint{ label: "clippy::inline_fn_without_body", description: r##"Checks for `#[inline]` on trait methods without bodies"##,}, Lint{ label: "clippy::inspect_for_each", description: r##"Checks for usage of `inspect().for_each()`."##,}, Lint{ label: "clippy::int_plus_one", description: r##"Checks for usage of `x >= y + 1` or `x - 1 >= y` (and `<=`) in a block"##,}, Lint{ label: "clippy::integer_arithmetic", description: r##"Checks for integer arithmetic operations which could overflow or panic. Specifically, checks for any operators (`+`, `-`, `*`, `<<`, etc) which are capable of overflowing according to the [Rust Reference](https://doc.rust-lang.org/reference/expressions/operator-expr.html#overflow), or which can panic (`/`, `%`). No bounds analysis or sophisticated reasoning is attempted."##,}, Lint{ label: "clippy::integer_division", description: r##"Checks for division of integers"##,}, Lint{ label: "clippy::into_iter_on_ref", description: r##"Checks for `into_iter` calls on references which should be replaced by `iter` or `iter_mut`."##,}, Lint{ label: "clippy::invalid_null_ptr_usage", description: r##"This lint checks for invalid usages of `ptr::null`."##,}, Lint{ label: "clippy::invalid_regex", description: r##"Checks [regex](https://crates.io/crates/regex) creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`) for correct regex syntax."##,}, Lint{ label: "clippy::invalid_upcast_comparisons", description: r##"Checks for comparisons where the relation is always either true or false, but where one side has been upcast so that the comparison is necessary. Only integer types are checked."##,}, Lint{ label: "clippy::invisible_characters", description: r##"Checks for invisible Unicode characters in the code."##,}, Lint{ label: "clippy::items_after_statements", description: r##"Checks for items declared after some statement in a block."##,}, Lint{ label: "clippy::iter_cloned_collect", description: r##"Checks for the use of `.cloned().collect()` on slice to create a `Vec`."##,}, Lint{ label: "clippy::iter_count", description: r##"Checks for the use of `.iter().count()`."##,}, Lint{ label: "clippy::iter_next_loop", description: r##"Checks for loops on `x.next()`."##,}, Lint{ label: "clippy::iter_next_slice", description: r##"Checks for usage of `iter().next()` on a Slice or an Array"##,}, Lint{ label: "clippy::iter_not_returning_iterator", description: r##"Detects methods named `iter` or `iter_mut` that do not have a return type that implements `Iterator`."##,}, Lint{ label: "clippy::iter_nth", description: r##"Checks for use of `.iter().nth()` (and the related `.iter_mut().nth()`) on standard library types with *O*(1) element access."##,}, Lint{ label: "clippy::iter_nth_zero", description: r##"Checks for the use of `iter.nth(0)`."##,}, Lint{ label: "clippy::iter_skip_next", description: r##"Checks for use of `.skip(x).next()` on iterators."##,}, Lint{ label: "clippy::iterator_step_by_zero", description: r##"Checks for calling `.step_by(0)` on iterators which panics."##,}, Lint{ label: "clippy::just_underscores_and_digits", description: r##"Checks if you have variables whose name consists of just underscores and digits."##,}, Lint{ label: "clippy::large_const_arrays", description: r##"Checks for large `const` arrays that should be defined as `static` instead."##,}, Lint{ label: "clippy::large_digit_groups", description: r##"Warns if the digits of an integral or floating-point constant are grouped into groups that are too large."##,}, Lint{ label: "clippy::large_enum_variant", description: r##"Checks for large size differences between variants on `enum`s."##,}, Lint{ label: "clippy::large_stack_arrays", description: r##"Checks for local arrays that may be too large."##,}, Lint{ label: "clippy::large_types_passed_by_value", description: r##"Checks for functions taking arguments by value, where the argument type is `Copy` and large enough to be worth considering passing by reference. Does not trigger if the function is being exported, because that might induce API breakage, if the parameter is declared as mutable, or if the argument is a `self`."##,}, Lint{ label: "clippy::len_without_is_empty", description: r##"Checks for items that implement `.len()` but not `.is_empty()`."##,}, Lint{ label: "clippy::len_zero", description: r##"Checks for getting the length of something via `.len()` just to compare to zero, and suggests using `.is_empty()` where applicable."##,}, Lint{ label: "clippy::let_and_return", description: r##"Checks for `let`-bindings, which are subsequently returned."##,}, Lint{ label: "clippy::let_underscore_drop", description: r##"Checks for `let _ = ` where expr has a type that implements `Drop`"##,}, Lint{ label: "clippy::let_underscore_lock", description: r##"Checks for `let _ = sync_lock`. This supports `mutex` and `rwlock` in `std::sync` and `parking_lot`."##,}, Lint{ label: "clippy::let_underscore_must_use", description: r##"Checks for `let _ = ` where expr is `#[must_use]`"##,}, Lint{ label: "clippy::let_unit_value", description: r##"Checks for binding a unit value."##,}, Lint{ label: "clippy::linkedlist", description: r##"Checks for usage of any `LinkedList`, suggesting to use a `Vec` or a `VecDeque` (formerly called `RingBuf`)."##,}, Lint{ label: "clippy::logic_bug", description: r##"Checks for boolean expressions that contain terminals that can be eliminated."##,}, Lint{ label: "clippy::lossy_float_literal", description: r##"Checks for whole number float literals that cannot be represented as the underlying type without loss."##,}, Lint{ label: "clippy::macro_use_imports", description: r##"Checks for `#[macro_use] use...`."##,}, Lint{ label: "clippy::main_recursion", description: r##"Checks for recursion using the entrypoint."##,}, Lint{ label: "clippy::manual_assert", description: r##"Detects `if`-then-`panic!` that can be replaced with `assert!`."##,}, Lint{ label: "clippy::manual_async_fn", description: r##"It checks for manual implementations of `async` functions."##,}, Lint{ label: "clippy::manual_filter_map", description: r##"Checks for usage of `_.filter(_).map(_)` that can be written more simply as `filter_map(_)`."##,}, Lint{ label: "clippy::manual_find_map", description: r##"Checks for usage of `_.find(_).map(_)` that can be written more simply as `find_map(_)`."##,}, Lint{ label: "clippy::manual_flatten", description: r##"Check for unnecessary `if let` usage in a for loop where only the `Some` or `Ok` variant of the iterator element is used."##,}, Lint{ label: "clippy::manual_map", description: r##"Checks for usages of `match` which could be implemented using `map`"##,}, Lint{ label: "clippy::manual_memcpy", description: r##"Checks for for-loops that manually copy items between slices that could be optimized by having a memcpy."##,}, Lint{ label: "clippy::manual_non_exhaustive", description: r##"Checks for manual implementations of the non-exhaustive pattern."##,}, Lint{ label: "clippy::manual_ok_or", description: r##"Finds patterns that reimplement `Option::ok_or`."##,}, Lint{ label: "clippy::manual_range_contains", description: r##"Checks for expressions like `x >= 3 && x < 8` that could be more readably expressed as `(3..8).contains(x)`."##,}, Lint{ label: "clippy::manual_saturating_arithmetic", description: r##"Checks for `.checked_add/sub(x).unwrap_or(MAX/MIN)`."##,}, Lint{ label: "clippy::manual_split_once", description: r##"Checks for usages of `str::splitn(2, _)`"##,}, Lint{ label: "clippy::manual_str_repeat", description: r##"Checks for manual implementations of `str::repeat`"##,}, Lint{ label: "clippy::manual_strip", description: r##"Suggests using `strip_{prefix,suffix}` over `str::{starts,ends}_with` and slicing using the pattern's length."##,}, Lint{ label: "clippy::manual_swap", description: r##"Checks for manual swapping."##,}, Lint{ label: "clippy::manual_unwrap_or", description: r##"Finds patterns that reimplement `Option::unwrap_or` or `Result::unwrap_or`."##,}, Lint{ label: "clippy::many_single_char_names", description: r##"Checks for too many variables whose name consists of a single character."##,}, Lint{ label: "clippy::map_clone", description: r##"Checks for usage of `map(|x| x.clone())` or dereferencing closures for `Copy` types, on `Iterator` or `Option`, and suggests `cloned()` or `copied()` instead"##,}, Lint{ label: "clippy::map_collect_result_unit", description: r##"Checks for usage of `_.map(_).collect::()`."##,}, Lint{ label: "clippy::map_entry", description: r##"Checks for uses of `contains_key` + `insert` on `HashMap` or `BTreeMap`."##,}, Lint{ label: "clippy::map_err_ignore", description: r##"Checks for instances of `map_err(|_| Some::Enum)`"##,}, Lint{ label: "clippy::map_flatten", description: r##"Checks for usage of `_.map(_).flatten(_)` on `Iterator` and `Option`"##,}, Lint{ label: "clippy::map_identity", description: r##"Checks for instances of `map(f)` where `f` is the identity function."##,}, Lint{ label: "clippy::map_unwrap_or", description: r##"Checks for usage of `option.map(_).unwrap_or(_)` or `option.map(_).unwrap_or_else(_)` or `result.map(_).unwrap_or_else(_)`."##,}, Lint{ label: "clippy::match_as_ref", description: r##"Checks for match which is used to add a reference to an `Option` value."##,}, Lint{ label: "clippy::match_bool", description: r##"Checks for matches where match expression is a `bool`. It suggests to replace the expression with an `if...else` block."##,}, Lint{ label: "clippy::match_like_matches_macro", description: r##"Checks for `match` or `if let` expressions producing a `bool` that could be written using `matches!`"##,}, Lint{ label: "clippy::match_on_vec_items", description: r##"Checks for `match vec[idx]` or `match vec[n..m]`."##,}, Lint{ label: "clippy::match_overlapping_arm", description: r##"Checks for overlapping match arms."##,}, Lint{ label: "clippy::match_ref_pats", description: r##"Checks for matches where all arms match a reference, suggesting to remove the reference and deref the matched expression instead. It also checks for `if let &foo = bar` blocks."##,}, Lint{ label: "clippy::match_result_ok", description: r##"Checks for unnecessary `ok()` in `while let`."##,}, Lint{ label: "clippy::match_same_arms", description: r##"Checks for `match` with identical arm bodies."##,}, Lint{ label: "clippy::match_single_binding", description: r##"Checks for useless match that binds to only one value."##,}, Lint{ label: "clippy::match_str_case_mismatch", description: r##"Checks for `match` expressions modifying the case of a string with non-compliant arms"##,}, Lint{ label: "clippy::match_wild_err_arm", description: r##"Checks for arm which matches all errors with `Err(_)` and take drastic actions like `panic!`."##,}, Lint{ label: "clippy::match_wildcard_for_single_variants", description: r##"Checks for wildcard enum matches for a single variant."##,}, Lint{ label: "clippy::maybe_infinite_iter", description: r##"Checks for iteration that may be infinite."##,}, Lint{ label: "clippy::mem_forget", description: r##"Checks for usage of `std::mem::forget(t)` where `t` is `Drop`."##,}, Lint{ label: "clippy::mem_replace_option_with_none", description: r##"Checks for `mem::replace()` on an `Option` with `None`."##,}, Lint{ label: "clippy::mem_replace_with_default", description: r##"Checks for `std::mem::replace` on a value of type `T` with `T::default()`."##,}, Lint{ label: "clippy::mem_replace_with_uninit", description: r##"Checks for `mem::replace(&mut _, mem::uninitialized())` and `mem::replace(&mut _, mem::zeroed())`."##,}, Lint{ label: "clippy::min_max", description: r##"Checks for expressions where `std::cmp::min` and `max` are used to clamp values, but switched so that the result is constant."##,}, Lint{ label: "clippy::misaligned_transmute", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::mismatched_target_os", description: r##"Checks for cfg attributes having operating systems used in target family position."##,}, Lint{ label: "clippy::misrefactored_assign_op", description: r##"Checks for `a op= a op b` or `a op= b op a` patterns."##,}, Lint{ label: "clippy::missing_const_for_fn", description: r##"Suggests the use of `const` in functions and methods where possible."##,}, Lint{ label: "clippy::missing_docs_in_private_items", description: r##"Warns if there is missing doc for any documentable item (public or private)."##,}, Lint{ label: "clippy::missing_enforced_import_renames", description: r##"Checks for imports that do not rename the item as specified in the `enforce-import-renames` config option."##,}, Lint{ label: "clippy::missing_errors_doc", description: r##"Checks the doc comments of publicly visible functions that return a `Result` type and warns if there is no `# Errors` section."##,}, Lint{ label: "clippy::missing_inline_in_public_items", description: r##"It lints if an exported function, method, trait method with default impl, or trait method impl is not `#[inline]`."##,}, Lint{ label: "clippy::missing_panics_doc", description: r##"Checks the doc comments of publicly visible functions that may panic and warns if there is no `# Panics` section."##,}, Lint{ label: "clippy::missing_safety_doc", description: r##"Checks for the doc comments of publicly visible unsafe functions and warns if there is no `# Safety` section."##,}, Lint{ label: "clippy::mistyped_literal_suffixes", description: r##"Warns for mistyped suffix in literals"##,}, Lint{ label: "clippy::mixed_case_hex_literals", description: r##"Warns on hexadecimal literals with mixed-case letter digits."##,}, Lint{ label: "clippy::mod_module_files", description: r##"Checks that module layout uses only self named module files, bans mod.rs files."##,}, Lint{ label: "clippy::module_inception", description: r##"Checks for modules that have the same name as their parent module"##,}, Lint{ label: "clippy::module_name_repetitions", description: r##"Detects type names that are prefixed or suffixed by the containing module's name."##,}, Lint{ label: "clippy::modulo_arithmetic", description: r##"Checks for modulo arithmetic."##,}, Lint{ label: "clippy::modulo_one", description: r##"Checks for getting the remainder of a division by one or minus one."##,}, Lint{ label: "clippy::multiple_crate_versions", description: r##"Checks to see if multiple versions of a crate are being used."##,}, Lint{ label: "clippy::multiple_inherent_impl", description: r##"Checks for multiple inherent implementations of a struct"##,}, Lint{ label: "clippy::must_use_candidate", description: r##"Checks for public functions that have no `#[must_use]` attribute, but return something not already marked must-use, have no mutable arg and mutate no statics."##,}, Lint{ label: "clippy::must_use_unit", description: r##"Checks for a `#[must_use]` attribute on unit-returning functions and methods."##,}, Lint{ label: "clippy::mut_from_ref", description: r##"This lint checks for functions that take immutable references and return mutable ones."##,}, Lint{ label: "clippy::mut_mut", description: r##"Checks for instances of `mut mut` references."##,}, Lint{ label: "clippy::mut_mutex_lock", description: r##"Checks for `&mut Mutex::lock` calls"##,}, Lint{ label: "clippy::mut_range_bound", description: r##"Checks for loops which have a range bound that is a mutable variable"##,}, Lint{ label: "clippy::mutable_key_type", description: r##"Checks for sets/maps with mutable key types."##,}, Lint{ label: "clippy::mutex_atomic", description: r##"Checks for usages of `Mutex` where an atomic will do."##,}, Lint{ label: "clippy::mutex_integer", description: r##"Checks for usages of `Mutex` where `X` is an integral type."##,}, Lint{ label: "clippy::naive_bytecount", description: r##"Checks for naive byte counts"##,}, Lint{ label: "clippy::needless_arbitrary_self_type", description: r##"The lint checks for `self` in fn parameters that specify the `Self`-type explicitly"##,}, Lint{ label: "clippy::needless_bitwise_bool", description: r##"Checks for uses of bitwise and/or operators between booleans, where performance may be improved by using a lazy and."##,}, Lint{ label: "clippy::needless_bool", description: r##"Checks for expressions of the form `if c { true } else { false }` (or vice versa) and suggests using the condition directly."##,}, Lint{ label: "clippy::needless_borrow", description: r##"Checks for address of operations (`&`) that are going to be dereferenced immediately by the compiler."##,}, Lint{ label: "clippy::needless_borrowed_reference", description: r##"Checks for bindings that destructure a reference and borrow the inner value with `&ref`."##,}, Lint{ label: "clippy::needless_collect", description: r##"Checks for functions collecting an iterator when collect is not needed."##,}, Lint{ label: "clippy::needless_continue", description: r##"The lint checks for `if`-statements appearing in loops that contain a `continue` statement in either their main blocks or their `else`-blocks, when omitting the `else`-block possibly with some rearrangement of code can make the code easier to understand."##,}, Lint{ label: "clippy::needless_doctest_main", description: r##"Checks for `fn main() { .. }` in doctests"##,}, Lint{ label: "clippy::needless_for_each", description: r##"Checks for usage of `for_each` that would be more simply written as a `for` loop."##,}, Lint{ label: "clippy::needless_late_init", description: r##"Checks for late initializations that can be replaced by a `let` statement with an initializer."##,}, Lint{ label: "clippy::needless_lifetimes", description: r##"Checks for lifetime annotations which can be removed by relying on lifetime elision."##,}, Lint{ label: "clippy::needless_option_as_deref", description: r##"Checks for no-op uses of Option::{as_deref,as_deref_mut}, for example, `Option<&T>::as_deref()` returns the same type."##,}, Lint{ label: "clippy::needless_pass_by_value", description: r##"Checks for functions taking arguments by value, but not consuming them in its body."##,}, Lint{ label: "clippy::needless_question_mark", description: r##"Suggests alternatives for useless applications of `?` in terminating expressions"##,}, Lint{ label: "clippy::needless_range_loop", description: r##"Checks for looping over the range of `0..len` of some collection just to get the values by index."##,}, Lint{ label: "clippy::needless_return", description: r##"Checks for return statements at the end of a block."##,}, Lint{ label: "clippy::needless_splitn", description: r##"Checks for usages of `str::splitn` (or `str::rsplitn`) where using `str::split` would be the same."##,}, Lint{ label: "clippy::needless_update", description: r##"Checks for needlessly including a base struct on update when all fields are changed anyway. This lint is not applied to structs marked with [non_exhaustive](https://doc.rust-lang.org/reference/attributes/type_system.html)."##,}, Lint{ label: "clippy::neg_cmp_op_on_partial_ord", description: r##"Checks for the usage of negated comparison operators on types which only implement `PartialOrd` (e.g., `f64`)."##,}, Lint{ label: "clippy::neg_multiply", description: r##"Checks for multiplication by -1 as a form of negation."##,}, Lint{ label: "clippy::negative_feature_names", description: r##"Checks for negative feature names with prefix `no-` or `not-`"##,}, Lint{ label: "clippy::never_loop", description: r##"Checks for loops that will always `break`, `return` or `continue` an outer loop."##,}, Lint{ label: "clippy::new_ret_no_self", description: r##"Checks for `new` not returning a type that contains `Self`."##,}, Lint{ label: "clippy::new_without_default", description: r##"Checks for types with a `fn new() -> Self` method and no implementation of [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html)."##,}, Lint{ label: "clippy::no_effect", description: r##"Checks for statements which have no effect."##,}, Lint{ label: "clippy::no_effect_underscore_binding", description: r##"Checks for binding to underscore prefixed variable without side-effects."##,}, Lint{ label: "clippy::non_ascii_literal", description: r##"Checks for non-ASCII characters in string and char literals."##,}, Lint{ label: "clippy::non_octal_unix_permissions", description: r##"Checks for non-octal values used to set Unix file permissions."##,}, Lint{ label: "clippy::non_send_fields_in_send_ty", description: r##"This lint warns about a `Send` implementation for a type that contains fields that are not safe to be sent across threads. It tries to detect fields that can cause a soundness issue when sent to another thread (e.g., `Rc`) while allowing `!Send` fields that are expected to exist in a `Send` type, such as raw pointers."##,}, Lint{ label: "clippy::nonminimal_bool", description: r##"Checks for boolean expressions that can be written more concisely."##,}, Lint{ label: "clippy::nonsensical_open_options", description: r##"Checks for duplicate open options as well as combinations that make no sense."##,}, Lint{ label: "clippy::nonstandard_macro_braces", description: r##"Checks that common macros are used with consistent bracing."##,}, Lint{ label: "clippy::not_unsafe_ptr_arg_deref", description: r##"Checks for public functions that dereference raw pointer arguments but are not marked `unsafe`."##,}, Lint{ label: "clippy::octal_escapes", description: r##"Checks for `\\0` escapes in string and byte literals that look like octal character escapes in C."##,}, Lint{ label: "clippy::ok_expect", description: r##"Checks for usage of `ok().expect(..)`."##,}, Lint{ label: "clippy::op_ref", description: r##"Checks for arguments to `==` which have their address taken to satisfy a bound and suggests to dereference the other argument instead"##,}, Lint{ label: "clippy::option_as_ref_deref", description: r##"Checks for usage of `_.as_ref().map(Deref::deref)` or it's aliases (such as String::as_str)."##,}, Lint{ label: "clippy::option_env_unwrap", description: r##"Checks for usage of `option_env!(...).unwrap()` and suggests usage of the `env!` macro."##,}, Lint{ label: "clippy::option_filter_map", description: r##"Checks for indirect collection of populated `Option`"##,}, Lint{ label: "clippy::option_if_let_else", description: r##"Lints usage of `if let Some(v) = ... { y } else { x }` which is more idiomatically done with `Option::map_or` (if the else bit is a pure expression) or `Option::map_or_else` (if the else bit is an impure expression)."##,}, Lint{ label: "clippy::option_map_or_none", description: r##"Checks for usage of `_.map_or(None, _)`."##,}, Lint{ label: "clippy::option_map_unit_fn", description: r##"Checks for usage of `option.map(f)` where f is a function or closure that returns the unit type `()`."##,}, Lint{ label: "clippy::option_option", description: r##"Checks for use of `Option>` in function signatures and type definitions"##,}, Lint{ label: "clippy::or_fun_call", description: r##"Checks for calls to `.or(foo(..))`, `.unwrap_or(foo(..))`, etc., and suggests to use `or_else`, `unwrap_or_else`, etc., or `unwrap_or_default` instead."##,}, Lint{ label: "clippy::out_of_bounds_indexing", description: r##"Checks for out of bounds array indexing with a constant index."##,}, Lint{ label: "clippy::overflow_check_conditional", description: r##"Detects classic underflow/overflow checks."##,}, Lint{ label: "clippy::panic", description: r##"Checks for usage of `panic!`."##,}, Lint{ label: "clippy::panic_in_result_fn", description: r##"Checks for usage of `panic!`, `unimplemented!`, `todo!`, `unreachable!` or assertions in a function of type result."##,}, Lint{ label: "clippy::panicking_unwrap", description: r##"Checks for calls of `unwrap[_err]()` that will always fail."##,}, Lint{ label: "clippy::partialeq_ne_impl", description: r##"Checks for manual re-implementations of `PartialEq::ne`."##,}, Lint{ label: "clippy::path_buf_push_overwrite", description: r##"* Checks for [push](https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.push) calls on `PathBuf` that can cause overwrites."##,}, Lint{ label: "clippy::pattern_type_mismatch", description: r##"Checks for patterns that aren't exact representations of the types they are applied to. To satisfy this lint, you will have to adjust either the expression that is matched against or the pattern itself, as well as the bindings that are introduced by the adjusted patterns. For matching you will have to either dereference the expression with the `*` operator, or amend the patterns to explicitly match against `&` or `&mut ` depending on the reference mutability. For the bindings you need to use the inverse. You can leave them as plain bindings if you wish for the value to be copied, but you must use `ref mut ` or `ref ` to construct a reference into the matched structure. If you are looking for a way to learn about ownership semantics in more detail, it is recommended to look at IDE options available to you to highlight types, lifetimes and reference semantics in your code. The available tooling would expose these things in a general way even outside of the various pattern matching mechanics. Of course this lint can still be used to highlight areas of interest and ensure a good understanding of ownership semantics."##,}, Lint{ label: "clippy::possible_missing_comma", description: r##"Checks for possible missing comma in an array. It lints if an array element is a binary operator expression and it lies on two lines."##,}, Lint{ label: "clippy::precedence", description: r##"Checks for operations where precedence may be unclear and suggests to add parentheses. Currently it catches the following: * mixed usage of arithmetic and bit shifting/combining operators without parentheses * a negative numeric literal (which is really a unary `-` followed by a numeric literal) followed by a method call"##,}, Lint{ label: "clippy::print_literal", description: r##"This lint warns about the use of literals as `print!`/`println!` args."##,}, Lint{ label: "clippy::print_stderr", description: r##"Checks for printing on *stderr*. The purpose of this lint is to catch debugging remnants."##,}, Lint{ label: "clippy::print_stdout", description: r##"Checks for printing on *stdout*. The purpose of this lint is to catch debugging remnants."##,}, Lint{ label: "clippy::print_with_newline", description: r##"This lint warns when you use `print!()` with a format string that ends in a newline."##,}, Lint{ label: "clippy::println_empty_string", description: r##"This lint warns when you use `println!()` to print a newline."##,}, Lint{ label: "clippy::ptr_arg", description: r##"This lint checks for function arguments of type `&String` or `&Vec` unless the references are mutable. It will also suggest you replace `.clone()` calls with the appropriate `.to_owned()`/`to_string()` calls."##,}, Lint{ label: "clippy::ptr_as_ptr", description: r##"Checks for `as` casts between raw pointers without changing its mutability, namely `*const T` to `*const U` and `*mut T` to `*mut U`."##,}, Lint{ label: "clippy::ptr_eq", description: r##"Use `std::ptr::eq` when applicable"##,}, Lint{ label: "clippy::ptr_offset_with_cast", description: r##"Checks for usage of the `offset` pointer method with a `usize` casted to an `isize`."##,}, Lint{ label: "clippy::pub_enum_variant_names", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::question_mark", description: r##"Checks for expressions that could be replaced by the question mark operator."##,}, Lint{ label: "clippy::range_minus_one", description: r##"Checks for inclusive ranges where 1 is subtracted from the upper bound, e.g., `x..=(y-1)`."##,}, Lint{ label: "clippy::range_plus_one", description: r##"Checks for exclusive ranges where 1 is added to the upper bound, e.g., `x..(y+1)`."##,}, Lint{ label: "clippy::range_step_by_zero", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::range_zip_with_len", description: r##"Checks for zipping a collection with the range of `0.._.len()`."##,}, Lint{ label: "clippy::rc_buffer", description: r##"Checks for `Rc` and `Arc` when `T` is a mutable buffer type such as `String` or `Vec`."##,}, Lint{ label: "clippy::rc_mutex", description: r##"Checks for `Rc>`."##,}, Lint{ label: "clippy::redundant_allocation", description: r##"Checks for use of redundant allocations anywhere in the code."##,}, Lint{ label: "clippy::redundant_clone", description: r##"Checks for a redundant `clone()` (and its relatives) which clones an owned value that is going to be dropped without further use."##,}, Lint{ label: "clippy::redundant_closure", description: r##"Checks for closures which just call another function where the function can be called directly. `unsafe` functions or calls where types get adjusted are ignored."##,}, Lint{ label: "clippy::redundant_closure_call", description: r##"Detects closures called in the same expression where they are defined."##,}, Lint{ label: "clippy::redundant_closure_for_method_calls", description: r##"Checks for closures which only invoke a method on the closure argument and can be replaced by referencing the method directly."##,}, Lint{ label: "clippy::redundant_else", description: r##"Checks for `else` blocks that can be removed without changing semantics."##,}, Lint{ label: "clippy::redundant_feature_names", description: r##"Checks for feature names with prefix `use-`, `with-` or suffix `-support`"##,}, Lint{ label: "clippy::redundant_field_names", description: r##"Checks for fields in struct literals where shorthands could be used."##,}, Lint{ label: "clippy::redundant_pattern", description: r##"Checks for patterns in the form `name @ _`."##,}, Lint{ label: "clippy::redundant_pattern_matching", description: r##"Lint for redundant pattern matching over `Result`, `Option`, `std::task::Poll` or `std::net::IpAddr`"##,}, Lint{ label: "clippy::redundant_pub_crate", description: r##"Checks for items declared `pub(crate)` that are not crate visible because they are inside a private module."##,}, Lint{ label: "clippy::redundant_slicing", description: r##"Checks for redundant slicing expressions which use the full range, and do not change the type."##,}, Lint{ label: "clippy::redundant_static_lifetimes", description: r##"Checks for constants and statics with an explicit `'static` lifetime."##,}, Lint{ label: "clippy::ref_binding_to_reference", description: r##"Checks for `ref` bindings which create a reference to a reference."##,}, Lint{ label: "clippy::ref_in_deref", description: r##"Checks for references in expressions that use auto dereference."##,}, Lint{ label: "clippy::ref_option_ref", description: r##"Checks for usage of `&Option<&T>`."##,}, Lint{ label: "clippy::regex_macro", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::repeat_once", description: r##"Checks for usage of `.repeat(1)` and suggest the following method for each types. - `.to_string()` for `str` - `.clone()` for `String` - `.to_vec()` for `slice` The lint will evaluate constant expressions and values as arguments of `.repeat(..)` and emit a message if they are equivalent to `1`. (Related discussion in [rust-clippy#7306](https://github.com/rust-lang/rust-clippy/issues/7306))"##,}, Lint{ label: "clippy::replace_consts", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::rest_pat_in_fully_bound_structs", description: r##"Checks for unnecessary '..' pattern binding on struct when all fields are explicitly matched."##,}, Lint{ label: "clippy::result_map_or_into_option", description: r##"Checks for usage of `_.map_or(None, Some)`."##,}, Lint{ label: "clippy::result_map_unit_fn", description: r##"Checks for usage of `result.map(f)` where f is a function or closure that returns the unit type `()`."##,}, Lint{ label: "clippy::result_unit_err", description: r##"Checks for public functions that return a `Result` with an `Err` type of `()`. It suggests using a custom type that implements `std::error::Error`."##,}, Lint{ label: "clippy::return_self_not_must_use", description: r##"This lint warns when a method returning `Self` doesn't have the `#[must_use]` attribute."##,}, Lint{ label: "clippy::reversed_empty_ranges", description: r##"Checks for range expressions `x..y` where both `x` and `y` are constant and `x` is greater or equal to `y`."##,}, Lint{ label: "clippy::same_functions_in_if_condition", description: r##"Checks for consecutive `if`s with the same function call."##,}, Lint{ label: "clippy::same_item_push", description: r##"Checks whether a for loop is being used to push a constant value into a Vec."##,}, Lint{ label: "clippy::same_name_method", description: r##"It lints if a struct has two methods with the same name: one from a trait, another not from trait."##,}, Lint{ label: "clippy::search_is_some", description: r##"Checks for an iterator or string search (such as `find()`, `position()`, or `rposition()`) followed by a call to `is_some()` or `is_none()`."##,}, Lint{ label: "clippy::self_assignment", description: r##"Checks for explicit self-assignments."##,}, Lint{ label: "clippy::self_named_constructors", description: r##"Warns when constructors have the same name as their types."##,}, Lint{ label: "clippy::self_named_module_files", description: r##"Checks that module layout uses only mod.rs files."##,}, Lint{ label: "clippy::semicolon_if_nothing_returned", description: r##"Looks for blocks of expressions and fires if the last expression returns `()` but is not followed by a semicolon."##,}, Lint{ label: "clippy::separated_literal_suffix", description: r##"Warns if literal suffixes are separated by an underscore. To enforce separated literal suffix style, see the `unseparated_literal_suffix` lint."##,}, Lint{ label: "clippy::serde_api_misuse", description: r##"Checks for mis-uses of the serde API."##,}, Lint{ label: "clippy::shadow_reuse", description: r##"Checks for bindings that shadow other bindings already in scope, while reusing the original value."##,}, Lint{ label: "clippy::shadow_same", description: r##"Checks for bindings that shadow other bindings already in scope, while just changing reference level or mutability."##,}, Lint{ label: "clippy::shadow_unrelated", description: r##"Checks for bindings that shadow other bindings already in scope, either without an initialization or with one that does not even use the original value."##,}, Lint{ label: "clippy::short_circuit_statement", description: r##"Checks for the use of short circuit boolean conditions as a statement."##,}, Lint{ label: "clippy::should_assert_eq", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::should_implement_trait", description: r##"Checks for methods that should live in a trait implementation of a `std` trait (see [llogiq's blog post](http://llogiq.github.io/2015/07/30/traits.html) for further information) instead of an inherent implementation."##,}, Lint{ label: "clippy::similar_names", description: r##"Checks for names that are very similar and thus confusing."##,}, Lint{ label: "clippy::single_char_add_str", description: r##"Warns when using `push_str`/`insert_str` with a single-character string literal where `push`/`insert` with a `char` would work fine."##,}, Lint{ label: "clippy::single_char_pattern", description: r##"Checks for string methods that receive a single-character `str` as an argument, e.g., `_.split(x)`."##,}, Lint{ label: "clippy::single_component_path_imports", description: r##"Checking for imports with single component use path."##,}, Lint{ label: "clippy::single_element_loop", description: r##"Checks whether a for loop has a single element."##,}, Lint{ label: "clippy::single_match", description: r##"Checks for matches with a single arm where an `if let` will usually suffice."##,}, Lint{ label: "clippy::single_match_else", description: r##"Checks for matches with two arms where an `if let else` will usually suffice."##,}, Lint{ label: "clippy::size_of_in_element_count", description: r##"Detects expressions where `size_of::` or `size_of_val::` is used as a count of elements of type `T`"##,}, Lint{ label: "clippy::skip_while_next", description: r##"Checks for usage of `_.skip_while(condition).next()`."##,}, Lint{ label: "clippy::slow_vector_initialization", description: r##"Checks slow zero-filled vector initialization"##,}, Lint{ label: "clippy::stable_sort_primitive", description: r##"When sorting primitive values (integers, bools, chars, as well as arrays, slices, and tuples of such items), it is better to use an unstable sort than a stable sort."##,}, Lint{ label: "clippy::str_to_string", description: r##"This lint checks for `.to_string()` method calls on values of type `&str`."##,}, Lint{ label: "clippy::string_add", description: r##"Checks for all instances of `x + _` where `x` is of type `String`, but only if [`string_add_assign`](#string_add_assign) does *not* match."##,}, Lint{ label: "clippy::string_add_assign", description: r##"Checks for string appends of the form `x = x + y` (without `let`!)."##,}, Lint{ label: "clippy::string_extend_chars", description: r##"Checks for the use of `.extend(s.chars())` where s is a `&str` or `String`."##,}, Lint{ label: "clippy::string_from_utf8_as_bytes", description: r##"Check if the string is transformed to byte array and casted back to string."##,}, Lint{ label: "clippy::string_lit_as_bytes", description: r##"Checks for the `as_bytes` method called on string literals that contain only ASCII characters."##,}, Lint{ label: "clippy::string_slice", description: r##"Checks for slice operations on strings"##,}, Lint{ label: "clippy::string_to_string", description: r##"This lint checks for `.to_string()` method calls on values of type `String`."##,}, Lint{ label: "clippy::strlen_on_c_strings", description: r##"Checks for usage of `libc::strlen` on a `CString` or `CStr` value, and suggest calling `as_bytes().len()` or `to_bytes().len()` respectively instead."##,}, Lint{ label: "clippy::struct_excessive_bools", description: r##"Checks for excessive use of bools in structs."##,}, Lint{ label: "clippy::suboptimal_flops", description: r##"Looks for floating-point expressions that can be expressed using built-in methods to improve both accuracy and performance."##,}, Lint{ label: "clippy::suspicious_arithmetic_impl", description: r##"Lints for suspicious operations in impls of arithmetic operators, e.g. subtracting elements in an Add impl."##,}, Lint{ label: "clippy::suspicious_assignment_formatting", description: r##"Checks for use of the nonexistent `=*`, `=!` and `=-` operators."##,}, Lint{ label: "clippy::suspicious_else_formatting", description: r##"Checks for formatting of `else`. It lints if the `else` is followed immediately by a newline or the `else` seems to be missing."##,}, Lint{ label: "clippy::suspicious_map", description: r##"Checks for calls to `map` followed by a `count`."##,}, Lint{ label: "clippy::suspicious_op_assign_impl", description: r##"Lints for suspicious operations in impls of OpAssign, e.g. subtracting elements in an AddAssign impl."##,}, Lint{ label: "clippy::suspicious_operation_groupings", description: r##"Checks for unlikely usages of binary operators that are almost certainly typos and/or copy/paste errors, given the other usages of binary operators nearby."##,}, Lint{ label: "clippy::suspicious_splitn", description: r##"Checks for calls to [`splitn`] (https://doc.rust-lang.org/std/primitive.str.html#method.splitn) and related functions with either zero or one splits."##,}, Lint{ label: "clippy::suspicious_unary_op_formatting", description: r##"Checks the formatting of a unary operator on the right hand side of a binary operator. It lints if there is no space between the binary and unary operators, but there is a space between the unary and its operand."##,}, Lint{ label: "clippy::tabs_in_doc_comments", description: r##"Checks doc comments for usage of tab characters."##,}, Lint{ label: "clippy::temporary_assignment", description: r##"Checks for construction of a structure or tuple just to assign a value in it."##,}, Lint{ label: "clippy::to_digit_is_some", description: r##"Checks for `.to_digit(..).is_some()` on `char`s."##,}, Lint{ label: "clippy::to_string_in_display", description: r##"Checks for uses of `to_string()` in `Display` traits."##,}, Lint{ label: "clippy::to_string_in_format_args", description: r##"Checks for [`ToString::to_string`](https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod.to_string) applied to a type that implements [`Display`](https://doc.rust-lang.org/std/fmt/trait.Display.html) in a macro that does formatting."##,}, Lint{ label: "clippy::todo", description: r##"Checks for usage of `todo!`."##,}, Lint{ label: "clippy::too_many_arguments", description: r##"Checks for functions with too many parameters."##,}, Lint{ label: "clippy::too_many_lines", description: r##"Checks for functions with a large amount of lines."##,}, Lint{ label: "clippy::toplevel_ref_arg", description: r##"Checks for function arguments and let bindings denoted as `ref`."##,}, Lint{ label: "clippy::trailing_empty_array", description: r##"Displays a warning when a struct with a trailing zero-sized array is declared without a `repr` attribute."##,}, Lint{ label: "clippy::trait_duplication_in_bounds", description: r##"Checks for cases where generics are being used and multiple syntax specifications for trait bounds are used simultaneously."##,}, Lint{ label: "clippy::transmute_bytes_to_str", description: r##"Checks for transmutes from a `&[u8]` to a `&str`."##,}, Lint{ label: "clippy::transmute_float_to_int", description: r##"Checks for transmutes from a float to an integer."##,}, Lint{ label: "clippy::transmute_int_to_bool", description: r##"Checks for transmutes from an integer to a `bool`."##,}, Lint{ label: "clippy::transmute_int_to_char", description: r##"Checks for transmutes from an integer to a `char`."##,}, Lint{ label: "clippy::transmute_int_to_float", description: r##"Checks for transmutes from an integer to a float."##,}, Lint{ label: "clippy::transmute_num_to_bytes", description: r##"Checks for transmutes from a number to an array of `u8`"##,}, Lint{ label: "clippy::transmute_ptr_to_ptr", description: r##"Checks for transmutes from a pointer to a pointer, or from a reference to a reference."##,}, Lint{ label: "clippy::transmute_ptr_to_ref", description: r##"Checks for transmutes from a pointer to a reference."##,}, Lint{ label: "clippy::transmutes_expressible_as_ptr_casts", description: r##"Checks for transmutes that could be a pointer cast."##,}, Lint{ label: "clippy::transmuting_null", description: r##"Checks for transmute calls which would receive a null pointer."##,}, Lint{ label: "clippy::trivial_regex", description: r##"Checks for trivial [regex](https://crates.io/crates/regex) creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`)."##,}, Lint{ label: "clippy::trivially_copy_pass_by_ref", description: r##"Checks for functions taking arguments by reference, where the argument type is `Copy` and small enough to be more efficient to always pass by value."##,}, Lint{ label: "clippy::try_err", description: r##"Checks for usages of `Err(x)?`."##,}, Lint{ label: "clippy::type_complexity", description: r##"Checks for types used in structs, parameters and `let` declarations above a certain complexity threshold."##,}, Lint{ label: "clippy::type_repetition_in_bounds", description: r##"This lint warns about unnecessary type repetitions in trait bounds"##,}, Lint{ label: "clippy::undocumented_unsafe_blocks", description: r##"Checks for `unsafe` blocks without a `// Safety: ` comment explaining why the unsafe operations performed inside the block are safe."##,}, Lint{ label: "clippy::undropped_manually_drops", description: r##"Prevents the safe `std::mem::drop` function from being called on `std::mem::ManuallyDrop`."##,}, Lint{ label: "clippy::unicode_not_nfc", description: r##"Checks for string literals that contain Unicode in a form that is not equal to its [NFC-recomposition](http://www.unicode.org/reports/tr15/#Norm_Forms)."##,}, Lint{ label: "clippy::unimplemented", description: r##"Checks for usage of `unimplemented!`."##,}, Lint{ label: "clippy::uninit_assumed_init", description: r##"Checks for `MaybeUninit::uninit().assume_init()`."##,}, Lint{ label: "clippy::uninit_vec", description: r##"Checks for `set_len()` call that creates `Vec` with uninitialized elements. This is commonly caused by calling `set_len()` right after allocating or reserving a buffer with `new()`, `default()`, `with_capacity()`, or `reserve()`."##,}, Lint{ label: "clippy::unit_arg", description: r##"Checks for passing a unit value as an argument to a function without using a unit literal (`()`)."##,}, Lint{ label: "clippy::unit_cmp", description: r##"Checks for comparisons to unit. This includes all binary comparisons (like `==` and `<`) and asserts."##,}, Lint{ label: "clippy::unit_hash", description: r##"Detects `().hash(_)`."##,}, Lint{ label: "clippy::unit_return_expecting_ord", description: r##"Checks for functions that expect closures of type Fn(...) -> Ord where the implemented closure returns the unit type. The lint also suggests to remove the semi-colon at the end of the statement if present."##,}, Lint{ label: "clippy::unnecessary_cast", description: r##"Checks for casts to the same type, casts of int literals to integer types and casts of float literals to float types."##,}, Lint{ label: "clippy::unnecessary_filter_map", description: r##"Checks for `filter_map` calls which could be replaced by `filter` or `map`. More specifically it checks if the closure provided is only performing one of the filter or map operations and suggests the appropriate option."##,}, Lint{ label: "clippy::unnecessary_fold", description: r##"Checks for using `fold` when a more succinct alternative exists. Specifically, this checks for `fold`s which could be replaced by `any`, `all`, `sum` or `product`."##,}, Lint{ label: "clippy::unnecessary_lazy_evaluations", description: r##"As the counterpart to `or_fun_call`, this lint looks for unnecessary lazily evaluated closures on `Option` and `Result`. This lint suggests changing the following functions, when eager evaluation results in simpler code: - `unwrap_or_else` to `unwrap_or` - `and_then` to `and` - `or_else` to `or` - `get_or_insert_with` to `get_or_insert` - `ok_or_else` to `ok_or`"##,}, Lint{ label: "clippy::unnecessary_mut_passed", description: r##"Detects passing a mutable reference to a function that only requires an immutable reference."##,}, Lint{ label: "clippy::unnecessary_operation", description: r##"Checks for expression statements that can be reduced to a sub-expression."##,}, Lint{ label: "clippy::unnecessary_self_imports", description: r##"Checks for imports ending in `::{self}`."##,}, Lint{ label: "clippy::unnecessary_sort_by", description: r##"Detects uses of `Vec::sort_by` passing in a closure which compares the two arguments, either directly or indirectly."##,}, Lint{ label: "clippy::unnecessary_to_owned", description: r##"Checks for unnecessary calls to [`ToOwned::to_owned`](https://doc.rust-lang.org/std/borrow/trait.ToOwned.html#tymethod.to_owned) and other `to_owned`-like functions."##,}, Lint{ label: "clippy::unnecessary_unwrap", description: r##"Checks for calls of `unwrap[_err]()` that cannot fail."##,}, Lint{ label: "clippy::unnecessary_wraps", description: r##"Checks for private functions that only return `Ok` or `Some`."##,}, Lint{ label: "clippy::unneeded_field_pattern", description: r##"Checks for structure field patterns bound to wildcards."##,}, Lint{ label: "clippy::unneeded_wildcard_pattern", description: r##"Checks for tuple patterns with a wildcard pattern (`_`) is next to a rest pattern (`..`). _NOTE_: While `_, ..` means there is at least one element left, `..` means there are 0 or more elements left. This can make a difference when refactoring, but shouldn't result in errors in the refactored code, since the wildcard pattern isn't used anyway."##,}, Lint{ label: "clippy::unnested_or_patterns", description: r##"Checks for unnested or-patterns, e.g., `Some(0) | Some(2)` and suggests replacing the pattern with a nested one, `Some(0 | 2)`. Another way to think of this is that it rewrites patterns in *disjunctive normal form (DNF)* into *conjunctive normal form (CNF)*."##,}, Lint{ label: "clippy::unreachable", description: r##"Checks for usage of `unreachable!`."##,}, Lint{ label: "clippy::unreadable_literal", description: r##"Warns if a long integral or floating-point constant does not contain underscores."##,}, Lint{ label: "clippy::unsafe_derive_deserialize", description: r##"Checks for deriving `serde::Deserialize` on a type that has methods using `unsafe`."##,}, Lint{ label: "clippy::unsafe_removed_from_name", description: r##"Checks for imports that remove unsafe from an item's name."##,}, Lint{ label: "clippy::unsafe_vector_initialization", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::unseparated_literal_suffix", description: r##"Warns if literal suffixes are not separated by an underscore. To enforce unseparated literal suffix style, see the `separated_literal_suffix` lint."##,}, Lint{ label: "clippy::unsound_collection_transmute", description: r##"Checks for transmutes between collections whose types have different ABI, size or alignment."##,}, Lint{ label: "clippy::unstable_as_mut_slice", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::unstable_as_slice", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::unused_async", description: r##"Checks for functions that are declared `async` but have no `.await`s inside of them."##,}, Lint{ label: "clippy::unused_collect", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::unused_io_amount", description: r##"Checks for unused written/read amount."##,}, Lint{ label: "clippy::unused_self", description: r##"Checks methods that contain a `self` argument but don't use it"##,}, Lint{ label: "clippy::unused_unit", description: r##"Checks for unit (`()`) expressions that can be removed."##,}, Lint{ label: "clippy::unusual_byte_groupings", description: r##"Warns if hexadecimal or binary literals are not grouped by nibble or byte."##,}, Lint{ label: "clippy::unwrap_in_result", description: r##"Checks for functions of type `Result` that contain `expect()` or `unwrap()`"##,}, Lint{ label: "clippy::unwrap_or_else_default", description: r##"Checks for usages of `_.unwrap_or_else(Default::default)` on `Option` and `Result` values."##,}, Lint{ label: "clippy::unwrap_used", description: r##"Checks for `.unwrap()` calls on `Option`s and on `Result`s."##,}, Lint{ label: "clippy::upper_case_acronyms", description: r##"Checks for fully capitalized names and optionally names containing a capitalized acronym."##,}, Lint{ label: "clippy::use_debug", description: r##"Checks for use of `Debug` formatting. The purpose of this lint is to catch debugging remnants."##,}, Lint{ label: "clippy::use_self", description: r##"Checks for unnecessary repetition of structure name when a replacement with `Self` is applicable."##,}, Lint{ label: "clippy::used_underscore_binding", description: r##"Checks for the use of bindings with a single leading underscore."##,}, Lint{ label: "clippy::useless_asref", description: r##"Checks for usage of `.as_ref()` or `.as_mut()` where the types before and after the call are the same."##,}, Lint{ label: "clippy::useless_attribute", description: r##"Checks for `extern crate` and `use` items annotated with lint attributes. This lint permits `#[allow(unused_imports)]`, `#[allow(deprecated)]`, `#[allow(unreachable_pub)]`, `#[allow(clippy::wildcard_imports)]` and `#[allow(clippy::enum_glob_use)]` on `use` items and `#[allow(unused_imports)]` on `extern crate` items with a `#[macro_use]` attribute."##,}, Lint{ label: "clippy::useless_conversion", description: r##"Checks for `Into`, `TryInto`, `From`, `TryFrom`, or `IntoIter` calls which uselessly convert to the same type."##,}, Lint{ label: "clippy::useless_format", description: r##"Checks for the use of `format!(string literal with no argument)` and `format!({}, foo)` where `foo` is a string."##,}, Lint{ label: "clippy::useless_let_if_seq", description: r##"Checks for variable declarations immediately followed by a conditional affectation."##,}, Lint{ label: "clippy::useless_transmute", description: r##"Checks for transmutes to the original type of the object and transmutes that could be a cast."##,}, Lint{ label: "clippy::useless_vec", description: r##"Checks for usage of `&vec![..]` when using `&[..]` would be possible."##,}, Lint{ label: "clippy::vec_box", description: r##"Checks for use of `Vec>` where T: Sized anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information."##,}, Lint{ label: "clippy::vec_init_then_push", description: r##"Checks for calls to `push` immediately after creating a new `Vec`."##,}, Lint{ label: "clippy::vec_resize_to_zero", description: r##"Finds occurrences of `Vec::resize(0, an_int)`"##,}, Lint{ label: "clippy::verbose_bit_mask", description: r##"Checks for bit masks that can be replaced by a call to `trailing_zeros`"##,}, Lint{ label: "clippy::verbose_file_reads", description: r##"Checks for use of File::read_to_end and File::read_to_string."##,}, Lint{ label: "clippy::vtable_address_comparisons", description: r##"Checks for comparisons with an address of a trait vtable."##,}, Lint{ label: "clippy::while_immutable_condition", description: r##"Checks whether variables used within while loop condition can be (and are) mutated in the body."##,}, Lint{ label: "clippy::while_let_loop", description: r##"Detects `loop + match` combinations that are easier written as a `while let` loop."##,}, Lint{ label: "clippy::while_let_on_iterator", description: r##"Checks for `while let` expressions on iterators."##,}, Lint{ label: "clippy::wildcard_dependencies", description: r##"Checks for wildcard dependencies in the `Cargo.toml`."##,}, Lint{ label: "clippy::wildcard_enum_match_arm", description: r##"Checks for wildcard enum matches using `_`."##,}, Lint{ label: "clippy::wildcard_imports", description: r##"Checks for wildcard imports `use _::*`."##,}, Lint{ label: "clippy::wildcard_in_or_patterns", description: r##"Checks for wildcard pattern used with others patterns in same match arm."##,}, Lint{ label: "clippy::write_literal", description: r##"This lint warns about the use of literals as `write!`/`writeln!` args."##,}, Lint{ label: "clippy::write_with_newline", description: r##"This lint warns when you use `write!()` with a format string that ends in a newline."##,}, Lint{ label: "clippy::writeln_empty_string", description: r##"This lint warns when you use `writeln!(buf, )` to print a newline."##,}, Lint{ label: "clippy::wrong_pub_self_convention", description: r##"Nothing. This lint has been deprecated."##,}, Lint{ label: "clippy::wrong_self_convention", description: r##"Checks for methods with certain name prefixes and which doesn't match how self is taken. The actual rules are: |Prefix |Postfix |`self` taken | `self` type | |-------|------------|-----------------------|--------------| |`as_` | none |`&self` or `&mut self` | any | |`from_`| none | none | any | |`into_`| none |`self` | any | |`is_` | none |`&self` or none | any | |`to_` | `_mut` |`&mut self` | any | |`to_` | not `_mut` |`self` | `Copy` | |`to_` | not `_mut` |`&self` | not `Copy` | Note: Clippy doesn't trigger methods with `to_` prefix in: - Traits definition. Clippy can not tell if a type that implements a trait is `Copy` or not. - Traits implementation, when `&self` is taken. The method signature is controlled by the trait and often `&self` is required for all types that implement the trait (see e.g. the `std::string::ToString` trait). Clippy allows `Pin<&Self>` and `Pin<&mut Self>` if `&self` and `&mut self` is required. Please find more info here: https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv"##,}, Lint{ label: "clippy::wrong_transmute", description: r##"Checks for transmutes that can't ever be correct on any architecture."##,}, Lint{ label: "clippy::zero_divided_by_zero", description: r##"Checks for `0.0 / 0.0`."##,}, Lint{ label: "clippy::zero_prefixed_literal", description: r##"Warns if an integral constant literal starts with `0`."##,}, Lint{ label: "clippy::zero_ptr", description: r##"Catch casts from `0` to some pointer type"##,}, Lint{ label: "clippy::zero_sized_map_values", description: r##"Checks for maps with zero-sized value types anywhere in the code."##,}, Lint{ label: "clippy::zst_offset", description: r##"Checks for `offset(_)`, `wrapping_`{`add`, `sub`}, etc. on raw pointers to zero-sized types"##,}]   $"clippy::absurd_extreme_comparisons"" Checks for comparisons where one side of the relation is either the minimum or maximum value for its type and warns if it involves a case that is always true or always false. Only integer and boolean types are checked.   clippy::almost_swapped 3,Checks for `foo = bar; bar = foo` sequences.,,   clippy::approx_constant Checks for floating point literals that approximate constants which are defined in [`std::f32::consts`](https://doc.rust-lang.org/stable/std/f32/consts/#constants) or [`std::f64::consts`](https://doc.rust-lang.org/stable/std/f64/consts/#constants), respectively, suggesting to use the predefined constant.  lj clippy::as_conversions Checks for usage of `as` conversions. Note that this lint is specialized in linting *every single* use of `as` regardless of whether good alternatives exist or not. If you want more precise lints for `as`, please consider using these separate lints: `unnecessary_cast`, `cast_lossless/possible_truncation/possible_wrap/precision_loss/sign_loss`, `fn_to_numeric_cast(_with_truncation)`, `char_lit_as_u8`, `ref_to_mut` and `ptr_as_ptr`. There is a good explanation the reason why this lint should work in this way and how it is useful [in this issue](https://github.com/rust-lang/rust-clippy/issues/5122).   !clippy::assertions_on_constants =6Checks for `assert!(true)` and `assert!(false)` calls.66   clippy::assign_op_patternƐ D=Checks for `a = a op b` or `a = b commutative_op a` patterns.== v  clippy::assign_opsؑ .'Nothing. This lint has been deprecated.''   clippy::async_yields_asyncܒ YRChecks for async blocks that yield values of types that can themselves be awaited.RR“  ؓ clippy::await_holding_lock LEChecks for calls to await while holding a non-async-aware MutexGuard.EE   #!clippy::await_holding_refcell_ref!! MFChecks for calls to await while holding a `RefCell` `Ref` or `RefMut`.FF   clippy::bad_bit_maskі Checks for incompatible bit masks in comparisons. The formula for detecting if an expression of the type `_ m c` (where `` is one of {`&`, `|`} and `` is one of {`!=`, `>=`, `>`, `!=`, `>=`, `>`}) can be determined from the following table: |Comparison |Bit Op|Example |is always|Formula | |------------|------|------------|---------|----------------------| |`==` or `!=`| `&` |`x & 2 == 3`|`false` |`c & m != c` | |`<` or `>=`| `&` |`x & 2 < 3` |`true` |`m < c` | |`>` or `<=`| `&` |`x & 1 > 1` |`false` |`m <= c` | |`==` or `!=`| `|` |`x | 1 == 0`|`false` |`c | m != c` | |`<` or `>=`| `|` |`x | 1 < 1` |`false` |`m >= c` | |`<=` or `>` | `|` |`x | 1 > 0` |`true` |`m > c` |   clippy::bind_instead_of_map ibChecks for usage of `_.and_then(|x| Some(y))`, `_.and_then(|x| Ok(y))` or `_.or_else(|x| Err(y))`.bbٞ   clippy::blacklisted_name JCChecks for usage of blacklisted names for variables, such as `foo`.CC   *(clippy::blanket_clippy_restriction_lints((Π e^Checks for `warn`/`deny`/`forbid` attributes targeting the whole clippy::restriction category.^^  ֡ !clippy::blocks_in_if_conditions |Checks for `if` conditions that use blocks containing an expression, statements or conditions that use closures with blocks.||   clippy::bool_assert_comparison G@This lint warns about boolean comparisons in assert-like macros.@@  դ clippy::bool_comparison Checks for expressions of the form `x == true`, `x != true` and order comparisons such as `x < true` (or vice versa) and suggest using the variable directly.  ̦ '%clippy::borrow_interior_mutable_const%% Checks if `const` items which is interior mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.) has been borrowed directly.   clippy::borrowed_box Checks for use of `&Box` anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information.   clippy::box_collectionӪ Checks for use of `Box` where T is a collection such as Vec anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information.   clippy::boxed_local IBChecks for usage of `Box` where an unboxed `T` would work fine.BB  ͭ clippy::branches_sharing_code c\Checks if the `if` and `else` block contain shared code that can be moved out of the blocks.\\   clippy::builtin_type_shadow 2+Warns if a generic shadows a built-in type.++ u  clippy::bytes_nth .'Checks for the use of `.bytes().nth()`.''   clippy::cargo_common_metadatañ Checks to see if all common metadata is defined in `Cargo.toml`. See: https://rust-lang-nursery.github.io/api-guidelines/documentation.html#cargotoml-includes-all-common-metadata-c-metadata   31clippy::case_sensitive_file_extension_comparisons11 }vChecks for calls to `ends_with` with possible file extensions and suggests to use a case-insensitive approach instead.vv   clippy::cast_losslessµ b[Checks for casts between numerical types that may be replaced by safe conversion functions.[[  Ƕ " clippy::cast_possible_truncation  Checks for casts between numerical types that may truncate large values. This is expected behavior, so the cast is `Allow` by default.   clippy::cast_possible_wrap Checks for casts from an unsigned type to a signed type of the same size. Performing such a cast is a 'no-op' for the compiler, i.e., nothing is changed at the bit level, and the binary representation of the value is reinterpreted. This can cause wrapping if the value is too big for the target signed type. However, the cast works as defined, so this lint is `Allow` by default.   clippy::cast_precision_loss Checks for casts from any numerical to a float type where the receiving type cannot store all values from the original type without rounding errors. This possible rounding is to be expected, so this lint is `Allow` by default. Basically, this warns on casting any integer with 32 or more bits to `f32` or any 64-bit integer to `f64`.   clippy::cast_ptr_alignment xChecks for casts, using `as` or `pointer::cast`, from a less-strictly-aligned pointer to a more-strictly-aligned pointerxx !  clippy::cast_ref_to_mut A:Checks for casts of `&T` to `&mut T` anywhere in the code.:: "  clippy::cast_sign_loss Checks for casts from a signed to an unsigned numerical type. In this case, negative values wrap around to large positive values, which can be quite surprising in practice. However, as the cast works as defined, this lint is `Allow` by default. #  clippy::char_lit_as_u8 rkChecks for expressions where a character literal is cast to `u8` and suggests using a byte literal instead.kk $  clippy::chars_last_cmp zsChecks for usage of `_.chars().last()` or `_.chars().next_back()` on a `str` to check if it ends with a given char.ss %  clippy::chars_next_cmp `YChecks for usage of `.chars().next()` on a `str` to check if it starts with a given char.YY &  clippy::checked_conversions 81Checks for explicit bounds checking when casting.11 '  clippy::clone_double_ref 2+Checks for usage of `.clone()` on an `&&T`.++ (  clippy::clone_on_copy 70Checks for usage of `.clone()` on a `Copy` type.00 )  clippy::clone_on_ref_ptr Checks for usage of `.clone()` on a ref-counted pointer, (`Rc`, `Arc`, `rc::Weak`, or `sync::Weak`), and suggests calling Clone via unified function syntax instead (e.g., `Rc::clone(foo)`). *  " clippy::cloned_instead_of_copied  kdChecks for usages of `cloned()` on an `Iterator` or `Option` where `copied()` could be used instead.dd U+  clippy::cmp_nan %Checks for comparisons to NaN. ,  clippy::cmp_null A:This lint checks for equality comparisons with `ptr::null`:: -  clippy::cmp_owned PIChecks for conversions to owned values just for the sake of a comparison.II .  clippy::cognitive_complexity 92Checks for methods with high cognitive complexity.22 /  clippy::collapsible_else_if c\Checks for collapsible `else { if ... }` expressions that can be collapsed to `else if ...`.\\ 0  clippy::collapsible_if c\Checks for nested `if` statements which can be collapsed by `&&`-combining their conditions.\\ 1  clippy::collapsible_match Finds nested `match` or `if let` expressions where the patterns may be collapsed together without adding any branches. Note that this lint is not intended to find _all_ cases where nested match patterns can be merged, but only cases where merging would most likely make the code more readable. 2  clippy::comparison_chain _XChecks comparison chains written with `if` that can be rewritten with `match` and `cmp`.XX 3  clippy::comparison_to_empty tmChecks for comparing to an empty slice such as `` or `[]`, and suggests using `.is_empty()` where applicable.mm 4  clippy::copy_iterator D=Checks for types that implement `Copy` as well as `Iterator`.== 5  clippy::create_dir aZChecks usage of `std::fs::create_dir` and suggest using `std::fs::create_dir_all` instead.ZZ 6  clippy::crosspointer_transmute 92Checks for transmutes between a type `T` and `*T`.22 Z7  clippy::dbg_macro (!Checks for usage of dbg!() macro.!! 8  $"clippy::debug_assert_with_mut_call"" Checks for function/method calls with a mutable parameter in `debug_assert!`, `debug_assert_eq!` and `debug_assert_ne!` macros. 9  (&clippy::decimal_literal_representation&& G@Warns if there is a better representation for a numeric literal.@@ :  (&clippy::declare_interior_mutable_const&& yChecks for declaration of `const` items which is interior mutable (e.g., contains a `Cell`, `Mutex`, `AtomicXxxx`, etc.).yy ;  " clippy::default_numeric_fallback  Checks for usage of unconstrained numeric literals which may cause default numeric fallback in type inference. Default numeric fallback means that if numeric types have not yet been bound to concrete types at the end of type inference, then integer type is bound to `i32`, and similarly floating type is bound to `f64`. See [RFC0212](https://github.com/rust-lang/rfcs/blob/master/text/0212-restore-int-fallback.md) for more information about the fallback. <  clippy::default_trait_access 81Checks for literal calls to `Default::default()`.11 =  clippy::deprecated_cfg_attr jcChecks for `#[cfg_attr(rustfmt, rustfmt_skip)]` and suggests to replace it with `#[rustfmt::skip]`.cc >  clippy::deprecated_semver haChecks for `#[deprecated]` annotations with a `since` field that is not a valid semantic version.aa ?  clippy::deref_addrof ;4Checks for usage of `*&` and `*&mut` in expressions.44 @  clippy::derivable_impls mfDetects manual `std::default::Default` implementations that are identical to a derived implementation.ff A  clippy::derive_hash_xor_eq XQChecks for deriving `Hash` but implementing `PartialEq` explicitly or vice versa.QQ B  $"clippy::derive_ord_xor_partial_ord"" XQChecks for deriving `Ord` but implementing `PartialOrd` explicitly or vice versa.QQ C  clippy::disallowed_methods A:Denies the configured methods and functions in clippy.toml:: D  " clippy::disallowed_script_idents  Checks for usage of unicode scripts other than those explicitly allowed by the lint config. This lint doesn't take into account non-text scripts such as `Unknown` and `Linear_A`. It also ignores the `Common` script type. While configuring, be sure to use official script name [aliases] from [the list of supported scripts][supported_scripts]. See also: [`non_ascii_idents`]. [aliases]: http://www.unicode.org/reports/tr24/tr24-31.html#Script_Value_Aliases [supported_scripts]: https://www.unicode.org/iso15924/iso15924-codes.html E  clippy::disallowed_types 2+Denies the configured types in clippy.toml.++ F  " clippy::diverging_sub_expression  HAChecks for diverging calls that are not match arms or statements.AA G  clippy::doc_markdown _XChecks for the presence of `_`, `::` or camel-case words outside ticks in documentation.XX H  clippy::double_comparisons UNChecks for double comparisons that could be simplified to a single expression.NN I  clippy::double_must_use Checks for a `#[must_use]` attribute without further information on functions and methods that return a type already marked as `#[must_use]`. uJ  clippy::double_neg -&Detects expressions of the form `--x`.&& |K  clippy::double_parensނ 1*Checks for unnecessary double parentheses.** L  clippy::drop_copy܃ TMChecks for calls to `std::mem::drop` with a value that derives the Copy traitMM M ӄ clippy::drop_ref WPChecks for calls to `std::mem::drop` with a reference instead of an owned value.PP N  '%clippy::duplicate_underscore_argument%% YRChecks for function arguments having the similar names differing by an underscore.RR O  clippy::duration_subsec f_Checks for calculation of subsecond microseconds or milliseconds from other `Duration` methods.__ӈ P  clippy::else_if_without_else f_Checks for usage of if expressions with an `else if` branch, but without a final `else` branch.__ Q  clippy::empty_enumҊ Checks for `enum`s with no variants. As of this writing, the `never_type` is still a nightly-only experimental API. Therefore, this lint is only triggered if the `never_type` is enabled. R  %#clippy::empty_line_after_outer_attr## 4-Checks for empty lines after outer attributes-- ^S  clippy::empty_loop +$Checks for empty `loop` expressions.$$ T  '%clippy::enum_clike_unportable_variant%% piChecks for C-like enumerations that are `repr(isize/usize)` and have values that don't fit into an `i32`.ii VU  clippy::enum_glob_use Checks for `use Enum::*`.Ő V ې clippy::enum_variant_names YRDetects enumeration variants that are prefixed or suffixed by the same characters.RR W   clippy::eq_op  Checks for equal operands to comparison, logical and bitwise, difference and division binary operators (`==`, `>`, etc., `&&`, `||`, `&`, `|`, `^`, `-` and `/`). X  clippy::equatable_if_let IBChecks for pattern matchings that can be expressed using equality.BB |Y  clippy::erasing_opÕ 4-Checks for erasing operations, e.g., `x * 0`.-- Z  clippy::eval_order_dependenceЖ Checks for a read and a write to the same variable where whether the read occurs before or after the write depends on the evaluation order of sub-expressions. [  clippy::excessive_precision̘ e^Checks for float literals with a precision greater than that supported by the underlying type.^^ \ ԙ clippy::exhaustive_enums LEWarns on any exported `enum`s that are not tagged `#[non_exhaustive]`EEޚ ]  clippy::exhaustive_structs OHWarns on any exported `structs`s that are not tagged `#[non_exhaustive]`HH ^   clippy::exit  JC`exit()` terminates the program and doesn't provide a stack trace.CC _  clippy::expect_fun_call۝ {tChecks for calls to `.expect(&format!(...))`, `.expect(foo(..))`, etc., and suggests to use `unwrap_or_else` insteadtt `  clippy::expect_used ?8Checks for `.expect()` calls on `Option`s and `Result`s.88 a  !clippy::expl_impl_clone_on_copy D=Checks for explicit `Clone` implementations for `Copy` types.== b  clippy::explicit_counter_loopܡ f_Checks `for` loops over slices with an explicit counter and suggests the use of `.enumerate()`.__Ϣ c  clippy::explicit_deref_methods C` that contain `panic!()` or `unwrap()`DD k  %#clippy::field_reassign_with_default##í WPChecks for immediate reassignment of fields initialized with Default::default().PP vl  clippy::filetype_is_file (!Checks for `FileType::is_file()`.!! vm  clippy::filter_map .'Nothing. This lint has been deprecated.'' n  clippy::filter_map_identity /(Checks for usage of `filter_map(|x| x)`.(( o  clippy::filter_map_next 4-Checks for usage of `_.filter_map(_).next()`.-- yp ² clippy::filter_next 0)Checks for usage of `_.filter(_).next()`.)) _q  clippy::find_mapڳ .'Nothing. This lint has been deprecated.'' |r  clippy::flat_map_identityش -&Checks for usage of `flat_map(|x| x)`.&& s  clippy::flat_map_optionص ^WChecks for usages of `Iterator::flat_map()` where `filter_map()` could be used instead.WWö \t Ѷ clippy::float_arithmetic #Checks for float arithmetic. u  clippy::float_cmp Checks for (in-)equality comparisons on floating-point values (apart from zero), except in functions called `*eq*` (which probably implement equality for a type involving floats). v ¹ clippy::float_cmp_const Checks for (in-)equality comparisons on floating-point value and constant, except in functions called `*eq*` (which probably implement equality for a type involving floats). w ɻ $"clippy::float_equality_without_abs"" zsChecks for statements of the form `(a - b) < f32::EPSILON` or `(a - b) < f64::EPSILON`. Notes the missing `.abs()`.ss x  clippy::fn_address_comparisonsؽ A:Checks for comparisons with an address of a function item.:: y  #!clippy::fn_params_excessive_bools!! A:Checks for excessive use of bools in function definitions.::Ŀ z ڿ clippy::fn_to_numeric_cast JCChecks for casts of function pointers to something other than usizeCC {  clippy::fn_to_numeric_cast_any B;Checks for casts of a function pointer to any integer type.;; |  ,*clippy::fn_to_numeric_cast_with_truncation** aZChecks for casts of a function pointer to a numeric type not wide enough to store address.ZZ }  clippy::for_kv_map c\Checks for iterating a map (`HashMap` or `BTreeMap`) and ignoring either the keys or values.\\ ~  " clippy::for_loops_over_fallibles  ?8Checks for `for` loops over `Option` or `Result` values.88   clippy::forget_copy VOChecks for calls to `std::mem::forget` with a value that derives the Copy traitOO   clippy::forget_ref YRChecks for calls to `std::mem::forget` with a reference instead of an owned value.RR   clippy::format_in_format_args Detects `format!` within the arguments of another macro that does formatting such as `format!` itself, `write!` or `println!`. Suggests inlining the `format!` call.   &$clippy::from_iter_instead_of_collect$$ `YChecks for `from_iter()` function calls on types that implement the `FromIterator` trait.YY   clippy::from_over_into ibSearches for implementations of the `Into<..>` trait and suggests to implement `From<..>` instead.bb   clippy::from_str_radix_10 UNChecks for function invocations of the form `primitive::from_str_radix(s, 10)`NN   clippy::future_not_send This lint requires Future implementations returned from functions and methods to implement the `Send` marker trait. It is mostly used by library authors (public and internal) that target an audience where multithreaded executors are likely to be used for running these Futures.   clippy::get_last_with_len C` / `<=`|`|` / `^`|`x | 2 > 3`|`x > 3`| |`<` / `>=`|`|` / `^`|`x ^ 1 < 4`|`x < 4`|   clippy::inefficient_to_string |uChecks for usage of `.to_string()` on an `&&T` where `T` implements `ToString` directly (like `&&str` or `&&String`).uu   (&clippy::infallible_destructuring_match&& unChecks for matches being used to destructure a single-variant enum or tuple struct where a `let` will suffice.nn   clippy::infinite_iter >7Checks for iteration that is guaranteed to be infinite.77   clippy::inherent_to_string f_Checks for the definition of inherent methods with a signature of `to_string(&self) -> String`.__   +)clippy::inherent_to_string_shadow_display)) Checks for the definition of inherent methods with a signature of `to_string(&self) -> String` and if the type implementing this method also implements the `Display` trait.   clippy::inline_always tmChecks for items annotated with `#[inline(always)]`, unless the annotated function is empty or simply panics.mm   #!clippy::inline_asm_x86_att_syntax!! 4-Checks for usage of AT&T x86 assembly syntax.--   %#clippy::inline_asm_x86_intel_syntax## 5.Checks for usage of Intel x86 assembly syntax...   clippy::inline_fn_without_body =6Checks for `#[inline]` on trait methods without bodies66   clippy::inspect_for_each 2+Checks for usage of `inspect().for_each()`.++   clippy::int_plus_one MFChecks for usage of `x >= y + 1` or `x - 1 >= y` (and `<=`) in a blockFF   clippy::integer_arithmetic Checks for integer arithmetic operations which could overflow or panic. Specifically, checks for any operators (`+`, `-`, `*`, `<<`, etc) which are capable of overflowing according to the [Rust Reference](https://doc.rust-lang.org/reference/expressions/operator-expr.html#overflow), or which can panic (`/`, `%`). No bounds analysis or sophisticated reasoning is attempted. _  clippy::integer_division &Checks for division of integers˃   clippy::into_iter_on_ref c\Checks for `into_iter` calls on references which should be replaced by `iter` or `iter_mut`.\\   clippy::invalid_null_ptr_usageυ :3This lint checks for invalid usages of `ptr::null`.33   clippy::invalid_regexچ Checks [regex](https://crates.io/crates/regex) creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`) for correct regex syntax.   $"clippy::invalid_upcast_comparisons""͈ Checks for comparisons where the relation is always either true or false, but where one side has been upcast so that the comparison is necessary. Only integer types are checked.   clippy::invisible_characters݊ ;4Checks for invisible Unicode characters in the code.44   clippy::items_after_statements A:Checks for items declared after some statement in a block.::  ֌ clippy::iter_cloned_collect NGChecks for the use of `.cloned().collect()` on slice to create a `Vec`.GG w  clippy::iter_count /(Checks for the use of `.iter().count()`.(( ]  clippy::iter_next_loop &Checks for loops on `x.next()`.ŏ  ۏ clippy::iter_next_slice A:Checks for usage of `iter().next()` on a Slice or an Array::ِ   %#clippy::iter_not_returning_iterator## leDetects methods named `iter` or `iter_mut` that do not have a return type that implements `Iterator`.ee   clippy::iter_nth }Checks for use of `.iter().nth()` (and the related `.iter_mut().nth()`) on standard library types with *O*(1) element access.}} v  clippy::iter_nth_zero +$Checks for the use of `iter.nth(0)`.$$   clippy::iter_skip_next 81Checks for use of `.skip(x).next()` on iterators.11   clippy::iterator_step_by_zeroƖ B;Checks for calling `.step_by(0)` on iterators which panics.;;   %#clippy::just_underscores_and_digits## WPChecks if you have variables whose name consists of just underscores and digits.PP˘   clippy::large_const_arrays RKChecks for large `const` arrays that should be defined as `static` instead.KK   clippy::large_digit_groups piWarns if the digits of an integral or floating-point constant are grouped into groups that are too large.ii  ϛ clippy::large_enum_variant E>Checks for large size differences between variants on `enum`s.>>Ԝ   clippy::large_stack_arrays 5.Checks for local arrays that may be too large...ߝ   %#clippy::large_types_passed_by_value## Checks for functions taking arguments by value, where the argument type is `Copy` and large enough to be worth considering passing by reference. Does not trigger if the function is being exported, because that might induce API breakage, if the parameter is declared as mutable, or if the argument is a `self`.   clippy::len_without_is_emptyš F?Checks for items that implement `.len()` but not `.is_empty()`.??   clippy::len_zeroע Checks for getting the length of something via `.len()` just to compare to zero, and suggests using `.is_empty()` where applicable.   clippy::let_and_return B;Checks for `let`-bindings, which are subsequently returned.;;   clippy::let_underscore_drop̥ OHChecks for `let _ = ` where expr has a type that implements `Drop`HH   clippy::let_underscore_lock kdChecks for `let _ = sync_lock`. This supports `mutex` and `rwlock` in `std::sync` and `parking_lot`.dd   !clippy::let_underscore_must_use >7Checks for `let _ = ` where expr is `#[must_use]`77 ^  clippy::let_unit_value ' Checks for binding a unit value.    clippy::linkedlist slChecks for usage of any `LinkedList`, suggesting to use a `Vec` or a `VecDeque` (formerly called `RingBuf`).ll   clippy::logic_bug TMChecks for boolean expressions that contain terminals that can be eliminated.MMɬ  ߬ clippy::lossy_float_literal mfChecks for whole number float literals that cannot be represented as the underlying type without loss.ff w  clippy::macro_use_importsծ (!Checks for `#[macro_use] use...`.!! }  clippy::main_recursionϯ 1*Checks for recursion using the entrypoint.**   clippy::manual_assertѰ F?Detects `if`-then-`panic!` that can be replaced with `assert!`.??   clippy::manual_async_fn A:It checks for manual implementations of `async` functions.::  β clippy::manual_filter_map c\Checks for usage of `_.filter(_).map(_)` that can be written more simply as `filter_map(_)`.\\   clippy::manual_find_map _XChecks for usage of `_.find(_).map(_)` that can be written more simply as `find_map(_)`.XX   clippy::manual_flatten yCheck for unnecessary `if let` usage in a for loop where only the `Some` or `Ok` variant of the iterator element is used.yy   clippy::manual_map JCChecks for usages of `match` which could be implemented using `map`CC   clippy::manual_memcpyи ohChecks for for-loops that manually copy items between slices that could be optimized by having a memcpy.hh̹   clippy::manual_non_exhaustive G@Checks for manual implementations of the non-exhaustive pattern.@@   clippy::manual_ok_or 70Finds patterns that reimplement `Option::ok_or`.00   clippy::manual_range_contains slChecks for expressions like `x >= 3 && x < 8` that could be more readably expressed as `(3..8).contains(x)`.ll  ս &$clippy::manual_saturating_arithmetic$$ ;4Checks for `.checked_add/sub(x).unwrap_or(MAX/MIN)`.44ھ ~  clippy::manual_split_once /(Checks for usages of `str::splitn(2, _)`((޿   clippy::manual_str_repeat 92Checks for manual implementations of `str::repeat`22   clippy::manual_strip tmSuggests using `strip_{prefix,suffix}` over `str::{starts,ends}_with` and slicing using the pattern's length.mm V  clippy::manual_swap "Checks for manual swapping.   clippy::manual_unwrap_or RKFinds patterns that reimplement `Option::unwrap_or` or `Result::unwrap_or`.KK   clippy::many_single_char_names OHChecks for too many variables whose name consists of a single character.HH   clippy::map_clone Checks for usage of `map(|x| x.clone())` or dereferencing closures for `Copy` types, on `Iterator` or `Option`, and suggests `cloned()` or `copied()` instead   !clippy::map_collect_result_unit @9Checks for usage of `_.map(_).collect::()`.99   clippy::map_entry OHChecks for uses of `contains_key` + `insert` on `HashMap` or `BTreeMap`.HH   clippy::map_err_ignore 81Checks for instances of `map_err(|_| Some::Enum)`11   clippy::map_flatten KDChecks for usage of `_.map(_).flatten(_)` on `Iterator` and `Option`DD   clippy::map_identity KDChecks for instances of `map(f)` where `f` is the identity function.DD   clippy::map_unwrap_or {Checks for usage of `option.map(_).unwrap_or(_)` or `option.map(_).unwrap_or_else(_)` or `result.map(_).unwrap_or_else(_)`.{{   clippy::match_as_ref NGChecks for match which is used to add a reference to an `Option` value.GG   clippy::match_bool ~wChecks for matches where match expression is a `bool`. It suggests to replace the expression with an `if...else` block.ww   " clippy::match_like_matches_macro  leChecks for `match` or `if let` expressions producing a `bool` that could be written using `matches!`ee   clippy::match_on_vec_items 81Checks for `match vec[idx]` or `match vec[n..m]`.11 |  clippy::match_overlapping_arm )"Checks for overlapping match arms.""   clippy::match_ref_pats Checks for matches where all arms match a reference, suggesting to remove the reference and deref the matched expression instead. It also checks for `if let &foo = bar` blocks.   clippy::match_result_ok 4-Checks for unnecessary `ok()` in `while let`.--   clippy::match_same_arms 4-Checks for `match` with identical arm bodies.--   clippy::match_single_binding =6Checks for useless match that binds to only one value.66   !clippy::match_str_case_mismatch \UChecks for `match` expressions modifying the case of a string with non-compliant armsUU   clippy::match_wild_err_arm d]Checks for arm which matches all errors with `Err(_)` and take drastic actions like `panic!`.]]   ,*clippy::match_wildcard_for_single_variants** =6Checks for wildcard enum matches for a single variant.66   clippy::maybe_infinite_iter 1*Checks for iteration that may be infinite.**   clippy::mem_forget E>Checks for usage of `std::mem::forget(t)` where `t` is `Drop`.>>   &$clippy::mem_replace_option_with_none$$ >7Checks for `mem::replace()` on an `Option` with `None`.77   " clippy::mem_replace_with_default  QJChecks for `std::mem::replace` on a value of type `T` with `T::default()`.JJ   !clippy::mem_replace_with_uninit ibChecks for `mem::replace(&mut _, mem::uninitialized())` and `mem::replace(&mut _, mem::zeroed())`.bb   clippy::min_max }Checks for expressions where `std::cmp::min` and `max` are used to clamp values, but switched so that the result is constant.}}   clippy::misaligned_transmute .'Nothing. This lint has been deprecated.''   clippy::mismatched_target_os YRChecks for cfg attributes having operating systems used in target family position.RR   !clippy::misrefactored_assign_op <5Checks for `a op= a op b` or `a op= b op a` patterns.55   clippy::missing_const_for_fn KDSuggests the use of `const` in functions and methods where possible.DD   '%clippy::missing_docs_in_private_items%% SLWarns if there is missing doc for any documentable item (public or private).LL   )'clippy::missing_enforced_import_renames'' qjChecks for imports that do not rename the item as specified in the `enforce-import-renames` config option.jj   clippy::missing_errors_doc ~Checks the doc comments of publicly visible functions that return a `Result` type and warns if there is no `# Errors` section.~~   (&clippy::missing_inline_in_public_items&& yrIt lints if an exported function, method, trait method with default impl, or trait method impl is not `#[inline]`.rr   clippy::missing_panics_doc xqChecks the doc comments of publicly visible functions that may panic and warns if there is no `# Panics` section.qq   clippy::missing_safety_doc tmChecks for the doc comments of publicly visible unsafe functions and warns if there is no `# Safety` section.mm   #!clippy::mistyped_literal_suffixes!! ,%Warns for mistyped suffix in literals%%   !clippy::mixed_case_hex_literals C` where an atomic will do.88   clippy::mutex_integer E>Checks for usages of `Mutex` where `X` is an integral type.>> [ ˋ clippy::naive_bytecount #Checks for naive byte counts   &$clippy::needless_arbitrary_self_type$$ ZSThe lint checks for `self` in fn parameters that specify the `Self`-type explicitlySS؍   clippy::needless_bitwise_bool {tChecks for uses of bitwise and/or operators between booleans, where performance may be improved by using a lazy and.tt   clippy::needless_bool |Checks for expressions of the form `if c { true } else { false }` (or vice versa) and suggests using the condition directly.||   clippy::needless_borrowƑ leChecks for address of operations (`&`) that are going to be dereferenced immediately by the compiler.ee  Ւ %#clippy::needless_borrowed_reference## _XChecks for bindings that destructure a reference and borrow the inner value with `&ref`.XX   clippy::needless_collectĔ NGChecks for functions collecting an iterator when collect is not needed.GG   clippy::needless_continue The lint checks for `if`-statements appearing in loops that contain a `continue` statement in either their main blocks or their `else`-blocks, when omitting the `else`-block possibly with some rearrangement of code can make the code easier to understand.   clippy::needless_doctest_mainŘ 0)Checks for `fn main() { .. }` in doctests))   clippy::needless_for_eachʙ XQChecks for usage of `for_each` that would be more simply written as a `for` loop.QQ  Ś clippy::needless_late_init e^Checks for late initializations that can be replaced by a `let` statement with an initializer.^^   clippy::needless_lifetimes [TChecks for lifetime annotations which can be removed by relying on lifetime elision.TT   " clippy::needless_option_as_deref  }vChecks for no-op uses of Option::{as_deref,as_deref_mut}, for example, `Option<&T>::as_deref()` returns the same type.vv   clippy::needless_pass_by_value ZSChecks for functions taking arguments by value, but not consuming them in its body.SS   clippy::needless_question_mark WPSuggests alternatives for useless applications of `?` in terminating expressionsPP١   clippy::needless_range_loop haChecks for looping over the range of `0..len` of some collection just to get the values by index.aa   clippy::needless_returnޣ :3Checks for return statements at the end of a block.33   clippy::needless_splitn ibChecks for usages of `str::splitn` (or `str::rsplitn`) where using `str::split` would be the same.bb   clippy::needless_update Checks for needlessly including a base struct on update when all fields are changed anyway. This lint is not applied to structs marked with [non_exhaustive](https://doc.rust-lang.org/reference/attributes/type_system.html).   #!clippy::neg_cmp_op_on_partial_ord!! unChecks for the usage of negated comparison operators on types which only implement `PartialOrd` (e.g., `f64`).nn   clippy::neg_multiply =6Checks for multiplication by -1 as a form of negation.66   clippy::negative_feature_namesƫ D=Checks for negative feature names with prefix `no-` or `not-`==   clippy::never_loopج WPChecks for loops that will always `break`, `return` or `continue` an outer loop.PP  ҭ clippy::new_ret_no_self B;Checks for `new` not returning a type that contains `Self`.;;Ѯ   clippy::new_without_default Checks for types with a `fn new() -> Self` method and no implementation of [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html). y ְ clippy::no_effect 2+Checks for statements which have no effect.++  ձ &$clippy::no_effect_underscore_binding$$ OHChecks for binding to underscore prefixed variable without side-effects.HH   clippy::non_ascii_literal CChecks for non-octal values used to set Unix file permissions.>>   $"clippy::non_send_fields_in_send_ty"" This lint warns about a `Send` implementation for a type that contains fields that are not safe to be sent across threads. It tries to detect fields that can cause a soundness issue when sent to another thread (e.g., `Rc`) while allowing `!Send` fields that are expected to exist in a `Send` type, such as raw pointers.͸   clippy::nonminimal_bool IBChecks for boolean expressions that can be written more concisely.BB   " clippy::nonsensical_open_options  TMChecks for duplicate open options as well as combinations that make no sense.MM   " clippy::nonstandard_macro_braces  B;Checks that common macros are used with consistent bracing.;;  ͼ " clippy::not_unsafe_ptr_arg_deref  f_Checks for public functions that dereference raw pointer arguments but are not marked `unsafe`.__   clippy::octal_escapes haChecks for `\\0` escapes in string and byte literals that look like octal character escapes in C.aa _  clippy::ok_expect -&Checks for usage of `ok().expect(..)`.&&   clippy::op_ref Checks for arguments to `==` which have their address taken to satisfy a bound and suggests to dereference the other argument instead   clippy::option_as_ref_deref c\Checks for usage of `_.as_ref().map(Deref::deref)` or it's aliases (such as String::as_str).\\   clippy::option_env_unwrap ^WChecks for usage of `option_env!(...).unwrap()` and suggests usage of the `env!` macro.WW   clippy::option_filter_map ;4Checks for indirect collection of populated `Option`44   clippy::option_if_let_else Lints usage of `if let Some(v) = ... { y } else { x }` which is more idiomatically done with `Option::map_or` (if the else bit is a pure expression) or `Option::map_or_else` (if the else bit is an impure expression).   clippy::option_map_or_none /(Checks for usage of `_.map_or(None, _)`.((   clippy::option_map_unit_fn leChecks for usage of `option.map(f)` where f is a function or closure that returns the unit type `()`.ee   clippy::option_option XQChecks for use of `Option>` in function signatures and type definitionsQQ   clippy::or_fun_call Checks for calls to `.or(foo(..))`, `.unwrap_or(foo(..))`, etc., and suggests to use `or_else`, `unwrap_or_else`, etc., or `unwrap_or_default` instead.   clippy::out_of_bounds_indexing E>Checks for out of bounds array indexing with a constant index.>>   $"clippy::overflow_check_conditional"" 1*Detects classic underflow/overflow checks.** R   clippy::panic  $Checks for usage of `panic!`.   clippy::panic_in_result_fn zsChecks for usage of `panic!`, `unimplemented!`, `todo!`, `unreachable!` or assertions in a function of type result.ss   clippy::panicking_unwrap B;Checks for calls of `unwrap[_err]()` that will always fail.;;   clippy::partialeq_ne_impl ?8Checks for manual re-implementations of `PartialEq::ne`.88   !clippy::path_buf_push_overwrite * Checks for [push](https://doc.rust-lang.org/std/path/struct.PathBuf.html#method.push) calls on `PathBuf` that can cause overwrites.   clippy::pattern_type_mismatch  Checks for patterns that aren't exact representations of the types they are applied to. To satisfy this lint, you will have to adjust either the expression that is matched against or the pattern itself, as well as the bindings that are introduced by the adjusted patterns. For matching you will have to either dereference the expression with the `*` operator, or amend the patterns to explicitly match against `&` or `&mut ` depending on the reference mutability. For the bindings you need to use the inverse. You can leave them as plain bindings if you wish for the value to be copied, but you must use `ref mut ` or `ref ` to construct a reference into the matched structure. If you are looking for a way to learn about ownership semantics in more detail, it is recommended to look at IDE options available to you to highlight types, lifetimes and reference semantics in your code. The available tooling would expose these things in a general way even outside of the various pattern matching mechanics. Of course this lint can still be used to highlight areas of interest and ensure a good understanding of ownership semantics.    clippy::possible_missing_comma Checks for possible missing comma in an array. It lints if an array element is a binary operator expression and it lies on two lines.   clippy::precedence Checks for operations where precedence may be unclear and suggests to add parentheses. Currently it catches the following: * mixed usage of arithmetic and bit shifting/combining operators without parentheses * a negative numeric literal (which is really a unary `-` followed by a numeric literal) followed by a method call   clippy::print_literal MFThis lint warns about the use of literals as `print!`/`println!` args.FF   clippy::print_stderr `YChecks for printing on *stderr*. The purpose of this lint is to catch debugging remnants.YY   clippy::print_stdout `YChecks for printing on *stdout*. The purpose of this lint is to catch debugging remnants.YY   clippy::print_with_newline [TThis lint warns when you use `print!()` with a format string that ends in a newline.TT   clippy::println_empty_string D=This lint warns when you use `println!()` to print a newline.==   clippy::ptr_arg This lint checks for function arguments of type `&String` or `&Vec` unless the references are mutable. It will also suggest you replace `.clone()` calls with the appropriate `.to_owned()`/`to_string()` calls.   clippy::ptr_as_ptr Checks for `as` casts between raw pointers without changing its mutability, namely `*const T` to `*const U` and `*mut T` to `*mut U`. X  clippy::ptr_eq )"Use `std::ptr::eq` when applicable""   clippy::ptr_offset_with_cast [TChecks for usage of the `offset` pointer method with a `usize` casted to an `isize`.TT   clippy::pub_enum_variant_names .'Nothing. This lint has been deprecated.''   clippy::question_mark SLChecks for expressions that could be replaced by the question mark operator.LL   clippy::range_minus_one aZChecks for inclusive ranges where 1 is subtracted from the upper bound, e.g., `x..=(y-1)`.ZZ   clippy::range_plus_one YRChecks for exclusive ranges where 1 is added to the upper bound, e.g., `x..(y+1)`.RR ~  clippy::range_step_by_zero .'Nothing. This lint has been deprecated.''   clippy::range_zip_with_len F?Checks for zipping a collection with the range of `0.._.len()`.??   clippy::rc_buffer c\Checks for `Rc` and `Arc` when `T` is a mutable buffer type such as `String` or `Vec`.\\ R  clippy::rc_mutex !Checks for `Rc>`.   clippy::redundant_allocation D=Checks for use of redundant allocations anywhere in the code.==   clippy::redundant_clone Checks for a redundant `clone()` (and its relatives) which clones an owned value that is going to be dropped without further use.   clippy::redundant_closure Checks for closures which just call another function where the function can be called directly. `unsafe` functions or calls where types get adjusted are ignored.Ҁ   clippy::redundant_closure_call MFDetects closures called in the same expression where they are defined.FF   ,*clippy::redundant_closure_for_method_calls**҂ ~Checks for closures which only invoke a method on the closure argument and can be replaced by referencing the method directly.~~   clippy::redundant_else OHChecks for `else` blocks that can be removed without changing semantics.HH   !clippy::redundant_feature_namesӅ PIChecks for feature names with prefix `use-`, `with-` or suffix `-support`II  Ɔ clippy::redundant_field_names KDChecks for fields in struct literals where shorthands could be used.DDԇ   clippy::redundant_pattern 2+Checks for patterns in the form `name @ _`.++ۈ   $"clippy::redundant_pattern_matching"" kdLint for redundant pattern matching over `Result`, `Option`, `std::task::Poll` or `std::net::IpAddr`dd   clippy::redundant_pub_crate rkChecks for items declared `pub(crate)` that are not crate visible because they are inside a private module.kk   clippy::redundant_slicing e^Checks for redundant slicing expressions which use the full range, and do not change the type.^^   $"clippy::redundant_static_lifetimes"" LEChecks for constants and statics with an explicit `'static` lifetime.EEю   " clippy::ref_binding_to_reference  IBChecks for `ref` bindings which create a reference to a reference.BB   clippy::ref_in_deref F?Checks for references in expressions that use auto dereference.?? u  clippy::ref_option_refё )"Checks for usage of `&Option<&T>`."" w  clippy::regex_macroɒ .'Nothing. This lint has been deprecated.''   clippy::repeat_onceƓ Checks for usage of `.repeat(1)` and suggest the following method for each types. - `.to_string()` for `str` - `.clone()` for `String` - `.to_vec()` for `slice` The lint will evaluate constant expressions and values as arguments of `.repeat(..)` and emit a message if they are equivalent to `1`. (Related discussion in [rust-clippy#7306](https://github.com/rust-lang/rust-clippy/issues/7306)) z  clippy::replace_consts .'Nothing. This lint has been deprecated.''   )'clippy::rest_pat_in_fully_bound_structs'' d]Checks for unnecessary '..' pattern binding on struct when all fields are explicitly matched.]]   #!clippy::result_map_or_into_option!! 2+Checks for usage of `_.map_or(None, Some)`.++  Ϛ clippy::result_map_unit_fn leChecks for usage of `result.map(f)` where f is a function or closure that returns the unit type `()`.ee   clippy::result_unit_err Checks for public functions that return a `Result` with an `Err` type of `()`. It suggests using a custom type that implements `std::error::Error`.   " clippy::return_self_not_must_use  _XThis lint warns when a method returning `Self` doesn't have the `#[must_use]` attribute.XX   clippy::reversed_empty_ranges rkChecks for range expressions `x..y` where both `x` and `y` are constant and `x` is greater or equal to `y`.kk   (&clippy::same_functions_in_if_condition&&á @9Checks for consecutive `if`s with the same function call.99   clippy::same_item_pushբ SLChecks whether a for loop is being used to push a constant value into a Vec.LL  ˣ clippy::same_name_method ibIt lints if a struct has two methods with the same name: one from a trait, another not from trait.bb   clippy::search_is_some Checks for an iterator or string search (such as `find()`, `position()`, or `rposition()`) followed by a call to `is_some()` or `is_none()`.צ y  clippy::self_assignment ,%Checks for explicit self-assignments.%%֧   !clippy::self_named_constructors A:Warns when constructors have the same name as their types.::   !clippy::self_named_module_files 81Checks that module layout uses only mod.rs files.11   '%clippy::semicolon_if_nothing_returned%%٪ xqLooks for blocks of expressions and fires if the last expression returns `()` but is not followed by a semicolon.qqޫ   " clippy::separated_literal_suffix  Warns if literal suffixes are separated by an underscore. To enforce separated literal suffix style, see the `unseparated_literal_suffix` lint.Э z  clippy::serde_api_misuse ,%Checks for mis-uses of the serde API.%%Ю   clippy::shadow_reuse ibChecks for bindings that shadow other bindings already in scope, while reusing the original value.bb   clippy::shadow_same˰ zsChecks for bindings that shadow other bindings already in scope, while just changing reference level or mutability.ssұ   clippy::shadow_unrelated Checks for bindings that shadow other bindings already in scope, either without an initialization or with one that does not even use the original value.ų  ۳ !clippy::short_circuit_statement MFChecks for the use of short circuit boolean conditions as a statement.FF |  clippy::should_assert_eq .'Nothing. This lint has been deprecated.''   clippy::should_implement_trait Checks for methods that should live in a trait implementation of a `std` trait (see [llogiq's blog post](http://llogiq.github.io/2015/07/30/traits.html) for further information) instead of an inherent implementation.   clippy::similar_names A:Checks for names that are very similar and thus confusing.::  й clippy::single_char_add_str Warns when using `push_str`/`insert_str` with a single-character string literal where `push`/`insert` with a `char` would work fine.   clippy::single_char_pattern jcChecks for string methods that receive a single-character `str` as an argument, e.g., `_.split(x)`.ccݼ   '%clippy::single_component_path_imports%% ;4Checking for imports with single component use path.44   clippy::single_element_loopþ 6/Checks whether a for loop has a single element.//   clippy::single_matchɿ SLChecks for matches with a single arm where an `if let` will usually suffice.LL   clippy::single_match_else TMChecks for matches with two arms where an `if let else` will usually suffice.MM   " clippy::size_of_in_element_count  piDetects expressions where `size_of::` or `size_of_val::` is used as a count of elements of type `T`ii   clippy::skip_while_next <5Checks for usage of `_.skip_while(condition).next()`.55   $"clippy::slow_vector_initialization"" 4-Checks slow zero-filled vector initialization--   clippy::stable_sort_primitive When sorting primitive values (integers, bools, chars, as well as arrays, slices, and tuples of such items), it is better to use an unstable sort than a stable sort.   clippy::str_to_string QJThis lint checks for `.to_string()` method calls on values of type `&str`.JJ   clippy::string_add Checks for all instances of `x + _` where `x` is of type `String`, but only if [`string_add_assign`](#string_add_assign) does *not* match.   clippy::string_add_assign JCChecks for string appends of the form `x = x + y` (without `let`!).CC   clippy::string_extend_chars RKChecks for the use of `.extend(s.chars())` where s is a `&str` or `String`.KK   #!clippy::string_from_utf8_as_bytes!! RKCheck if the string is transformed to byte array and casted back to string.KK   clippy::string_lit_as_bytes e^Checks for the `as_bytes` method called on string literals that contain only ASCII characters.^^ w  clippy::string_slice -&Checks for slice operations on strings&&   clippy::string_to_string SLThis lint checks for `.to_string()` method calls on values of type `String`.LL   clippy::strlen_on_c_strings Checks for usage of `libc::strlen` on a `CString` or `CStr` value, and suggest calling `as_bytes().len()` or `to_bytes().len()` respectively instead.   clippy::struct_excessive_bools 4-Checks for excessive use of bools in structs.--   clippy::suboptimal_flops {Looks for floating-point expressions that can be expressed using built-in methods to improve both accuracy and performance.{{   $"clippy::suspicious_arithmetic_impl"" rkLints for suspicious operations in impls of arithmetic operators, e.g. subtracting elements in an Add impl.kk   *(clippy::suspicious_assignment_formatting(( G@Checks for use of the nonexistent `=*`, `=!` and `=-` operators.@@   $"clippy::suspicious_else_formatting"" Checks for formatting of `else`. It lints if the `else` is followed immediately by a newline or the `else` seems to be missing.   clippy::suspicious_map 70Checks for calls to `map` followed by a `count`.00   #!clippy::suspicious_op_assign_impl!! leLints for suspicious operations in impls of OpAssign, e.g. subtracting elements in an AddAssign impl.ee   (&clippy::suspicious_operation_groupings&& Checks for unlikely usages of binary operators that are almost certainly typos and/or copy/paste errors, given the other usages of binary operators nearby.   clippy::suspicious_splitn Checks for calls to [`splitn`] (https://doc.rust-lang.org/std/primitive.str.html#method.splitn) and related functions with either zero or one splits.   (&clippy::suspicious_unary_op_formatting&& Checks the formatting of a unary operator on the right hand side of a binary operator. It lints if there is no space between the binary and unary operators, but there is a space between the unary and its operand.   clippy::tabs_in_doc_comments 70Checks doc comments for usage of tab characters.00   clippy::temporary_assignment TMChecks for construction of a structure or tuple just to assign a value in it.MM   clippy::to_digit_is_some 70Checks for `.to_digit(..).is_some()` on `char`s.00   clippy::to_string_in_display <5Checks for uses of `to_string()` in `Display` traits.55   " clippy::to_string_in_format_args  Checks for [`ToString::to_string`](https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod.to_string) applied to a type that implements [`Display`](https://doc.rust-lang.org/std/fmt/trait.Display.html) in a macro that does formatting. P   clippy::todo  #Checks for usage of `todo!`.   clippy::too_many_arguments 5.Checks for functions with too many parameters...   clippy::too_many_lines 92Checks for functions with a large amount of lines.22   clippy::toplevel_ref_arg G@Checks for function arguments and let bindings denoted as `ref`.@@   clippy::trailing_empty_array piDisplays a warning when a struct with a trailing zero-sized array is declared without a `repr` attribute.ii   %#clippy::trait_duplication_in_bounds## {Checks for cases where generics are being used and multiple syntax specifications for trait bounds are used simultaneously.{{   clippy::transmute_bytes_to_str 81Checks for transmutes from a `&[u8]` to a `&str`.11   clippy::transmute_float_to_int 81Checks for transmutes from a float to an integer.11   clippy::transmute_int_to_bool 92Checks for transmutes from an integer to a `bool`.22   clippy::transmute_int_to_char 92Checks for transmutes from an integer to a `char`.22   clippy::transmute_int_to_float 81Checks for transmutes from an integer to a float.11   clippy::transmute_num_to_bytes >7Checks for transmutes from a number to an array of `u8`77   clippy::transmute_ptr_to_ptr ]VChecks for transmutes from a pointer to a pointer, or from a reference to a reference.VV   clippy::transmute_ptr_to_ref ;4Checks for transmutes from a pointer to a reference.44   -+clippy::transmutes_expressible_as_ptr_casts++ :3Checks for transmutes that could be a pointer cast.33   clippy::transmuting_null E>Checks for transmute calls which would receive a null pointer.>>   clippy::trivial_regex Checks for trivial [regex](https://crates.io/crates/regex) creation (with `Regex::new`, `RegexBuilder::new`, or `RegexSet::new`). $"clippy::trivially_copy_pass_by_ref""ՁChecks for functions taking arguments by reference, where the argument type is `Copy` and small enough to be more efficient to always pass by value.V clippy::try_err&Checks for usages of `Err(x)?`.ك clippy::type_complexitypiChecks for types used in structs, parameters and `let` declarations above a certain complexity threshold.ii #!clippy::type_repetition_in_bounds!!IBThis lint warns about unnecessary type repetitions in trait boundsBB† ؆$"clippy::undocumented_unsafe_blocks""Checks for `unsafe` blocks without a `// Safety: ` comment explaining why the unsafe operations performed inside the block are safe. " clippy::undropped_manually_drops aZPrevents the safe `std::mem::drop` function from being called on `std::mem::ManuallyDrop`.ZZ clippy::unicode_not_nfcChecks for string literals that contain Unicode in a form that is not equal to its [NFC-recomposition](http://www.unicode.org/reports/tr15/#Norm_Forms).ڋw clippy::unimplemented,%Checks for usage of `unimplemented!`.%%׌ clippy::uninit_assumed_init81Checks for `MaybeUninit::uninit().assume_init()`.11 clippy::uninit_vecChecks for `set_len()` call that creates `Vec` with uninitialized elements. This is commonly caused by calling `set_len()` right after allocating or reserving a buffer with `new()`, `default()`, `with_capacity()`, or `reserve()`. clippy::unit_argߐhaChecks for passing a unit value as an argument to a function without using a unit literal (`()`).aaԑ clippy::unit_cmpleChecks for comparisons to unit. This includes all binary comparisons (like `==` and `<`) and asserts.eeN clippy::unit_hashDetects `().hash(_)`. #!clippy::unit_return_expecting_ord!!Checks for functions that expect closures of type Fn(...) -> Ord where the implemented closure returns the unit type. The lint also suggests to remove the semi-colon at the end of the statement if present. clippy::unnecessary_castؖ|uChecks for casts to the same type, casts of int literals to integer types and casts of float literals to float types.uu  clippy::unnecessary_filter_mapChecks for `filter_map` calls which could be replaced by `filter` or `map`. More specifically it checks if the closure provided is only performing one of the filter or map operations and suggests the appropriate option. clippy::unnecessary_foldChecks for using `fold` when a more succinct alternative exists. Specifically, this checks for `fold`s which could be replaced by `any`, `all`, `sum` or `product`. &$clippy::unnecessary_lazy_evaluations$$As the counterpart to `or_fun_call`, this lint looks for unnecessary lazily evaluated closures on `Option` and `Result`. This lint suggests changing the following functions, when eager evaluation results in simpler code: - `unwrap_or_else` to `unwrap_or` - `and_then` to `and` - `or_else` to `or` - `get_or_insert_with` to `get_or_insert` - `ok_or_else` to `ok_or`  clippy::unnecessary_mut_passedc\Detects passing a mutable reference to a function that only requires an immutable reference.\\ ǡclippy::unnecessary_operationPIChecks for expression statements that can be reduced to a sub-expression.IIڢ " clippy::unnecessary_self_imports /(Checks for imports ending in `::{self}`.(( clippy::unnecessary_sort_by{tDetects uses of `Vec::sort_by` passing in a closure which compares the two arguments, either directly or indirectly.tt ͥclippy::unnecessary_to_ownedChecks for unnecessary calls to [`ToOwned::to_owned`](https://doc.rust-lang.org/std/borrow/trait.ToOwned.html#tymethod.to_owned) and other `to_owned`-like functions. ѧclippy::unnecessary_unwrap=6Checks for calls of `unwrap[_err]()` that cannot fail.66Ψ clippy::unnecessary_wrapsD=Checks for private functions that only return `Ok` or `Some`.==  clippy::unneeded_field_pattern>7Checks for structure field patterns bound to wildcards.77 #!clippy::unneeded_wildcard_pattern!!ϫChecks for tuple patterns with a wildcard pattern (`_`) is next to a rest pattern (`..`). _NOTE_: While `_, ..` means there is at least one element left, `..` means there are 0 or more elements left. This can make a difference when refactoring, but shouldn't result in errors in the refactored code, since the wildcard pattern isn't used anyway. Ӯclippy::unnested_or_patternsChecks for unnested or-patterns, e.g., `Some(0) | Some(2)` and suggests replacing the pattern with a nested one, `Some(0 | 2)`. Another way to think of this is that it rewrites patterns in *disjunctive normal form (DNF)* into *conjunctive normal form (CNF)*.^ clippy::unreachableѱ*#Checks for usage of `unreachable!`.## clippy::unreadable_literal̲XQWarns if a long integral or floating-point constant does not contain underscores.QQ dz#!clippy::unsafe_derive_deserialize!!ZSChecks for deriving `serde::Deserialize` on a type that has methods using `unsafe`.SS " clippy::unsafe_removed_from_name A:Checks for imports that remove unsafe from an item's name.:: &$clippy::unsafe_vector_initialization$$ض.'Nothing. This lint has been deprecated.'' $"clippy::unseparated_literal_suffix""Warns if literal suffixes are not separated by an underscore. To enforce unseparated literal suffix style, see the `separated_literal_suffix` lint. &$clippy::unsound_collection_transmute$$޹c\Checks for transmutes between collections whose types have different ABI, size or alignment.\\κ clippy::unstable_as_mut_slice.'Nothing. This lint has been deprecated.''ջ} clippy::unstable_as_slice.'Nothing. This lint has been deprecated.''ؼ clippy::unused_async[TChecks for functions that are declared `async` but have no `.await`s inside of them.TTz clippy::unused_collectȾ.'Nothing. This lint has been deprecated.''{ clippy::unused_io_amountʿ-&Checks for unused written/read amount.&& clippy::unused_selfE>Checks methods that contain a `self` argument but don't use it>> clippy::unused_unit>7Checks for unit (`()`) expressions that can be removed.77  clippy::unusual_byte_groupingsQJWarns if hexadecimal or binary literals are not grouped by nibble or byte.JJ clippy::unwrap_in_resultRKChecks for functions of type `Result` that contain `expect()` or `unwrap()`KK  clippy::unwrap_or_else_defaultaZChecks for usages of `_.unwrap_or_else(Default::default)` on `Option` and `Result` values.ZZ clippy::unwrap_usedB;Checks for `.unwrap()` calls on `Option`s and on `Result`s.;; clippy::upper_case_acronyms`YChecks for fully capitalized names and optionally names containing a capitalized acronym.YY clippy::use_debuge^Checks for use of `Debug` formatting. The purpose of this lint is to catch debugging remnants.^^ clippy::use_selfhaChecks for unnecessary repetition of structure name when a replacement with `Self` is applicable.aa !clippy::used_underscore_bindingG@Checks for the use of bindings with a single leading underscore.@@ clippy::useless_asrefmfChecks for usage of `.as_ref()` or `.as_mut()` where the types before and after the call are the same.ff clippy::useless_attributeChecks for `extern crate` and `use` items annotated with lint attributes. This lint permits `#[allow(unused_imports)]`, `#[allow(deprecated)]`, `#[allow(unreachable_pub)]`, `#[allow(clippy::wildcard_imports)]` and `#[allow(clippy::enum_glob_use)]` on `use` items and `#[allow(unused_imports)]` on `extern crate` items with a `#[macro_use]` attribute. clippy::useless_conversionunChecks for `Into`, `TryInto`, `From`, `TryFrom`, or `IntoIter` calls which uselessly convert to the same type.nn clippy::useless_formatwpChecks for the use of `format!(string literal with no argument)` and `format!({}, foo)` where `foo` is a string.pp clippy::useless_let_if_seqZSChecks for variable declarations immediately followed by a conditional affectation.SS clippy::useless_transmuted]Checks for transmutes to the original type of the object and transmutes that could be a cast.]] clippy::useless_vecLEChecks for usage of `&vec![..]` when using `&[..]` would be possible.EE clippy::vec_boxChecks for use of `Vec>` where T: Sized anywhere in the code. Check the [Box documentation](https://doc.rust-lang.org/std/boxed/index.html) for more information. clippy::vec_init_then_pushIBChecks for calls to `push` immediately after creating a new `Vec`.BB clippy::vec_resize_to_zero4-Finds occurrences of `Vec::resize(0, an_int)`-- clippy::verbose_bit_maskNGChecks for bit masks that can be replaced by a call to `trailing_zeros`GG clippy::verbose_file_readsD=Checks for use of File::read_to_end and File::read_to_string.== $"clippy::vtable_address_comparisons""@9Checks for comparisons with an address of a trait vtable.99 #!clippy::while_immutable_condition!!f_Checks whether variables used within while loop condition can be (and are) mutated in the body.__ clippy::while_let_loopYRDetects `loop + match` combinations that are easier written as a `while let` loop.RR clippy::while_let_on_iterator70Checks for `while let` expressions on iterators.00 clippy::wildcard_dependencies<5Checks for wildcard dependencies in the `Cargo.toml`.55 !clippy::wildcard_enum_match_arm2+Checks for wildcard enum matches using `_`.++| clippy::wildcard_imports.'Checks for wildcard imports `use _::*`.'' !clippy::wildcard_in_or_patternsOHChecks for wildcard pattern used with others patterns in same match arm.HH clippy::write_literalMFThis lint warns about the use of literals as `write!`/`writeln!` args.FF clippy::write_with_newline[TThis lint warns when you use `write!()` with a format string that ends in a newline.TT clippy::writeln_empty_stringIBThis lint warns when you use `writeln!(buf, )` to print a newline.BB #!clippy::wrong_pub_self_convention!!.'Nothing. This lint has been deprecated.''  clippy::wrong_self_convention  Checks for methods with certain name prefixes and which doesn't match how self is taken. The actual rules are: |Prefix |Postfix |`self` taken | `self` type | |-------|------------|-----------------------|--------------| |`as_` | none |`&self` or `&mut self` | any | |`from_`| none | none | any | |`into_`| none |`self` | any | |`is_` | none |`&self` or none | any | |`to_` | `_mut` |`&mut self` | any | |`to_` | not `_mut` |`self` | `Copy` | |`to_` | not `_mut` |`&self` | not `Copy` | Note: Clippy doesn't trigger methods with `to_` prefix in: - Traits definition. Clippy can not tell if a type that implements a trait is `Copy` or not. - Traits implementation, when `&self` is taken. The method signature is controlled by the trait and often `&self` is required for all types that implement the trait (see e.g. the `std::string::ToString` trait). Clippy allows `Pin<&Self>` and `Pin<&mut Self>` if `&self` and `&mut self` is required. Please find more info here: https://rust-lang.github.io/api-guidelines/naming.html#ad-hoc-conversions-follow-as_-to_-into_-conventions-c-conv  clippy::wrong_transmuteLEChecks for transmutes that can't ever be correct on any architecture.EE[ clippy::zero_divided_by_zeroChecks for `0.0 / 0.0`. clippy::zero_prefixed_literal=6Warns if an integral constant literal starts with `0`.66v clippy::zero_ptr0)Catch casts from `0` to some pointer type)) clippy::zero_sized_map_valuesHAChecks for maps with zero-sized value types anywhere in the code.AA clippy::zst_offsetb[Checks for `offset(_)`, `wrapping_`{`add`, `sub`}, etc. on raw pointers to zero-sized types[[܂        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ۂ ۂ  !ۂ !܂        v “    ٞ            u                  U            Z                   u |    ӈ    ^  VŐ    |   ޚ      Ϣ   Ŧ  }  Ы   v v   y _ | ö \     Ŀ               ~                             _˃        w ]ŏ ِ   v   ˘   Ԝ ߝ        ^  ɬ  w }       ̹    ھ ~޿   V              |                             ^     ˃  y v     [ ؍             ١         Ѯ  y    ͸      _            R               X      ~   R   Ҁ     ԇ ۈ    ю   u w  z          צ y֧   ޫ Э zЮ  ұ ų  |    ݼ               w                  P                Vك†ڋw׌ԑNڢΨ^κջ}ؼz{| [vۂ @  @A ///׀2ř [ř/ř/ƙ& E//  // //5 ]//  //$ A//<# l#/#/# ›Ġ/Ġ/Ġ/Š/&[LintGroup{ lint: Lint{ label: "clippy::cargo", description: r##"lint group for: clippy::cargo_common_metadata, clippy::multiple_crate_versions, clippy::negative_feature_names, clippy::redundant_feature_names, clippy::wildcard_dependencies"##,}, children: &["clippy::cargo_common_metadata", "clippy::multiple_crate_versions", "clippy::negative_feature_names", "clippy::redundant_feature_names", "clippy::wildcard_dependencies"],}, LintGroup{ lint: Lint{ label: "clippy::complexity", description: r##"lint group for: clippy::bind_instead_of_map, clippy::bool_comparison, clippy::borrowed_box, clippy::char_lit_as_u8, clippy::clone_on_copy, clippy::crosspointer_transmute, clippy::deprecated_cfg_attr, clippy::deref_addrof, clippy::derivable_impls, clippy::diverging_sub_expression, clippy::double_comparisons, clippy::double_parens, clippy::duration_subsec, clippy::explicit_counter_loop, clippy::explicit_write, clippy::extra_unused_lifetimes, clippy::filter_map_identity, clippy::filter_next, clippy::flat_map_identity, clippy::get_last_with_len, clippy::identity_op, clippy::inspect_for_each, clippy::int_plus_one, clippy::iter_count, clippy::manual_filter_map, clippy::manual_find_map, clippy::manual_flatten, clippy::manual_split_once, clippy::manual_strip, clippy::manual_swap, clippy::manual_unwrap_or, clippy::map_flatten, clippy::map_identity, clippy::match_as_ref, clippy::match_single_binding, clippy::needless_arbitrary_self_type, clippy::needless_bool, clippy::needless_borrowed_reference, clippy::needless_lifetimes, clippy::needless_option_as_deref, clippy::needless_question_mark, clippy::needless_splitn, clippy::needless_update, clippy::neg_cmp_op_on_partial_ord, clippy::no_effect, clippy::nonminimal_bool, clippy::option_as_ref_deref, clippy::option_filter_map, clippy::option_map_unit_fn, clippy::overflow_check_conditional, clippy::partialeq_ne_impl, clippy::precedence, clippy::ptr_offset_with_cast, clippy::range_zip_with_len, clippy::redundant_closure_call, clippy::redundant_slicing, clippy::ref_in_deref, clippy::repeat_once, clippy::result_map_unit_fn, clippy::search_is_some, clippy::short_circuit_statement, clippy::single_element_loop, clippy::skip_while_next, clippy::string_from_utf8_as_bytes, clippy::strlen_on_c_strings, clippy::temporary_assignment, clippy::too_many_arguments, clippy::transmute_bytes_to_str, clippy::transmute_float_to_int, clippy::transmute_int_to_bool, clippy::transmute_int_to_char, clippy::transmute_int_to_float, clippy::transmute_num_to_bytes, clippy::transmute_ptr_to_ref, clippy::transmutes_expressible_as_ptr_casts, clippy::type_complexity, clippy::unit_arg, clippy::unnecessary_cast, clippy::unnecessary_filter_map, clippy::unnecessary_operation, clippy::unnecessary_sort_by, clippy::unnecessary_unwrap, clippy::unneeded_wildcard_pattern, clippy::useless_asref, clippy::useless_conversion, clippy::useless_format, clippy::vec_box, clippy::while_let_loop, clippy::wildcard_in_or_patterns, clippy::zero_divided_by_zero, clippy::zero_prefixed_literal"##,}, children: &["clippy::bind_instead_of_map", "clippy::bool_comparison", "clippy::borrowed_box", "clippy::char_lit_as_u8", "clippy::clone_on_copy", "clippy::crosspointer_transmute", "clippy::deprecated_cfg_attr", "clippy::deref_addrof", "clippy::derivable_impls", "clippy::diverging_sub_expression", "clippy::double_comparisons", "clippy::double_parens", "clippy::duration_subsec", "clippy::explicit_counter_loop", "clippy::explicit_write", "clippy::extra_unused_lifetimes", "clippy::filter_map_identity", "clippy::filter_next", "clippy::flat_map_identity", "clippy::get_last_with_len", "clippy::identity_op", "clippy::inspect_for_each", "clippy::int_plus_one", "clippy::iter_count", "clippy::manual_filter_map", "clippy::manual_find_map", "clippy::manual_flatten", "clippy::manual_split_once", "clippy::manual_strip", "clippy::manual_swap", "clippy::manual_unwrap_or", "clippy::map_flatten", "clippy::map_identity", "clippy::match_as_ref", "clippy::match_single_binding", "clippy::needless_arbitrary_self_type", "clippy::needless_bool", "clippy::needless_borrowed_reference", "clippy::needless_lifetimes", "clippy::needless_option_as_deref", "clippy::needless_question_mark", "clippy::needless_splitn", "clippy::needless_update", "clippy::neg_cmp_op_on_partial_ord", "clippy::no_effect", "clippy::nonminimal_bool", "clippy::option_as_ref_deref", "clippy::option_filter_map", "clippy::option_map_unit_fn", "clippy::overflow_check_conditional", "clippy::partialeq_ne_impl", "clippy::precedence", "clippy::ptr_offset_with_cast", "clippy::range_zip_with_len", "clippy::redundant_closure_call", "clippy::redundant_slicing", "clippy::ref_in_deref", "clippy::repeat_once", "clippy::result_map_unit_fn", "clippy::search_is_some", "clippy::short_circuit_statement", "clippy::single_element_loop", "clippy::skip_while_next", "clippy::string_from_utf8_as_bytes", "clippy::strlen_on_c_strings", "clippy::temporary_assignment", "clippy::too_many_arguments", "clippy::transmute_bytes_to_str", "clippy::transmute_float_to_int", "clippy::transmute_int_to_bool", "clippy::transmute_int_to_char", "clippy::transmute_int_to_float", "clippy::transmute_num_to_bytes", "clippy::transmute_ptr_to_ref", "clippy::transmutes_expressible_as_ptr_casts", "clippy::type_complexity", "clippy::unit_arg", "clippy::unnecessary_cast", "clippy::unnecessary_filter_map", "clippy::unnecessary_operation", "clippy::unnecessary_sort_by", "clippy::unnecessary_unwrap", "clippy::unneeded_wildcard_pattern", "clippy::useless_asref", "clippy::useless_conversion", "clippy::useless_format", "clippy::vec_box", "clippy::while_let_loop", "clippy::wildcard_in_or_patterns", "clippy::zero_divided_by_zero", "clippy::zero_prefixed_literal"],}, LintGroup{ lint: Lint{ label: "clippy::correctness", description: r##"lint group for: clippy::absurd_extreme_comparisons, clippy::almost_swapped, clippy::approx_constant, clippy::async_yields_async, clippy::bad_bit_mask, clippy::cast_ref_to_mut, clippy::clone_double_ref, clippy::cmp_nan, clippy::deprecated_semver, clippy::derive_hash_xor_eq, clippy::derive_ord_xor_partial_ord, clippy::drop_copy, clippy::drop_ref, clippy::enum_clike_unportable_variant, clippy::eq_op, clippy::erasing_op, clippy::fn_address_comparisons, clippy::forget_copy, clippy::forget_ref, clippy::if_let_mutex, clippy::if_same_then_else, clippy::ifs_same_cond, clippy::ineffective_bit_mask, clippy::infinite_iter, clippy::inherent_to_string_shadow_display, clippy::inline_fn_without_body, clippy::invalid_null_ptr_usage, clippy::invalid_regex, clippy::invisible_characters, clippy::iter_next_loop, clippy::iterator_step_by_zero, clippy::let_underscore_lock, clippy::logic_bug, clippy::match_str_case_mismatch, clippy::mem_replace_with_uninit, clippy::min_max, clippy::mismatched_target_os, clippy::mistyped_literal_suffixes, clippy::modulo_one, clippy::mut_from_ref, clippy::never_loop, clippy::non_octal_unix_permissions, clippy::nonsensical_open_options, clippy::not_unsafe_ptr_arg_deref, clippy::option_env_unwrap, clippy::out_of_bounds_indexing, clippy::panicking_unwrap, clippy::possible_missing_comma, clippy::reversed_empty_ranges, clippy::self_assignment, clippy::serde_api_misuse, clippy::size_of_in_element_count, clippy::suspicious_splitn, clippy::to_string_in_display, clippy::transmuting_null, clippy::undropped_manually_drops, clippy::uninit_assumed_init, clippy::uninit_vec, clippy::unit_cmp, clippy::unit_hash, clippy::unit_return_expecting_ord, clippy::unsound_collection_transmute, clippy::unused_io_amount, clippy::useless_attribute, clippy::vec_resize_to_zero, clippy::vtable_address_comparisons, clippy::while_immutable_condition, clippy::wrong_transmute, clippy::zst_offset"##,}, children: &["clippy::absurd_extreme_comparisons", "clippy::almost_swapped", "clippy::approx_constant", "clippy::async_yields_async", "clippy::bad_bit_mask", "clippy::cast_ref_to_mut", "clippy::clone_double_ref", "clippy::cmp_nan", "clippy::deprecated_semver", "clippy::derive_hash_xor_eq", "clippy::derive_ord_xor_partial_ord", "clippy::drop_copy", "clippy::drop_ref", "clippy::enum_clike_unportable_variant", "clippy::eq_op", "clippy::erasing_op", "clippy::fn_address_comparisons", "clippy::forget_copy", "clippy::forget_ref", "clippy::if_let_mutex", "clippy::if_same_then_else", "clippy::ifs_same_cond", "clippy::ineffective_bit_mask", "clippy::infinite_iter", "clippy::inherent_to_string_shadow_display", "clippy::inline_fn_without_body", "clippy::invalid_null_ptr_usage", "clippy::invalid_regex", "clippy::invisible_characters", "clippy::iter_next_loop", "clippy::iterator_step_by_zero", "clippy::let_underscore_lock", "clippy::logic_bug", "clippy::match_str_case_mismatch", "clippy::mem_replace_with_uninit", "clippy::min_max", "clippy::mismatched_target_os", "clippy::mistyped_literal_suffixes", "clippy::modulo_one", "clippy::mut_from_ref", "clippy::never_loop", "clippy::non_octal_unix_permissions", "clippy::nonsensical_open_options", "clippy::not_unsafe_ptr_arg_deref", "clippy::option_env_unwrap", "clippy::out_of_bounds_indexing", "clippy::panicking_unwrap", "clippy::possible_missing_comma", "clippy::reversed_empty_ranges", "clippy::self_assignment", "clippy::serde_api_misuse", "clippy::size_of_in_element_count", "clippy::suspicious_splitn", "clippy::to_string_in_display", "clippy::transmuting_null", "clippy::undropped_manually_drops", "clippy::uninit_assumed_init", "clippy::uninit_vec", "clippy::unit_cmp", "clippy::unit_hash", "clippy::unit_return_expecting_ord", "clippy::unsound_collection_transmute", "clippy::unused_io_amount", "clippy::useless_attribute", "clippy::vec_resize_to_zero", "clippy::vtable_address_comparisons", "clippy::while_immutable_condition", "clippy::wrong_transmute", "clippy::zst_offset"],}, LintGroup{ lint: Lint{ label: "clippy::deprecated", description: r##"lint group for: clippy::assign_ops, clippy::extend_from_slice, clippy::filter_map, clippy::find_map, clippy::if_let_redundant_pattern_matching, clippy::misaligned_transmute, clippy::pub_enum_variant_names, clippy::range_step_by_zero, clippy::regex_macro, clippy::replace_consts, clippy::should_assert_eq, clippy::unsafe_vector_initialization, clippy::unstable_as_mut_slice, clippy::unstable_as_slice, clippy::unused_collect, clippy::wrong_pub_self_convention"##,}, children: &["clippy::assign_ops", "clippy::extend_from_slice", "clippy::filter_map", "clippy::find_map", "clippy::if_let_redundant_pattern_matching", "clippy::misaligned_transmute", "clippy::pub_enum_variant_names", "clippy::range_step_by_zero", "clippy::regex_macro", "clippy::replace_consts", "clippy::should_assert_eq", "clippy::unsafe_vector_initialization", "clippy::unstable_as_mut_slice", "clippy::unstable_as_slice", "clippy::unused_collect", "clippy::wrong_pub_self_convention"],}, LintGroup{ lint: Lint{ label: "clippy::nursery", description: r##"lint group for: clippy::branches_sharing_code, clippy::cognitive_complexity, clippy::debug_assert_with_mut_call, clippy::disallowed_methods, clippy::disallowed_types, clippy::empty_line_after_outer_attr, clippy::equatable_if_let, clippy::fallible_impl_from, clippy::future_not_send, clippy::imprecise_flops, clippy::index_refutable_slice, clippy::missing_const_for_fn, clippy::mutex_integer, clippy::non_send_fields_in_send_ty, clippy::nonstandard_macro_braces, clippy::option_if_let_else, clippy::path_buf_push_overwrite, clippy::redundant_pub_crate, clippy::string_lit_as_bytes, clippy::suboptimal_flops, clippy::suspicious_operation_groupings, clippy::trailing_empty_array, clippy::trivial_regex, clippy::use_self, clippy::useless_let_if_seq, clippy::useless_transmute"##,}, children: &["clippy::branches_sharing_code", "clippy::cognitive_complexity", "clippy::debug_assert_with_mut_call", "clippy::disallowed_methods", "clippy::disallowed_types", "clippy::empty_line_after_outer_attr", "clippy::equatable_if_let", "clippy::fallible_impl_from", "clippy::future_not_send", "clippy::imprecise_flops", "clippy::index_refutable_slice", "clippy::missing_const_for_fn", "clippy::mutex_integer", "clippy::non_send_fields_in_send_ty", "clippy::nonstandard_macro_braces", "clippy::option_if_let_else", "clippy::path_buf_push_overwrite", "clippy::redundant_pub_crate", "clippy::string_lit_as_bytes", "clippy::suboptimal_flops", "clippy::suspicious_operation_groupings", "clippy::trailing_empty_array", "clippy::trivial_regex", "clippy::use_self", "clippy::useless_let_if_seq", "clippy::useless_transmute"],}, LintGroup{ lint: Lint{ label: "clippy::pedantic", description: r##"lint group for: clippy::await_holding_lock, clippy::await_holding_refcell_ref, clippy::case_sensitive_file_extension_comparisons, clippy::cast_lossless, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::cast_precision_loss, clippy::cast_ptr_alignment, clippy::cast_sign_loss, clippy::checked_conversions, clippy::cloned_instead_of_copied, clippy::copy_iterator, clippy::default_trait_access, clippy::doc_markdown, clippy::empty_enum, clippy::enum_glob_use, clippy::expl_impl_clone_on_copy, clippy::explicit_deref_methods, clippy::explicit_into_iter_loop, clippy::explicit_iter_loop, clippy::filter_map_next, clippy::flat_map_option, clippy::float_cmp, clippy::fn_params_excessive_bools, clippy::from_iter_instead_of_collect, clippy::if_not_else, clippy::implicit_clone, clippy::implicit_hasher, clippy::implicit_saturating_sub, clippy::inconsistent_struct_constructor, clippy::inefficient_to_string, clippy::inline_always, clippy::invalid_upcast_comparisons, clippy::items_after_statements, clippy::iter_not_returning_iterator, clippy::large_digit_groups, clippy::large_stack_arrays, clippy::large_types_passed_by_value, clippy::let_underscore_drop, clippy::let_unit_value, clippy::linkedlist, clippy::macro_use_imports, clippy::manual_assert, clippy::manual_ok_or, clippy::many_single_char_names, clippy::map_unwrap_or, clippy::match_bool, clippy::match_on_vec_items, clippy::match_same_arms, clippy::match_wild_err_arm, clippy::match_wildcard_for_single_variants, clippy::maybe_infinite_iter, clippy::missing_errors_doc, clippy::missing_panics_doc, clippy::module_name_repetitions, clippy::must_use_candidate, clippy::mut_mut, clippy::naive_bytecount, clippy::needless_bitwise_bool, clippy::needless_continue, clippy::needless_for_each, clippy::needless_pass_by_value, clippy::no_effect_underscore_binding, clippy::option_option, clippy::ptr_as_ptr, clippy::range_minus_one, clippy::range_plus_one, clippy::redundant_closure_for_method_calls, clippy::redundant_else, clippy::ref_binding_to_reference, clippy::ref_option_ref, clippy::same_functions_in_if_condition, clippy::semicolon_if_nothing_returned, clippy::similar_names, clippy::single_match_else, clippy::string_add_assign, clippy::struct_excessive_bools, clippy::too_many_lines, clippy::trait_duplication_in_bounds, clippy::transmute_ptr_to_ptr, clippy::trivially_copy_pass_by_ref, clippy::type_repetition_in_bounds, clippy::unicode_not_nfc, clippy::unnecessary_wraps, clippy::unnested_or_patterns, clippy::unreadable_literal, clippy::unsafe_derive_deserialize, clippy::unused_async, clippy::unused_self, clippy::used_underscore_binding, clippy::verbose_bit_mask, clippy::wildcard_imports, clippy::zero_sized_map_values"##,}, children: &["clippy::await_holding_lock", "clippy::await_holding_refcell_ref", "clippy::case_sensitive_file_extension_comparisons", "clippy::cast_lossless", "clippy::cast_possible_truncation", "clippy::cast_possible_wrap", "clippy::cast_precision_loss", "clippy::cast_ptr_alignment", "clippy::cast_sign_loss", "clippy::checked_conversions", "clippy::cloned_instead_of_copied", "clippy::copy_iterator", "clippy::default_trait_access", "clippy::doc_markdown", "clippy::empty_enum", "clippy::enum_glob_use", "clippy::expl_impl_clone_on_copy", "clippy::explicit_deref_methods", "clippy::explicit_into_iter_loop", "clippy::explicit_iter_loop", "clippy::filter_map_next", "clippy::flat_map_option", "clippy::float_cmp", "clippy::fn_params_excessive_bools", "clippy::from_iter_instead_of_collect", "clippy::if_not_else", "clippy::implicit_clone", "clippy::implicit_hasher", "clippy::implicit_saturating_sub", "clippy::inconsistent_struct_constructor", "clippy::inefficient_to_string", "clippy::inline_always", "clippy::invalid_upcast_comparisons", "clippy::items_after_statements", "clippy::iter_not_returning_iterator", "clippy::large_digit_groups", "clippy::large_stack_arrays", "clippy::large_types_passed_by_value", "clippy::let_underscore_drop", "clippy::let_unit_value", "clippy::linkedlist", "clippy::macro_use_imports", "clippy::manual_assert", "clippy::manual_ok_or", "clippy::many_single_char_names", "clippy::map_unwrap_or", "clippy::match_bool", "clippy::match_on_vec_items", "clippy::match_same_arms", "clippy::match_wild_err_arm", "clippy::match_wildcard_for_single_variants", "clippy::maybe_infinite_iter", "clippy::missing_errors_doc", "clippy::missing_panics_doc", "clippy::module_name_repetitions", "clippy::must_use_candidate", "clippy::mut_mut", "clippy::naive_bytecount", "clippy::needless_bitwise_bool", "clippy::needless_continue", "clippy::needless_for_each", "clippy::needless_pass_by_value", "clippy::no_effect_underscore_binding", "clippy::option_option", "clippy::ptr_as_ptr", "clippy::range_minus_one", "clippy::range_plus_one", "clippy::redundant_closure_for_method_calls", "clippy::redundant_else", "clippy::ref_binding_to_reference", "clippy::ref_option_ref", "clippy::same_functions_in_if_condition", "clippy::semicolon_if_nothing_returned", "clippy::similar_names", "clippy::single_match_else", "clippy::string_add_assign", "clippy::struct_excessive_bools", "clippy::too_many_lines", "clippy::trait_duplication_in_bounds", "clippy::transmute_ptr_to_ptr", "clippy::trivially_copy_pass_by_ref", "clippy::type_repetition_in_bounds", "clippy::unicode_not_nfc", "clippy::unnecessary_wraps", "clippy::unnested_or_patterns", "clippy::unreadable_literal", "clippy::unsafe_derive_deserialize", "clippy::unused_async", "clippy::unused_self", "clippy::used_underscore_binding", "clippy::verbose_bit_mask", "clippy::wildcard_imports", "clippy::zero_sized_map_values"],}, LintGroup{ lint: Lint{ label: "clippy::perf", description: r##"lint group for: clippy::box_collection, clippy::boxed_local, clippy::cmp_owned, clippy::expect_fun_call, clippy::extend_with_drain, clippy::format_in_format_args, clippy::iter_nth, clippy::large_const_arrays, clippy::large_enum_variant, clippy::manual_memcpy, clippy::manual_str_repeat, clippy::map_entry, clippy::mutex_atomic, clippy::needless_collect, clippy::or_fun_call, clippy::redundant_allocation, clippy::redundant_clone, clippy::single_char_pattern, clippy::slow_vector_initialization, clippy::stable_sort_primitive, clippy::to_string_in_format_args, clippy::unnecessary_to_owned, clippy::useless_vec, clippy::vec_init_then_push"##,}, children: &["clippy::box_collection", "clippy::boxed_local", "clippy::cmp_owned", "clippy::expect_fun_call", "clippy::extend_with_drain", "clippy::format_in_format_args", "clippy::iter_nth", "clippy::large_const_arrays", "clippy::large_enum_variant", "clippy::manual_memcpy", "clippy::manual_str_repeat", "clippy::map_entry", "clippy::mutex_atomic", "clippy::needless_collect", "clippy::or_fun_call", "clippy::redundant_allocation", "clippy::redundant_clone", "clippy::single_char_pattern", "clippy::slow_vector_initialization", "clippy::stable_sort_primitive", "clippy::to_string_in_format_args", "clippy::unnecessary_to_owned", "clippy::useless_vec", "clippy::vec_init_then_push"],}, LintGroup{ lint: Lint{ label: "clippy::restriction", description: r##"lint group for: clippy::as_conversions, clippy::clone_on_ref_ptr, clippy::create_dir, clippy::dbg_macro, clippy::decimal_literal_representation, clippy::default_numeric_fallback, clippy::disallowed_script_idents, clippy::else_if_without_else, clippy::exhaustive_enums, clippy::exhaustive_structs, clippy::exit, clippy::expect_used, clippy::filetype_is_file, clippy::float_arithmetic, clippy::float_cmp_const, clippy::fn_to_numeric_cast_any, clippy::get_unwrap, clippy::if_then_some_else_none, clippy::implicit_return, clippy::indexing_slicing, clippy::inline_asm_x86_att_syntax, clippy::inline_asm_x86_intel_syntax, clippy::integer_arithmetic, clippy::integer_division, clippy::let_underscore_must_use, clippy::lossy_float_literal, clippy::map_err_ignore, clippy::mem_forget, clippy::missing_docs_in_private_items, clippy::missing_enforced_import_renames, clippy::missing_inline_in_public_items, clippy::mod_module_files, clippy::modulo_arithmetic, clippy::multiple_inherent_impl, clippy::non_ascii_literal, clippy::panic, clippy::panic_in_result_fn, clippy::pattern_type_mismatch, clippy::print_stderr, clippy::print_stdout, clippy::rc_buffer, clippy::rc_mutex, clippy::rest_pat_in_fully_bound_structs, clippy::same_name_method, clippy::self_named_module_files, clippy::separated_literal_suffix, clippy::shadow_reuse, clippy::shadow_same, clippy::shadow_unrelated, clippy::str_to_string, clippy::string_add, clippy::string_slice, clippy::string_to_string, clippy::todo, clippy::undocumented_unsafe_blocks, clippy::unimplemented, clippy::unnecessary_self_imports, clippy::unneeded_field_pattern, clippy::unreachable, clippy::unseparated_literal_suffix, clippy::unwrap_in_result, clippy::unwrap_used, clippy::use_debug, clippy::verbose_file_reads, clippy::wildcard_enum_match_arm"##,}, children: &["clippy::as_conversions", "clippy::clone_on_ref_ptr", "clippy::create_dir", "clippy::dbg_macro", "clippy::decimal_literal_representation", "clippy::default_numeric_fallback", "clippy::disallowed_script_idents", "clippy::else_if_without_else", "clippy::exhaustive_enums", "clippy::exhaustive_structs", "clippy::exit", "clippy::expect_used", "clippy::filetype_is_file", "clippy::float_arithmetic", "clippy::float_cmp_const", "clippy::fn_to_numeric_cast_any", "clippy::get_unwrap", "clippy::if_then_some_else_none", "clippy::implicit_return", "clippy::indexing_slicing", "clippy::inline_asm_x86_att_syntax", "clippy::inline_asm_x86_intel_syntax", "clippy::integer_arithmetic", "clippy::integer_division", "clippy::let_underscore_must_use", "clippy::lossy_float_literal", "clippy::map_err_ignore", "clippy::mem_forget", "clippy::missing_docs_in_private_items", "clippy::missing_enforced_import_renames", "clippy::missing_inline_in_public_items", "clippy::mod_module_files", "clippy::modulo_arithmetic", "clippy::multiple_inherent_impl", "clippy::non_ascii_literal", "clippy::panic", "clippy::panic_in_result_fn", "clippy::pattern_type_mismatch", "clippy::print_stderr", "clippy::print_stdout", "clippy::rc_buffer", "clippy::rc_mutex", "clippy::rest_pat_in_fully_bound_structs", "clippy::same_name_method", "clippy::self_named_module_files", "clippy::separated_literal_suffix", "clippy::shadow_reuse", "clippy::shadow_same", "clippy::shadow_unrelated", "clippy::str_to_string", "clippy::string_add", "clippy::string_slice", "clippy::string_to_string", "clippy::todo", "clippy::undocumented_unsafe_blocks", "clippy::unimplemented", "clippy::unnecessary_self_imports", "clippy::unneeded_field_pattern", "clippy::unreachable", "clippy::unseparated_literal_suffix", "clippy::unwrap_in_result", "clippy::unwrap_used", "clippy::use_debug", "clippy::verbose_file_reads", "clippy::wildcard_enum_match_arm"],}, LintGroup{ lint: Lint{ label: "clippy::style", description: r##"lint group for: clippy::assertions_on_constants, clippy::assign_op_pattern, clippy::blacklisted_name, clippy::blocks_in_if_conditions, clippy::bool_assert_comparison, clippy::borrow_interior_mutable_const, clippy::builtin_type_shadow, clippy::bytes_nth, clippy::chars_last_cmp, clippy::chars_next_cmp, clippy::cmp_null, clippy::collapsible_else_if, clippy::collapsible_if, clippy::collapsible_match, clippy::comparison_chain, clippy::comparison_to_empty, clippy::declare_interior_mutable_const, clippy::double_must_use, clippy::double_neg, clippy::duplicate_underscore_argument, clippy::enum_variant_names, clippy::excessive_precision, clippy::field_reassign_with_default, clippy::fn_to_numeric_cast, clippy::fn_to_numeric_cast_with_truncation, clippy::for_kv_map, clippy::from_over_into, clippy::from_str_radix_10, clippy::inconsistent_digit_grouping, clippy::infallible_destructuring_match, clippy::inherent_to_string, clippy::into_iter_on_ref, clippy::iter_cloned_collect, clippy::iter_next_slice, clippy::iter_nth_zero, clippy::iter_skip_next, clippy::just_underscores_and_digits, clippy::len_without_is_empty, clippy::len_zero, clippy::let_and_return, clippy::main_recursion, clippy::manual_async_fn, clippy::manual_map, clippy::manual_non_exhaustive, clippy::manual_range_contains, clippy::manual_saturating_arithmetic, clippy::map_clone, clippy::map_collect_result_unit, clippy::match_like_matches_macro, clippy::match_overlapping_arm, clippy::match_ref_pats, clippy::match_result_ok, clippy::mem_replace_option_with_none, clippy::mem_replace_with_default, clippy::missing_safety_doc, clippy::mixed_case_hex_literals, clippy::module_inception, clippy::must_use_unit, clippy::mut_mutex_lock, clippy::needless_borrow, clippy::needless_doctest_main, clippy::needless_late_init, clippy::needless_range_loop, clippy::needless_return, clippy::neg_multiply, clippy::new_ret_no_self, clippy::new_without_default, clippy::ok_expect, clippy::op_ref, clippy::option_map_or_none, clippy::print_literal, clippy::print_with_newline, clippy::println_empty_string, clippy::ptr_arg, clippy::ptr_eq, clippy::question_mark, clippy::redundant_closure, clippy::redundant_field_names, clippy::redundant_pattern, clippy::redundant_pattern_matching, clippy::redundant_static_lifetimes, clippy::result_map_or_into_option, clippy::result_unit_err, clippy::same_item_push, clippy::self_named_constructors, clippy::should_implement_trait, clippy::single_char_add_str, clippy::single_component_path_imports, clippy::single_match, clippy::string_extend_chars, clippy::tabs_in_doc_comments, clippy::to_digit_is_some, clippy::toplevel_ref_arg, clippy::try_err, clippy::unnecessary_fold, clippy::unnecessary_lazy_evaluations, clippy::unnecessary_mut_passed, clippy::unsafe_removed_from_name, clippy::unused_unit, clippy::unusual_byte_groupings, clippy::unwrap_or_else_default, clippy::upper_case_acronyms, clippy::while_let_on_iterator, clippy::write_literal, clippy::write_with_newline, clippy::writeln_empty_string, clippy::wrong_self_convention, clippy::zero_ptr"##,}, children: &["clippy::assertions_on_constants", "clippy::assign_op_pattern", "clippy::blacklisted_name", "clippy::blocks_in_if_conditions", "clippy::bool_assert_comparison", "clippy::borrow_interior_mutable_const", "clippy::builtin_type_shadow", "clippy::bytes_nth", "clippy::chars_last_cmp", "clippy::chars_next_cmp", "clippy::cmp_null", "clippy::collapsible_else_if", "clippy::collapsible_if", "clippy::collapsible_match", "clippy::comparison_chain", "clippy::comparison_to_empty", "clippy::declare_interior_mutable_const", "clippy::double_must_use", "clippy::double_neg", "clippy::duplicate_underscore_argument", "clippy::enum_variant_names", "clippy::excessive_precision", "clippy::field_reassign_with_default", "clippy::fn_to_numeric_cast", "clippy::fn_to_numeric_cast_with_truncation", "clippy::for_kv_map", "clippy::from_over_into", "clippy::from_str_radix_10", "clippy::inconsistent_digit_grouping", "clippy::infallible_destructuring_match", "clippy::inherent_to_string", "clippy::into_iter_on_ref", "clippy::iter_cloned_collect", "clippy::iter_next_slice", "clippy::iter_nth_zero", "clippy::iter_skip_next", "clippy::just_underscores_and_digits", "clippy::len_without_is_empty", "clippy::len_zero", "clippy::let_and_return", "clippy::main_recursion", "clippy::manual_async_fn", "clippy::manual_map", "clippy::manual_non_exhaustive", "clippy::manual_range_contains", "clippy::manual_saturating_arithmetic", "clippy::map_clone", "clippy::map_collect_result_unit", "clippy::match_like_matches_macro", "clippy::match_overlapping_arm", "clippy::match_ref_pats", "clippy::match_result_ok", "clippy::mem_replace_option_with_none", "clippy::mem_replace_with_default", "clippy::missing_safety_doc", "clippy::mixed_case_hex_literals", "clippy::module_inception", "clippy::must_use_unit", "clippy::mut_mutex_lock", "clippy::needless_borrow", "clippy::needless_doctest_main", "clippy::needless_late_init", "clippy::needless_range_loop", "clippy::needless_return", "clippy::neg_multiply", "clippy::new_ret_no_self", "clippy::new_without_default", "clippy::ok_expect", "clippy::op_ref", "clippy::option_map_or_none", "clippy::print_literal", "clippy::print_with_newline", "clippy::println_empty_string", "clippy::ptr_arg", "clippy::ptr_eq", "clippy::question_mark", "clippy::redundant_closure", "clippy::redundant_field_names", "clippy::redundant_pattern", "clippy::redundant_pattern_matching", "clippy::redundant_static_lifetimes", "clippy::result_map_or_into_option", "clippy::result_unit_err", "clippy::same_item_push", "clippy::self_named_constructors", "clippy::should_implement_trait", "clippy::single_char_add_str", "clippy::single_component_path_imports", "clippy::single_match", "clippy::string_extend_chars", "clippy::tabs_in_doc_comments", "clippy::to_digit_is_some", "clippy::toplevel_ref_arg", "clippy::try_err", "clippy::unnecessary_fold", "clippy::unnecessary_lazy_evaluations", "clippy::unnecessary_mut_passed", "clippy::unsafe_removed_from_name", "clippy::unused_unit", "clippy::unusual_byte_groupings", "clippy::unwrap_or_else_default", "clippy::upper_case_acronyms", "clippy::while_let_on_iterator", "clippy::write_literal", "clippy::write_with_newline", "clippy::writeln_empty_string", "clippy::wrong_self_convention", "clippy::zero_ptr"],}, LintGroup{ lint: Lint{ label: "clippy::suspicious", description: r##"lint group for: clippy::blanket_clippy_restriction_lints, clippy::empty_loop, clippy::eval_order_dependence, clippy::float_equality_without_abs, clippy::for_loops_over_fallibles, clippy::misrefactored_assign_op, clippy::mut_range_bound, clippy::mutable_key_type, clippy::octal_escapes, clippy::return_self_not_must_use, clippy::suspicious_arithmetic_impl, clippy::suspicious_assignment_formatting, clippy::suspicious_else_formatting, clippy::suspicious_map, clippy::suspicious_op_assign_impl, clippy::suspicious_unary_op_formatting"##,}, children: &["clippy::blanket_clippy_restriction_lints", "clippy::empty_loop", "clippy::eval_order_dependence", "clippy::float_equality_without_abs", "clippy::for_loops_over_fallibles", "clippy::misrefactored_assign_op", "clippy::mut_range_bound", "clippy::mutable_key_type", "clippy::octal_escapes", "clippy::return_self_not_must_use", "clippy::suspicious_arithmetic_impl", "clippy::suspicious_assignment_formatting", "clippy::suspicious_else_formatting", "clippy::suspicious_map", "clippy::suspicious_op_assign_impl", "clippy::suspicious_unary_op_formatting"],}]>׀  clippy::cargo lint group for: clippy::cargo_common_metadata, clippy::multiple_crate_versions, clippy::negative_feature_names, clippy::redundant_feature_names, clippy::wildcard_dependencies clippy::cargo_common_metadata!clippy::multiple_crate_versionsڃ clippy::negative_feature_names!clippy::redundant_feature_namesclippy::wildcard_dependencies  clippy::complexityхlint group for: clippy::bind_instead_of_map, clippy::bool_comparison, clippy::borrowed_box, clippy::char_lit_as_u8, clippy::clone_on_copy, clippy::crosspointer_transmute, clippy::deprecated_cfg_attr, clippy::deref_addrof, clippy::derivable_impls, clippy::diverging_sub_expression, clippy::double_comparisons, clippy::double_parens, clippy::duration_subsec, clippy::explicit_counter_loop, clippy::explicit_write, clippy::extra_unused_lifetimes, clippy::filter_map_identity, clippy::filter_next, clippy::flat_map_identity, clippy::get_last_with_len, clippy::identity_op, clippy::inspect_for_each, clippy::int_plus_one, clippy::iter_count, clippy::manual_filter_map, clippy::manual_find_map, clippy::manual_flatten, clippy::manual_split_once, clippy::manual_strip, clippy::manual_swap, clippy::manual_unwrap_or, clippy::map_flatten, clippy::map_identity, clippy::match_as_ref, clippy::match_single_binding, clippy::needless_arbitrary_self_type, clippy::needless_bool, clippy::needless_borrowed_reference, clippy::needless_lifetimes, clippy::needless_option_as_deref, clippy::needless_question_mark, clippy::needless_splitn, clippy::needless_update, clippy::neg_cmp_op_on_partial_ord, clippy::no_effect, clippy::nonminimal_bool, clippy::option_as_ref_deref, clippy::option_filter_map, clippy::option_map_unit_fn, clippy::overflow_check_conditional, clippy::partialeq_ne_impl, clippy::precedence, clippy::ptr_offset_with_cast, clippy::range_zip_with_len, clippy::redundant_closure_call, clippy::redundant_slicing, clippy::ref_in_deref, clippy::repeat_once, clippy::result_map_unit_fn, clippy::search_is_some, clippy::short_circuit_statement, clippy::single_element_loop, clippy::skip_while_next, clippy::string_from_utf8_as_bytes, clippy::strlen_on_c_strings, clippy::temporary_assignment, clippy::too_many_arguments, clippy::transmute_bytes_to_str, clippy::transmute_float_to_int, clippy::transmute_int_to_bool, clippy::transmute_int_to_char, clippy::transmute_int_to_float, clippy::transmute_num_to_bytes, clippy::transmute_ptr_to_ref, clippy::transmutes_expressible_as_ptr_casts, clippy::type_complexity, clippy::unit_arg, clippy::unnecessary_cast, clippy::unnecessary_filter_map, clippy::unnecessary_operation, clippy::unnecessary_sort_by, clippy::unnecessary_unwrap, clippy::unneeded_wildcard_pattern, clippy::useless_asref, clippy::useless_conversion, clippy::useless_format, clippy::vec_box, clippy::while_let_loop, clippy::wildcard_in_or_patterns, clippy::zero_divided_by_zero, clippy::zero_prefixed_literalƙ [ԙclippy::bind_instead_of_mapclippy::bool_comparisonclippy::borrowed_boxʚclippy::char_lit_as_u8clippy::clone_on_copy clippy::crosspointer_transmuteÛclippy::deprecated_cfg_attrclippy::deref_addrofclippy::derivable_impls" clippy::diverging_sub_expression clippy::double_comparisonsclippy::double_parensclippy::duration_subsecߝclippy::explicit_counter_loopclippy::explicit_write clippy::extra_unused_lifetimesclippy::filter_map_identityclippy::filter_nextclippy::flat_map_identityןclippy::get_last_with_lenclippy::identity_opclippy::inspect_for_eachˠclippy::int_plus_oneclippy::iter_countclippy::manual_filter_mapclippy::manual_find_mapclippy::manual_flattenclippy::manual_split_onceclippy::manual_stripԢclippy::manual_swapclippy::manual_unwrap_orclippy::map_flatten£clippy::map_identityclippy::match_as_refclippy::match_single_binding&$clippy::needless_arbitrary_self_type$$clippy::needless_bool%#clippy::needless_borrowed_reference##¥clippy::needless_lifetimes" clippy::needless_option_as_deref  clippy::needless_question_markʦclippy::needless_splitnclippy::needless_update#!clippy::neg_cmp_op_on_partial_ord!!ɧclippy::no_effectclippy::nonminimal_boolclippy::option_as_ref_derefclippy::option_filter_mapclippy::option_map_unit_fn$"clippy::overflow_check_conditional""clippy::partialeq_ne_implclippy::precedenceclippy::ptr_offset_with_castclippy::range_zip_with_len clippy::redundant_closure_callclippy::redundant_slicingclippy::ref_in_derefݫclippy::repeat_onceclippy::result_map_unit_fnclippy::search_is_someЬ!clippy::short_circuit_statementclippy::single_element_loopclippy::skip_while_nextѭ#!clippy::string_from_utf8_as_bytes!!clippy::strlen_on_c_stringsclippy::temporary_assignmentٮclippy::too_many_arguments clippy::transmute_bytes_to_str clippy::transmute_float_to_int߯clippy::transmute_int_to_boolclippy::transmute_int_to_char clippy::transmute_int_to_float clippy::transmute_num_to_bytesclippy::transmute_ptr_to_ref-+clippy::transmutes_expressible_as_ptr_casts++clippy::type_complexityclippy::unit_argòclippy::unnecessary_cast clippy::unnecessary_filter_mapclippy::unnecessary_operationƳclippy::unnecessary_sort_byclippy::unnecessary_unwrap#!clippy::unneeded_wildcard_pattern!!̴clippy::useless_asrefclippy::useless_conversionclippy::useless_formatclippy::vec_boxclippy::while_let_loop!clippy::wildcard_in_or_patternsclippy::zero_divided_by_zeroclippy::zero_prefixed_literalř  ř  ř  2    ̷clippy::correctnesslint group for: clippy::absurd_extreme_comparisons, clippy::almost_swapped, clippy::approx_constant, clippy::async_yields_async, clippy::bad_bit_mask, clippy::cast_ref_to_mut, clippy::clone_double_ref, clippy::cmp_nan, clippy::deprecated_semver, clippy::derive_hash_xor_eq, clippy::derive_ord_xor_partial_ord, clippy::drop_copy, clippy::drop_ref, clippy::enum_clike_unportable_variant, clippy::eq_op, clippy::erasing_op, clippy::fn_address_comparisons, clippy::forget_copy, clippy::forget_ref, clippy::if_let_mutex, clippy::if_same_then_else, clippy::ifs_same_cond, clippy::ineffective_bit_mask, clippy::infinite_iter, clippy::inherent_to_string_shadow_display, clippy::inline_fn_without_body, clippy::invalid_null_ptr_usage, clippy::invalid_regex, clippy::invisible_characters, clippy::iter_next_loop, clippy::iterator_step_by_zero, clippy::let_underscore_lock, clippy::logic_bug, clippy::match_str_case_mismatch, clippy::mem_replace_with_uninit, clippy::min_max, clippy::mismatched_target_os, clippy::mistyped_literal_suffixes, clippy::modulo_one, clippy::mut_from_ref, clippy::never_loop, clippy::non_octal_unix_permissions, clippy::nonsensical_open_options, clippy::not_unsafe_ptr_arg_deref, clippy::option_env_unwrap, clippy::out_of_bounds_indexing, clippy::panicking_unwrap, clippy::possible_missing_comma, clippy::reversed_empty_ranges, clippy::self_assignment, clippy::serde_api_misuse, clippy::size_of_in_element_count, clippy::suspicious_splitn, clippy::to_string_in_display, clippy::transmuting_null, clippy::undropped_manually_drops, clippy::uninit_assumed_init, clippy::uninit_vec, clippy::unit_cmp, clippy::unit_hash, clippy::unit_return_expecting_ord, clippy::unsound_collection_transmute, clippy::unused_io_amount, clippy::useless_attribute, clippy::vec_resize_to_zero, clippy::vtable_address_comparisons, clippy::while_immutable_condition, clippy::wrong_transmute, clippy::zst_offset E$"clippy::absurd_extreme_comparisons""clippy::almost_swappedclippy::approx_constantclippy::async_yields_asyncclippy::bad_bit_maskclippy::cast_ref_to_mutclippy::clone_double_refclippy::cmp_nanclippy::deprecated_semverclippy::derive_hash_xor_eq$"clippy::derive_ord_xor_partial_ord""clippy::drop_copyclippy::drop_ref'%clippy::enum_clike_unportable_variant%% clippy::eq_op clippy::erasing_op clippy::fn_address_comparisonsclippy::forget_copyclippy::forget_refclippy::if_let_mutexclippy::if_same_then_elseclippy::ifs_same_condclippy::ineffective_bit_maskclippy::infinite_iter+)clippy::inherent_to_string_shadow_display)) clippy::inline_fn_without_body clippy::invalid_null_ptr_usageclippy::invalid_regexclippy::invisible_charactersclippy::iter_next_loopclippy::iterator_step_by_zeroclippy::let_underscore_lockclippy::logic_bug!clippy::match_str_case_mismatch!clippy::mem_replace_with_uninitclippy::min_maxclippy::mismatched_target_os#!clippy::mistyped_literal_suffixes!!clippy::modulo_oneclippy::mut_from_refclippy::never_loop$"clippy::non_octal_unix_permissions""" clippy::nonsensical_open_options " clippy::not_unsafe_ptr_arg_deref clippy::option_env_unwrap clippy::out_of_bounds_indexingclippy::panicking_unwrap clippy::possible_missing_commaclippy::reversed_empty_rangesclippy::self_assignmentclippy::serde_api_misuse" clippy::size_of_in_element_count clippy::suspicious_splitnclippy::to_string_in_displayclippy::transmuting_null" clippy::undropped_manually_drops clippy::uninit_assumed_initclippy::uninit_vecclippy::unit_cmpclippy::unit_hash#!clippy::unit_return_expecting_ord!!&$clippy::unsound_collection_transmute$$clippy::unused_io_amountclippy::useless_attributeclippy::vec_resize_to_zero$"clippy::vtable_address_comparisons""#!clippy::while_immutable_condition!!clippy::wrong_transmuteclippy::zst_offset&  clippy::deprecatedlint group for: clippy::assign_ops, clippy::extend_from_slice, clippy::filter_map, clippy::find_map, clippy::if_let_redundant_pattern_matching, clippy::misaligned_transmute, clippy::pub_enum_variant_names, clippy::range_step_by_zero, clippy::regex_macro, clippy::replace_consts, clippy::should_assert_eq, clippy::unsafe_vector_initialization, clippy::unstable_as_mut_slice, clippy::unstable_as_slice, clippy::unused_collect, clippy::wrong_pub_self_convention clippy::assign_opsclippy::extend_from_sliceclippy::filter_mapclippy::find_map+)clippy::if_let_redundant_pattern_matching))clippy::misaligned_transmute clippy::pub_enum_variant_namesclippy::range_step_by_zeroclippy::regex_macroclippy::replace_constsclippy::should_assert_eq&$clippy::unsafe_vector_initialization$$clippy::unstable_as_mut_sliceclippy::unstable_as_sliceclippy::unused_collect#!clippy::wrong_pub_self_convention!!   clippy::nurserylint group for: clippy::branches_sharing_code, clippy::cognitive_complexity, clippy::debug_assert_with_mut_call, clippy::disallowed_methods, clippy::disallowed_types, clippy::empty_line_after_outer_attr, clippy::equatable_if_let, clippy::fallible_impl_from, clippy::future_not_send, clippy::imprecise_flops, clippy::index_refutable_slice, clippy::missing_const_for_fn, clippy::mutex_integer, clippy::non_send_fields_in_send_ty, clippy::nonstandard_macro_braces, clippy::option_if_let_else, clippy::path_buf_push_overwrite, clippy::redundant_pub_crate, clippy::string_lit_as_bytes, clippy::suboptimal_flops, clippy::suspicious_operation_groupings, clippy::trailing_empty_array, clippy::trivial_regex, clippy::use_self, clippy::useless_let_if_seq, clippy::useless_transmute clippy::branches_sharing_codeclippy::cognitive_complexity$"clippy::debug_assert_with_mut_call""clippy::disallowed_methodsclippy::disallowed_types%#clippy::empty_line_after_outer_attr##clippy::equatable_if_letclippy::fallible_impl_fromclippy::future_not_sendclippy::imprecise_flopsclippy::index_refutable_sliceclippy::missing_const_for_fnclippy::mutex_integer$"clippy::non_send_fields_in_send_ty""" clippy::nonstandard_macro_braces clippy::option_if_let_else!clippy::path_buf_push_overwriteclippy::redundant_pub_crateclippy::string_lit_as_bytesclippy::suboptimal_flops(&clippy::suspicious_operation_groupings&&clippy::trailing_empty_arrayclippy::trivial_regexclippy::use_selfclippy::useless_let_if_seqclippy::useless_transmute ! clippy::pedanticlint group for: clippy::await_holding_lock, clippy::await_holding_refcell_ref, clippy::case_sensitive_file_extension_comparisons, clippy::cast_lossless, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::cast_precision_loss, clippy::cast_ptr_alignment, clippy::cast_sign_loss, clippy::checked_conversions, clippy::cloned_instead_of_copied, clippy::copy_iterator, clippy::default_trait_access, clippy::doc_markdown, clippy::empty_enum, clippy::enum_glob_use, clippy::expl_impl_clone_on_copy, clippy::explicit_deref_methods, clippy::explicit_into_iter_loop, clippy::explicit_iter_loop, clippy::filter_map_next, clippy::flat_map_option, clippy::float_cmp, clippy::fn_params_excessive_bools, clippy::from_iter_instead_of_collect, clippy::if_not_else, clippy::implicit_clone, clippy::implicit_hasher, clippy::implicit_saturating_sub, clippy::inconsistent_struct_constructor, clippy::inefficient_to_string, clippy::inline_always, clippy::invalid_upcast_comparisons, clippy::items_after_statements, clippy::iter_not_returning_iterator, clippy::large_digit_groups, clippy::large_stack_arrays, clippy::large_types_passed_by_value, clippy::let_underscore_drop, clippy::let_unit_value, clippy::linkedlist, clippy::macro_use_imports, clippy::manual_assert, clippy::manual_ok_or, clippy::many_single_char_names, clippy::map_unwrap_or, clippy::match_bool, clippy::match_on_vec_items, clippy::match_same_arms, clippy::match_wild_err_arm, clippy::match_wildcard_for_single_variants, clippy::maybe_infinite_iter, clippy::missing_errors_doc, clippy::missing_panics_doc, clippy::module_name_repetitions, clippy::must_use_candidate, clippy::mut_mut, clippy::naive_bytecount, clippy::needless_bitwise_bool, clippy::needless_continue, clippy::needless_for_each, clippy::needless_pass_by_value, clippy::no_effect_underscore_binding, clippy::option_option, clippy::ptr_as_ptr, clippy::range_minus_one, clippy::range_plus_one, clippy::redundant_closure_for_method_calls, clippy::redundant_else, clippy::ref_binding_to_reference, clippy::ref_option_ref, clippy::same_functions_in_if_condition, clippy::semicolon_if_nothing_returned, clippy::similar_names, clippy::single_match_else, clippy::string_add_assign, clippy::struct_excessive_bools, clippy::too_many_lines, clippy::trait_duplication_in_bounds, clippy::transmute_ptr_to_ptr, clippy::trivially_copy_pass_by_ref, clippy::type_repetition_in_bounds, clippy::unicode_not_nfc, clippy::unnecessary_wraps, clippy::unnested_or_patterns, clippy::unreadable_literal, clippy::unsafe_derive_deserialize, clippy::unused_async, clippy::unused_self, clippy::used_underscore_binding, clippy::verbose_bit_mask, clippy::wildcard_imports, clippy::zero_sized_map_values% ]clippy::await_holding_lock#!clippy::await_holding_refcell_ref!!Ҏ31clippy::case_sensitive_file_extension_comparisons11clippy::cast_lossless" clippy::cast_possible_truncation clippy::cast_possible_wrapclippy::cast_precision_lossclippy::cast_ptr_alignmentclippy::cast_sign_lossclippy::checked_conversions" clippy::cloned_instead_of_copied clippy::copy_iteratorclippy::default_trait_accessclippy::doc_markdownݒclippy::empty_enumclippy::enum_glob_use!clippy::expl_impl_clone_on_copyӓ clippy::explicit_deref_methods!clippy::explicit_into_iter_loopclippy::explicit_iter_loopڔclippy::filter_map_nextclippy::flat_map_optionclippy::float_cmpɕ#!clippy::fn_params_excessive_bools!!&$clippy::from_iter_instead_of_collect$$clippy::if_not_elseіclippy::implicit_cloneclippy::implicit_hasher!clippy::implicit_saturating_sub͗)'clippy::inconsistent_struct_constructor''clippy::inefficient_to_stringclippy::inline_always֘$"clippy::invalid_upcast_comparisons"" clippy::items_after_statements%#clippy::iter_not_returning_iterator##clippy::large_digit_groupsclippy::large_stack_arrays%#clippy::large_types_passed_by_value##clippy::let_underscore_dropclippy::let_unit_valueclippy::linkedlistclippy::macro_use_importsclippy::manual_assertclippy::manual_ok_or՜ clippy::many_single_char_namesclippy::map_unwrap_orclippy::match_boolʝclippy::match_on_vec_itemsclippy::match_same_armsclippy::match_wild_err_armŞ,*clippy::match_wildcard_for_single_variants**clippy::maybe_infinite_iterclippy::missing_errors_docԟclippy::missing_panics_doc!clippy::module_name_repetitionsclippy::must_use_candidateנclippy::mut_mutclippy::naive_bytecountclippy::needless_bitwise_boolʡclippy::needless_continueclippy::needless_for_each clippy::needless_pass_by_valueʢ&$clippy::no_effect_underscore_binding$$clippy::option_optionclippy::ptr_as_ptrţclippy::range_minus_oneclippy::range_plus_one,*clippy::redundant_closure_for_method_calls**̤clippy::redundant_else" clippy::ref_binding_to_reference clippy::ref_option_refȥ(&clippy::same_functions_in_if_condition&&'%clippy::semicolon_if_nothing_returned%%clippy::similar_namesئclippy::single_match_elseclippy::string_add_assign clippy::struct_excessive_boolsاclippy::too_many_lines%#clippy::trait_duplication_in_bounds##clippy::transmute_ptr_to_ptrݨ$"clippy::trivially_copy_pass_by_ref""#!clippy::type_repetition_in_bounds!!clippy::unicode_not_nfcclippy::unnecessary_wrapsclippy::unnested_or_patternsclippy::unreadable_literal#!clippy::unsafe_derive_deserialize!!clippy::unused_asyncclippy::unused_selfޫ!clippy::used_underscore_bindingclippy::verbose_bit_maskclippy::wildcard_importsݬclippy::zero_sized_map_values$%#$"#5 !"' ȭ clippy::perf lint group for: clippy::box_collection, clippy::boxed_local, clippy::cmp_owned, clippy::expect_fun_call, clippy::extend_with_drain, clippy::format_in_format_args, clippy::iter_nth, clippy::large_const_arrays, clippy::large_enum_variant, clippy::manual_memcpy, clippy::manual_str_repeat, clippy::map_entry, clippy::mutex_atomic, clippy::needless_collect, clippy::or_fun_call, clippy::redundant_allocation, clippy::redundant_clone, clippy::single_char_pattern, clippy::slow_vector_initialization, clippy::stable_sort_primitive, clippy::to_string_in_format_args, clippy::unnecessary_to_owned, clippy::useless_vec, clippy::vec_init_then_push+ clippy::box_collectionɳclippy::boxed_localclippy::cmp_ownedclippy::expect_fun_callclippy::extend_with_drainݴclippy::format_in_format_argsclippy::iter_nthclippy::large_const_arraysԵclippy::large_enum_variantclippy::manual_memcpyclippy::manual_str_repeat̶clippy::map_entryclippy::mutex_atomicclippy::needless_collectclippy::or_fun_callܷclippy::redundant_allocationclippy::redundant_cloneclippy::single_char_patternڸ$"clippy::slow_vector_initialization""clippy::stable_sort_primitive" clippy::to_string_in_format_args clippy::unnecessary_to_ownedclippy::useless_vecclippy::vec_init_then_push*+)*() & '(- clippy::restrictionл  lint group for: clippy::as_conversions, clippy::clone_on_ref_ptr, clippy::create_dir, clippy::dbg_macro, clippy::decimal_literal_representation, clippy::default_numeric_fallback, clippy::disallowed_script_idents, clippy::else_if_without_else, clippy::exhaustive_enums, clippy::exhaustive_structs, clippy::exit, clippy::expect_used, clippy::filetype_is_file, clippy::float_arithmetic, clippy::float_cmp_const, clippy::fn_to_numeric_cast_any, clippy::get_unwrap, clippy::if_then_some_else_none, clippy::implicit_return, clippy::indexing_slicing, clippy::inline_asm_x86_att_syntax, clippy::inline_asm_x86_intel_syntax, clippy::integer_arithmetic, clippy::integer_division, clippy::let_underscore_must_use, clippy::lossy_float_literal, clippy::map_err_ignore, clippy::mem_forget, clippy::missing_docs_in_private_items, clippy::missing_enforced_import_renames, clippy::missing_inline_in_public_items, clippy::mod_module_files, clippy::modulo_arithmetic, clippy::multiple_inherent_impl, clippy::non_ascii_literal, clippy::panic, clippy::panic_in_result_fn, clippy::pattern_type_mismatch, clippy::print_stderr, clippy::print_stdout, clippy::rc_buffer, clippy::rc_mutex, clippy::rest_pat_in_fully_bound_structs, clippy::same_name_method, clippy::self_named_module_files, clippy::separated_literal_suffix, clippy::shadow_reuse, clippy::shadow_same, clippy::shadow_unrelated, clippy::str_to_string, clippy::string_add, clippy::string_slice, clippy::string_to_string, clippy::todo, clippy::undocumented_unsafe_blocks, clippy::unimplemented, clippy::unnecessary_self_imports, clippy::unneeded_field_pattern, clippy::unreachable, clippy::unseparated_literal_suffix, clippy::unwrap_in_result, clippy::unwrap_used, clippy::use_debug, clippy::verbose_file_reads, clippy::wildcard_enum_match_arm 1 Aclippy::as_conversionsclippy::clone_on_ref_ptrclippy::create_dirclippy::dbg_macro(&clippy::decimal_literal_representation&&" clippy::default_numeric_fallback " clippy::disallowed_script_idents clippy::else_if_without_elseclippy::exhaustive_enumsclippy::exhaustive_structs clippy::exit clippy::expect_usedclippy::filetype_is_fileclippy::float_arithmeticclippy::float_cmp_const clippy::fn_to_numeric_cast_anyclippy::get_unwrap clippy::if_then_some_else_noneclippy::implicit_returnclippy::indexing_slicing#!clippy::inline_asm_x86_att_syntax!!%#clippy::inline_asm_x86_intel_syntax##clippy::integer_arithmeticclippy::integer_division!clippy::let_underscore_must_useclippy::lossy_float_literalclippy::map_err_ignoreclippy::mem_forget'%clippy::missing_docs_in_private_items%%)'clippy::missing_enforced_import_renames''(&clippy::missing_inline_in_public_items&&clippy::mod_module_filesclippy::modulo_arithmetic clippy::multiple_inherent_implclippy::non_ascii_literal clippy::panic clippy::panic_in_result_fnclippy::pattern_type_mismatchclippy::print_stderrclippy::print_stdoutclippy::rc_bufferclippy::rc_mutex)'clippy::rest_pat_in_fully_bound_structs''clippy::same_name_method!clippy::self_named_module_files" clippy::separated_literal_suffix clippy::shadow_reuseclippy::shadow_sameclippy::shadow_unrelatedclippy::str_to_stringclippy::string_addclippy::string_sliceclippy::string_to_string clippy::todo $"clippy::undocumented_unsafe_blocks""clippy::unimplemented" clippy::unnecessary_self_imports  clippy::unneeded_field_patternclippy::unreachable$"clippy::unseparated_literal_suffix""clippy::unwrap_in_resultclippy::unwrap_usedclippy::use_debugclippy::verbose_file_reads!clippy::wildcard_enum_match_arm01/0./$, -.3  clippy::style lint group for: clippy::assertions_on_constants, clippy::assign_op_pattern, clippy::blacklisted_name, clippy::blocks_in_if_conditions, clippy::bool_assert_comparison, clippy::borrow_interior_mutable_const, clippy::builtin_type_shadow, clippy::bytes_nth, clippy::chars_last_cmp, clippy::chars_next_cmp, clippy::cmp_null, clippy::collapsible_else_if, clippy::collapsible_if, clippy::collapsible_match, clippy::comparison_chain, clippy::comparison_to_empty, clippy::declare_interior_mutable_const, clippy::double_must_use, clippy::double_neg, clippy::duplicate_underscore_argument, clippy::enum_variant_names, clippy::excessive_precision, clippy::field_reassign_with_default, clippy::fn_to_numeric_cast, clippy::fn_to_numeric_cast_with_truncation, clippy::for_kv_map, clippy::from_over_into, clippy::from_str_radix_10, clippy::inconsistent_digit_grouping, clippy::infallible_destructuring_match, clippy::inherent_to_string, clippy::into_iter_on_ref, clippy::iter_cloned_collect, clippy::iter_next_slice, clippy::iter_nth_zero, clippy::iter_skip_next, clippy::just_underscores_and_digits, clippy::len_without_is_empty, clippy::len_zero, clippy::let_and_return, clippy::main_recursion, clippy::manual_async_fn, clippy::manual_map, clippy::manual_non_exhaustive, clippy::manual_range_contains, clippy::manual_saturating_arithmetic, clippy::map_clone, clippy::map_collect_result_unit, clippy::match_like_matches_macro, clippy::match_overlapping_arm, clippy::match_ref_pats, clippy::match_result_ok, clippy::mem_replace_option_with_none, clippy::mem_replace_with_default, clippy::missing_safety_doc, clippy::mixed_case_hex_literals, clippy::module_inception, clippy::must_use_unit, clippy::mut_mutex_lock, clippy::needless_borrow, clippy::needless_doctest_main, clippy::needless_late_init, clippy::needless_range_loop, clippy::needless_return, clippy::neg_multiply, clippy::new_ret_no_self, clippy::new_without_default, clippy::ok_expect, clippy::op_ref, clippy::option_map_or_none, clippy::print_literal, clippy::print_with_newline, clippy::println_empty_string, clippy::ptr_arg, clippy::ptr_eq, clippy::question_mark, clippy::redundant_closure, clippy::redundant_field_names, clippy::redundant_pattern, clippy::redundant_pattern_matching, clippy::redundant_static_lifetimes, clippy::result_map_or_into_option, clippy::result_unit_err, clippy::same_item_push, clippy::self_named_constructors, clippy::should_implement_trait, clippy::single_char_add_str, clippy::single_component_path_imports, clippy::single_match, clippy::string_extend_chars, clippy::tabs_in_doc_comments, clippy::to_digit_is_some, clippy::toplevel_ref_arg, clippy::try_err, clippy::unnecessary_fold, clippy::unnecessary_lazy_evaluations, clippy::unnecessary_mut_passed, clippy::unsafe_removed_from_name, clippy::unused_unit, clippy::unusual_byte_groupings, clippy::unwrap_or_else_default, clippy::upper_case_acronyms, clippy::while_let_on_iterator, clippy::write_literal, clippy::write_with_newline, clippy::writeln_empty_string, clippy::wrong_self_convention, clippy::zero_ptr#7 l!clippy::assertions_on_constantsclippy::assign_op_patternclippy::blacklisted_name!clippy::blocks_in_if_conditions clippy::bool_assert_comparison'%clippy::borrow_interior_mutable_const%%clippy::builtin_type_shadowclippy::bytes_nthclippy::chars_last_cmpclippy::chars_next_cmpclippy::cmp_nullclippy::collapsible_else_ifclippy::collapsible_ifclippy::collapsible_matchclippy::comparison_chainclippy::comparison_to_empty(&clippy::declare_interior_mutable_const&&clippy::double_must_useclippy::double_neg'%clippy::duplicate_underscore_argument%%clippy::enum_variant_namesclippy::excessive_precision%#clippy::field_reassign_with_default##clippy::fn_to_numeric_cast,*clippy::fn_to_numeric_cast_with_truncation**clippy::for_kv_mapclippy::from_over_intoclippy::from_str_radix_10%#clippy::inconsistent_digit_grouping##(&clippy::infallible_destructuring_match&&clippy::inherent_to_stringclippy::into_iter_on_refȂclippy::iter_cloned_collectclippy::iter_next_sliceclippy::iter_nth_zeroclippy::iter_skip_next%#clippy::just_underscores_and_digits##clippy::len_without_is_emptyĄclippy::len_zeroclippy::let_and_returnclippy::main_recursionclippy::manual_async_fnׅclippy::manual_mapclippy::manual_non_exhaustiveclippy::manual_range_containsӆ&$clippy::manual_saturating_arithmetic$$clippy::map_clone!clippy::map_collect_result_unitׇ" clippy::match_like_matches_macro clippy::match_overlapping_armclippy::match_ref_patsڈclippy::match_result_ok&$clippy::mem_replace_option_with_none$$" clippy::mem_replace_with_default clippy::missing_safety_doc!clippy::mixed_case_hex_literalsclippy::module_inceptionclippy::must_use_unitclippy::mut_mutex_lockclippy::needless_borrow؋clippy::needless_doctest_mainclippy::needless_late_initclippy::needless_range_loopڌclippy::needless_returnclippy::neg_multiplyclippy::new_ret_no_self̍clippy::new_without_defaultclippy::ok_expectclippy::op_refclippy::option_map_or_noneclippy::print_literalclippy::print_with_newlineclippy::println_empty_stringۏclippy::ptr_argclippy::ptr_eqclippy::question_markclippy::redundant_closureclippy::redundant_field_namesclippy::redundant_pattern$"clippy::redundant_pattern_matching""$"clippy::redundant_static_lifetimes""#!clippy::result_map_or_into_option!!ђclippy::result_unit_errclippy::same_item_push!clippy::self_named_constructors͓ clippy::should_implement_traitclippy::single_char_add_str'%clippy::single_component_path_imports%%۔clippy::single_matchclippy::string_extend_charsclippy::tabs_in_doc_comments֕clippy::to_digit_is_someclippy::toplevel_ref_argclippy::try_errŖclippy::unnecessary_fold&$clippy::unnecessary_lazy_evaluations$$ clippy::unnecessary_mut_passedϗ" clippy::unsafe_removed_from_name clippy::unused_unit clippy::unusual_byte_groupingsИ clippy::unwrap_or_else_defaultclippy::upper_case_acronymsclippy::while_let_on_iterator֙clippy::write_literalclippy::write_with_newlineclippy::writeln_empty_stringњclippy::wrong_self_conventionclippy::zero_ptr#67#56#45<2 34›9 ܛclippy::suspiciouslint group for: clippy::blanket_clippy_restriction_lints, clippy::empty_loop, clippy::eval_order_dependence, clippy::float_equality_without_abs, clippy::for_loops_over_fallibles, clippy::misrefactored_assign_op, clippy::mut_range_bound, clippy::mutable_key_type, clippy::octal_escapes, clippy::return_self_not_must_use, clippy::suspicious_arithmetic_impl, clippy::suspicious_assignment_formatting, clippy::suspicious_else_formatting, clippy::suspicious_map, clippy::suspicious_op_assign_impl, clippy::suspicious_unary_op_formattingŠ= Ӡ*(clippy::blanket_clippy_restriction_lints((clippy::empty_loopclippy::eval_order_dependenceڡ$"clippy::float_equality_without_abs""" clippy::for_loops_over_fallibles !clippy::misrefactored_assign_opclippy::mut_range_boundclippy::mutable_key_typeclippy::octal_escapesߣ" clippy::return_self_not_must_use $"clippy::suspicious_arithmetic_impl""*(clippy::suspicious_assignment_formatting(($"clippy::suspicious_else_formatting""clippy::suspicious_mapѥ#!clippy::suspicious_op_assign_impl!!(&clippy::suspicious_unary_op_formatting&&Ġ<=Ġ;<Ġ:; 8 9:   &,28>//׀2ř/ř/ř/ƙ&/// //////5/// ///$///<#/#/#/# ›Ġ/Ġ/Ġ/Š % " %*  *ĉ *  " # 5#ĉ # " " " "MhS  "  555 _ref__block  D D D D             5         g          g !   # # # #  # # #  Q\W5g5    5g   ev̆5 g          5    " """"LetElse"""Lz; 5  555   5 5  @ @@ @ @ "@@ @@ @ @5 @@ @@@ ?   @@ @@@ ?  5@5@DDDDD @@@  @ @   @@@ {-P5@ {-P @ @ 5@ @ @@ @@#@@@@@@@@@  @@  @DDD@  B@@  B@@  B@CCC CCC  C  C C CC   C  C CCC  CC     CC C C C"CC C C"@D  DDD D DDD D D  DDD D D  DD  D D D D  D!@B@5@5@CABAACCC C C C C C DDDDDDD@C C @K K L "LKL ? L5LLK" K K"K K"JK" _ref__exprQ QQ QQQ"Q ?5  5 {-P 5QQ8  """"""">͖ 7 775Q= Q= ˳5˳5Q} Q}Q}Q Q}R RRPRR P Q  7 775757 {-P"&"&"&">3br@ {-P5P5P5P5P5Qϲ5Q"ܴ5Q= ȳ55Q=5Q8R̆PPbodyPPQQQ  "Q QQQQQϲ5Q5Q5Q5QQQQ5R "+RQ QQ 5QRRRQ8Q8Q5Q8ͳ5Qڼ5QRR5Q8 Q̆P5Q8U 7 775U "+UU UU 5ڼ5UVVVUPUPU ȳ55UPͳ5Uڼ5UUU5UP ŬP5UP` ` ` "```````  "&"&MatchArm"&",%u`5` 5` ````5`` ```````  5```5``̆P5`iii "i iiiiii ̷5i̷5i ̷5ilbliiqqq5q qqqqqq5q̷5q5q5qq uմuմu u "uu v v5vv uuͧ5uvvvvvu#u#u u մմu#5u մuմuu u v v u5uu#y yzzz " zyyyy5yy)z ?5 # z5zz)z ?5 # z5zzyyAzA {-P5y  5yyyyyzz5yyzy        .=                   ͇̇̇̇̇̇̇̇ ̇ ̇ ̇ ̇ ,'    ĉ ̇̇̇r_paren         _ref__r_paren  M.M.‰ݹ ‰ ĉ ‰M. M. .M.M.‰M.ĉM.M.999ʼn9999first9wIVC MapWhile/ /.)CgSkip1 1QJ# # SyntaxElementChildren# >## #V'ϲO55    c5, {-P5  55,55 is_sep,   95 4" " 4 ? 5|    55 4 5    ݊ ݊ "$"$"$"Kk=   "Ŋ  Ŋ r5    r$ 5r5 5 r           *       1 " 1G     "5"5Position"5 " 6 [F  7 5 7555 1  posindent 5 " 2 pp5  75 75p55 5p 5 " 4 rr5  75 75r55 5r  #     ĉ' ? 5:     55 '55<  _ref__tok5    55ĉ  55_ref__f  {-Pĉ  ?ĉ5  O 66O5  66O< 6O   .> --- aY  -aYaYaYaYaYaY--2  2ĉ a`YT#.2‰     6ĉ‰‰ .‰ĉ‰     6ĉ‰‰ .‰ĉ‰  ݹ  6ĉ‰‰ .S‰ĉ‰     6ĉ‰‰ .‰ĉP .P .‰  ݹ  6ĉ‰‰P .P . . P .P .‰P .ĉP .P ."""‰""ݹ"""" 6"ĉ"‰"‰"""" .f"""‰"ĉ""$ $$$ %%‰$#$#ݹ$#%$($$($‰$ ĉ$ ‰%$$(% .q%%$(‰%ĉ%%3$ "0"0"0"ߤ׀# $# $ $  {-P"" ""]Pڶ\ $ $  $$l6$+ + "  ( $ $  # $ , ,  ( , ,  , , l, 6  6 "   '  ,  1( , 7 7  {-P ' 7 7  7 7l7 BB " &  7   2' 7 C C & C C  CClC*/ C  & C-'$     format_args$  6format_args_nl $ 6const_format_args!$!  6  panic_2015"$  "  6  panic_2021#$  % %#aY% % aYaYaY   % "!   #   #  % )' () +0,%  % .(# 0% ,. 7 -  $$  ,,   77  CC&    ՟6l c uty CBB7l c uty 7666, ,+ 6+6$l c uty6 $Ơ6# 6$ , 7 C a`Y     ՟6  string՟6  $  ,   7   C _ref__string 444040bW`(   'w1q1r1s ZeroChars1t1uMoreThanOneChar1v1w LoneSlash1x1y InvalidEscape1z1{BareCarriageReturn1|1}BareCarriageReturnInRawString1~1EscapeOnlyChar11TooShortHexEscape11InvalidCharInHexEscape11OutOfRangeHexEscape 11NoBraceInUnicodeEscape 11InvalidCharInUnicodeEscape 11EmptyUnicodeEscape 11UnclosedUnicodeEscape 11LeadingUnderscoreUnicodeEscape11OverlongUnicodeEscape11LoneSurrogateUnicodeEscape11OutOfRangeUnicodeEscape11UnicodeEscapeInByte11NonAsciiCharInByte11UnskippedWhitespaceWarning11MultipleSkippedLinesWarningdLG#M   56+  66+66 6+٣ char_ranges 6+_ref__char_ranges6  B6  B  6     {-P        l   #      {-P6 2#   6   6626  66l c uty 6   'w 6   ٣   2### # 6# 6### ### #6# 6### *** **  6* 6*** ... ..6. 6... >>> >>6> 6>>> FFF FF6F 6FFF N N 9Peekable0peeked0FV>,܅NNN >6NNN NN NNLNL M 6LM 6MN6N6N N6NcharsLMcallbackMNLP P6PPP6PP PP PP # PP  PPP̏ $assertion failed: c.is_ascii_digit()$$ PQ Q 06 QQ Q  Q 6Q Q  6Q QQQ6Q Q R R6 RRRR ,%  RRQSS S) S)S6 S)SNPQO6O6OP P6P6P  PP PP {-P6Q QQQ  Q Q6R RRS)6S)SS6Q 6Q 6O6OP PĦQ next_charQ NU U6UUU6UU UUU  # UUUUU U_U UU&  U&U U&U&̏ 1assertion failed: c.is_alphabetic() || c == \'_\'11 U&V V6  VU U  U 6UU  6U V V._VKVKVK V VV 6V VKV.V.V.VVV6VVK V.V.VKVK W W6WWWW6WWUXX X, X,X6X,XSUV T6S6SU U6U6U  U&UUUU&6V UUU  VKV.V V VVV 6W WWX,6X,XX6V 6V 6S6SU UĦU6U S Z Z6ZZZ >6ZZZZ ZZZ  Z [ [[ ZZ   Z[ [ [[Z3Z ,  Z3[ ZV  ZVZ6ZV[ [6 [[XZZY6X6YZ6Z6Z ZZV6ZVZ3ZZ Z [[ [ [6[ 6X6YZZX                       6    6    6 6    6 66          6 6     66    6 6 6 6 6 6 6         6    G  !(  !(  !(  ܝ!(!( !( =  =!       !j Z    !(ܝ!( !(7!( placeholder_id  ٣ 7 $                 ܉7 ܉7        '''6''''''''','  ',''' 'only_num''',X/ X/X/ X/XX/>:>:F><>>=>gG1shsh LineIndexsinewlinesssjline_wide_charsssksz2PbhY֯ X/֝Y7X/X/\YX/XX/X/X/X/X/X/X/X/X/0u16X/X/ line_index X/X/X/X/ "line_index"[[[ƽ[ ƽ[[[[  [  [ [[ [ [ [ 7[ 7[ [ [ [ [ [ [ [ [[[7[[[[ [[[[[[[[7[[[[[ [[[[  [  [ [ [ [  [ [[ [ [  [ 7[ 7[ [ [ [ [ [ [ [ [ [ [ [ [[[[ [[[[[ [7[7[[[[[[[[[[jiii iiij j j j  j jj j 7j 7j  j 7j j j j jjjj7jjj kk kkkk k kk! kkml kmll j {-Pkj kkkallow_snippetsjj           Ё   Ё%  % %Ԃ%%%%  % %Ԃ%%%                           ً   ً                     ݍ   ݍ                         Î         Î                           ̑         ̑                                             Ր         Ր                                                        )   )  ) ) ) ) )   )  ) ) ) ) )   )  ) ) ) ) )   )  ) ) ) ) *  * **ֈ***  * **ֈ**L   L  L L L L L   L  L L L L N  N NNNNN  N NNNNy  y yֈyyyy  y yֈyyyy  y yֈyyyy  y yֈyyyz  z zֈzzzz  z zֈzzzz  z zֈzzzz  z zֈzzzz  z zֈzzzz  z zֈzzz                     ;  |La       7         Ԗ        Ԗ                                             R RRR RRR RRR RRS SSS SSS SSS SSS SSS SSS SSS SS& &&&&&& &&&&&         Ǩ   Ǩ       Ǩ         Ǩ                                                            (FT  M M% ManuallyDrop Jݸ  J AnchoredPath FCrateId'FF FileLoader FileLoaderDelegate7SourceDatabaseUpcast DefDatabase T"ExpandDatabaseU HirDatabase b.F >:7 sh           - s base_db  lT This crate defines the core datastructure representing IDE state -- `RootDatabase`.WX` It is mainly a `HirDatabase` for semantic analysis, plus a `SymbolsDatabase`, for fuzzy search.\c(FT  M M%7 Jݸ  J7 F7'FF7 77777 T"7U7 b.F >:7 sh           - s 7   DebugQueryTablecJt JDatabaseJ ݸ  J J  J Change İ  İ   memory_usage  CC  F>:  ;;;cct t           4  &7 7 . 7 7‚8roots files_changedR proc_macrosDa changeG7 7444040bW`( 7 7JJJJJJ9S坫222Jϊ8JJ2 2 CѤ Z   :2"2#"#$| !%%!8%8 $ q  ;  before 8  allocated    ڏ8     1    purge  after 8  8   ڏ8 ڏ8 t <    {:?} ڏ8 acc push  Đ8  Ɠ8  >''''T This module provides functionality for querying callable information about a token.W>>>< 7777 7SSSSSGH4_7 7 78 ?ԡ calling_node ?@@@@??AAAA?ؾ7777 7SSSSSGH4_7 7½ 7 {-P Bԡgeneric_arg_list(BCCCCB(BDDDDB)BEEEEBK This module defines the `Assist` data structure. The actual assist live inNM the `ide_assists` downstream crate. We want to define the data structures inOPF this low-level crate though, because `ide_diagnostics` also need themIK (fixits for diagnostics and assists are the same thing under the hood). WeNK want to compile `ide_assists` and `ide_diagnostics` in parallel though, soN8 we pull the common definitions upstream, to this crate.; FromStr[FG ,FH FJѢ  FK 2  MN0LL M7 7 7LL NPQOO/7 7   'w[OO Q "ЁS"3"77 7Ё 7R"R S"،" W `NameDefinition` keeps information about the element we want to search references for.ZS The element is represented by `NameKind`. It's located inside some `container` and[V2 has a `visibility`, which defines a search scope.5P Note that the reference search is possible for not all of the classified items.S ArrayVeca2TUʒSTW AsAssocItem S TX AssocItem STY STZ ST[GST\ָST] ST^ST_ST`” STa HasVisibility STbSTcSTdSTeޑSTfSTg SThU TiPathResolutionSTj STkSTlؕ STmSTnȓ STo STpSTq  TKTr impl_from  Ts͙8"Tv8" Tw8 " Tx SyntaxKind .Ty "Tz "T{ T|                           YY          ~ ^ 77 7 7 {-P} } ~   ~~Ȳ 7 77 7 7 {-P} }   977 7 7}} A 77 7 7 {-PTKTKTKTK TKTKPublic[åz}}  5 77 7 7} }   **x* 777 7SSSSSGH4_7 7* ԡ*+4{5777 7SSSSSGH4_7 75 ԡ5566777 7SSSSSGH4_7 7״6 ԡ678939 a2a28a5xsaa7aF#,gD 99B:B8 BBPP*# `Definition` defined by this name.P&P  PSZS777 7SSSSSGH4_7 7S ԡSS[~[ T77 7SSSSSGH4_7 [ ԡ[[ggT77 7SSSSSGH4_7g ԡg ident_path ooT77 7SSSSSGH4_7""Rename""?^>t o ԡoLott777 7SSSSSGH4_7 7״tԡtuvzֈzz777 7SSSSSGH4_7 7"""""""Va+m {-Pֈ{ ԡz await_expr{ ||777 7SSSSSGH4_7 7"$"$"$"V-8| ԡ| prefix_expr} ~~ 777 7SSSSSGH4_7 7"%"%"%" Q!8~ ԡ~try_expr~777 7SSSSSGH4_7 7"#"#"#" 7h8 ԡ index_expr āˁ 777 7SSSSSGH4_7 7й8 ԡbin_expr{777 7SSSSSGH4_7 7 ԡډ777 7SSSSSGH4_7 7״ԡ֩Ϫ̑ J 7 7b.7 ڹ#&  assoc_item (ɼ0̼ path_resolutionѼ# ɡ See [`FamousDefs`].   CrateOrigin' LangCrateOrigin4 7E ָ` Sg Sޑm St SScopeDef| S S S 7 ' ' 4 4 E E Z= ` ` g g m m t t | |        I Helps with finding well-know things inside the standard library. This isL K somewhat similar to the known paths infra inside hir, but it different; WeN J want to make sure that IDE specific paths don't become interesting insideM  the compiler itself as well.  J Note that, by default, rust-analyzer tests **do not** include core or stdM L libraries. If you are writing tests for functionality using [`FamousDefs`],O K you'd want to include minicore (see `test_utils::MiniCore`) declaration atN  the start of your tests:   ``` $ //- minicore: iterator, ord, derive' 8  <<<<# <<S;  |La<<|La <SSSSSGH4_<8  88 <<    # # 8   77;  |La77"  7 788  77 #  7 788  77 $  7 788  77 #  7 788   77  ) 7 788   77  + 7 78    77  0  7 78    77  0  7 78    77  0  7 78 {-P    77  0  7 789  77 3  7 78   77 1  7 78   77 5  7 78   77 )  7 78  77 -  7 78   77 0  7 78   77 1  7 78   77 2  7 789  77 ,  7 78   77 /  7 78   77 9  7 78 {-P  77 ;  7 7877  77 1  77 78 7   77  1  77 78 79  77  /  77 78 79  77  3  77 78 7   77    !C ! 7 788!  77! ! # $2 $ 77 78 7 {-P$  77$ $ ) + a Random assortment of ide helpers for high-level ide features that don't fit in any other module.d | ! F FSourceDatabaseExt ָ SItemInNs S S U  S͙8 "make "AstToken " Ǿ8 . " TokenAtOffset # ̑  Ɩ  {  j | $     2           X X             K K         C  7 7   } J Picks the token with the highest rank returned by the passed in function.M        S   "     8 : Converts the mod path struct into its ast representation.=  7 7ݯ      z ? Iterates all `ModuleDef`s and `Impl` blocks of the given file.B  777 7SSSSSGH4_7֝ 77 ԡ \ ̆  ؆   = e Checks if the given lint is equal or is contained by the other lint which may or may not be a group.h  77 7 7 {   A  7 7 7  n  77 7SSSSSGH4_7  ԡ  a This module has the functionality to search the project and its dependencies for a certain item,d  by its name and a few criteria.e# b The main reason for this module to exist is the fact that project's items and dependencies' itemse 6 are located in different caches, with different APIs.9  F : import_map T8 S ָ S9 S S 0   b  AssocSearchMode TL  :             I $      , 4 A value to use, when uncertain which limit to pick.7     U Searches for importable items with the given name in the crate and its dependencies.X  <7 <SSSSSGH4_7< ԡ 7   d    ؟  <7 <SSSSSGH4_7֡TLTLTLĥTTLѥTTL search_modeTTL assoc_modeTTLdTTLdTqqŰ< ԡ 7  local_query external_query     α Ƿ  See [`Label`]   %   Ԗ!  77 7Ԗ 7    ! 7Ԗ"  777 7Ԗ 7 7  7     Ԗ   Ԗ"  Ԗ   Ԗ8  777 7Ԗ 7GGGEGEGEG EGEGEQ ! >S7   'w z*     Ԗ8  777 7Ԗ 7GGGEGEGEG EGEGEQ ! >S79     See [`PathTransform`].  B0 FM :8_ S  HirDisplayl bx S  ͙8 "8 " ted "  "  0 E M Y. _ _ l l x x   : :           "1_h^r                    9 `PathTransform` substitutes path in SyntaxNodes in bulk.<  J This is mostly useful for IDE code generation. If you paste some existingM K code into a new context (for example, to add method overrides to an `impl`N M block), you generally want to appropriately qualify the names, and sometimesP 9 you might want to substitute generic parameters as well:<  8  mod x {  pub struct A; 2 pub trait T { fn foo(&self, _: U) -> A; }5  }   mod y {  use x::T;   impl T<()> for () { P // If we invoke **Add Missing Members** here, we want to copy-paste `foo`.S 7 // But we want a slightly-modified version of it:: ) fn foo(&self, _: ()) -> x::A<()> {} ,  }  9  8  <<< $ GGGGHܬUOM$<ܬUOM$   $  {-P    $  <SSSS\SSSqg Sw< $ 9  <GGGGHܬUOM$<     <SSSS\SSSqg Sw<9ݍ9 <G H       99½9 <G H   8   999 <G H (  77 79 7  <  L  7 79< ( 8# 8 < <<      7 79IIIIJH:恒S|<  <  ! 0 1 4 4 <<<6$ IIIIJH:恒S|<:恒S|4 4 41 4 54 5 57 5 5 5 6$ 6  <SSSS\SSSqg Sw<6C 6 7 76 6 7 8 7IIIIJH:恒S|78" 8 77 79 78  78 8 < >K > 7 79>  7> > B7 B 7 79 B  7B B D O ̷a jA j  {-P impl_defj lZ l ½9 8m n s s 77 7SSSS\SSSqg Sw7 t t type_paramt 8t v F Rename infrastructure for rust-analyzer. It is used primarily for theIM literal "rename" in the ide (look for tests there), but it is also availableJPI as a general-purpose service. For example, it is used by the fix for theL "incorrect case" diagnostic. J It leverages the [`crate::search`] functionality to find what needs to beMH renamed. The actual renames are tricky -- field shorthands need specialKL attention, and, when renaming modules, you also want to rename files on theO file system.! Another can of worms are macros:$ ```ignore ' macro_rules! m { () => { fn f() {} } }* m!();  fn main() { f() // <- rename me98M The correct behavior in such cases is probably to show a dialog to the user.P' Our current behavior is ¯\_(ツ)_/¯.* %NJ FFF F: FieldSource S HasSource SU ModuleSource TK S͙8"8"8" Ǿ8 . ,.C8E8M̑      Ѣ  }  h    format_err bail-  >         LL    &        *      # MŤ9 M    'w:     ! 8 777 7 7GGGEGEGEG EGEGEQ ! >S79       ?                                                                          ?       :    7777 7 7SSSSSGH4_7 7   'w ԡVE Textual range of the identifier which will change when renaming thisHG `Definition`. Note that some definitions, like builtin types, can't beJ renamed. 77 7SSSSSGH4_7 ԡ// 77 7SSSSSGH4_7N0/S0 "0  ɡ0ԡ0//2}2 777 7SSSSSGH4_7 7Ր:2 ԡ2338IJJ777 7SSSSSGH4_7 7Ր:J ԡJɡKKUVW|W77 7 7XX ɡXXf^f777 7 7 7f \fffll777 7 7 7l \lllɡmo777 7SSSSSGH4_7 7ԡɡҎؘ֭97 7   'wؘ & Rustdoc specific doc comment handling)% 7 7  - Implementation of find-usages functionality.01K It is based on the standard ide trick: first, we run a fast text search to5NI get a super-set of matches. Then, we we confirm each match using preciseL name resolution. mem FF 798 S  DefWithBody SHasAttrsS9 SU9 TK S  TKlIntMapH Lazy)|Ǿ8 .͙8"8 " 8"  ,,F>:̑  ؖ    i h  ?  h             6             ř7 7ř 7 7ř L7 7ř7   A 7 7ř7     # 'ř  ׁ֝  8 $ řř8  ӛAӛ 0 7 7ӛ I7 7ӛ ͝:7 7ӛ  !"M"7 7ӛ# ##, Build an empty search scope., ,ӛ -/4 Build a empty search scope spanning the given file.-7- ֝ӛ -/2F Build a empty search scope spanning the text range of the given file..I/ ӛ /0-5 Build a empty search scope spanning the given files.0807 7 ֝ӛ0 T011>1 77 7ӛ 7ӛӛ1 113K6ϯ8!ӛ8 89 9RΞOP&268֝9$9 ӛӛ8 9::8: 77 7 7ӛ: ::B˷BCDGKKLMNNOP^P^<7 <SSSSSGH4_7   ɡ ԡ    WqE<^ ^ԡ^^^`e7   ɡ ԡ    WqE7f*Q Enable searching for `Self` when the definition is a type or `self` for modules.eTf:: 7fg1- Limit the search to a given [`SearchScope`].g0g:ӛ: 7ggi>:h0i :: 7iij"j 7 7:j 7jjk%k:ř 7klmEm77 7: 77m 7msinkmu vvwww z|}} < < <llll:gx!<<} m~finder~~ }}  <7 <SSSSSGH4_7 <ӛ<Ȃ ԡقȂȂʏdž>LJ͎֗ߪݚŮԲײ7777 7: 7 7 77 7self_ty:ij777 7: 7 77 7:777 7: 7״ 77 7:777 7: 7 77 7: 777 7: 7 77 7:W 777 7SSSSSGH4_7 7 ԡɡΚG77 7 7 ɡĦ97 7҂ Ȃ؃M This modules defines type to represent changes to the source code, that flowP from the server to the client.Q"t) It can be viewed as a dual for `Change`.x,  Entry%:  NJ FFF:H algo"͙8"9" 8"  SyntaxElement " " SyntaxNodePtr " " ,,8E8M. " x          &0 Creates a new SourceChange with the given label3 from the edits.  >֝ \\ EX Inserts a [`TextEdit`] for the given [`FileId`]. This properly handles merging existing [( edits for a file if some already exist. + 7 7֝  \ \  = 7 7ž\C7 7֝ {-P 7 \; 0I7 7Ť98'8ԝ ,E7 7Ť9Ƈ;#8ž 4D 6I Ť9Ƈ;'ه; 8֝  %H Maps the original, immutable `SyntaxNode` to a `clone_for_update` twin.K +' Keeps track of where to place snippets* {-P Su  17 7] 177 7 7"  > 77 7 7   !!2!֝ \!$,$ 7 7֝$ $\$$%7 7% %+4+7 7+;+;+ +++++0A5 Returns a copy of the `node`, suitable for mutation.,8,D Syntax trees in rust-analyzer are typically immutable, and mutating,GG operations panic at runtime. However, it is possible to make a copy of-JC the tree and mutate the copy freely. Mutation is based on interior.FI mutability, and different nodes in the same tree see the same mutations..L/H The typical pattern for an assist is to find specific nodes in the read/KG phase, and then get their mutable counterparts using `make_mut` in the/J mutable state.007 70 1112*" Remove specified `range` of text.2%27 72 223C. Append specified `text` at the given `offset`3137 7334 33m351 Append specified `snippet` at the given `offset`4457 75;5;5  55557L8 Replaces specified `range` of text with a given string.6;77 77;7;7  77 7 8; Replaces specified `range` of text with a given `snippet`.8>97 79;9;9  9999:9: 7 7;;:;: ; ;;::;O< 7 7 <;<;<  << <=>> 7 7֝ > >ڤ>>?(?7 7? ?@J9 Adds a tabstop snippet to place the cursor before `node`@<@7 7  A A "  A  AAACI8 Adds a tabstop snippet to place the cursor after `node`B;C7 7  C;C ;C  CCCEP: Adds a tabstop snippet to place the cursor before `token`D=E7 7E EEEGO9 Adds a tabstop snippet to place the cursor after `token`F<G7 7G GGGIO7 Adds a snippet to move the cursor selected over `node`I:I7 7  I;J ;J  IIJK0K 7 7K KKM'M MP*P-Pž \PRR 87|n   RR RR  R R  SS SS  S S  SS SS  S S  TTT TorderU_,_  ;`L This module handles fuzzy-searching of functions, structs and other symbolsO5 by name across the whole workspace and dependencies.P8G It works by building an incrementally-updated text-search index of allJE symbols. The backbone of the index is the **awesome** `fst` crate byH @BurntSushi.C In a nutshell, you give a set of strings to `fst`, and it builds aFG finite state machine describing this set of strings. The strings whichJM could fuzzy-match a pattern can also be described by a finite state machine.PJ What is freaking cool is that you can now traverse both state machines inMG lock-step to enumerate the strings which are both in the input set andJJ fuzz-match the query. Or, more formally, given two languages described byMJ FSTs, one can build a product FST which describes the intersection of theM languages.M `fst` does not support cheap updating of the index, but it supports unioningPL of state machines. So, to account for changing source code, we build an FSTOM for each library (which is assumed to never change) and an FST for each RustPH file in the current workspace, and run a query against the union of allK those FSTs.     % I I I:   JParallelDatabase J9 İ İ 7  GStreamer G 7 b. S Sָ S S  F >: FromParallelIteratorWmm%IndexedParallelIteratorWmm$IntoParallelIteratorWmm#IntoParallelRefIteratorWmm#IntoParallelRefMutIteratorWmm#ParallelBridgeWmmParallelDrainFullWmm%ParallelDrainRangeWmm%ParallelExtendWmm%ParallelIteratorWmm# ParallelSlice Wmm+ParallelSliceMutWmm+ParallelStringWmm- G    G       ^ ^              \  \           ֡"֡ ĥ 7 7֡ 7 7֡ 7 7֡  7 7֡ %7 7֡ d^7 7 7     !O!7 7 7 " ""#W# 7 7 7 $ #7$% &&e&3Ín&& &&&&&4e;&J&&&&&7 7& &'>e;';'''','7 7' '(%e;(((( (( )7 7 7) )2H2 7 7֡ 2 2ĥ23 4  7  7  9ͦ989777 7ͦ 7GGGEGEGEG EGEGEQ ! >S799 99:ͦ;);77 7ͦ 7ͦ; ;;;ͦ<ͦ<)<77 7ͦ 7 f< <I <  < <<<=ͦ=3= ͦ ==6=77 7 7 = = => ? FF7 7ͦF FG"G 7 7ͦG GH6H  HHJ3J JK ֡KKK7֡ 7 K K KV @ Functionality for obtaining data related to traits from the DB.C̑W  c 7 b.8 S  S  ͙8"8" I'QW c c v.|      vO Given the `impl` block, attempts to find the trait this `impl` corresponds to.R777 7SSSSSGH4_7 7  ԡ9 z` Given the `impl` block, returns the list of associated items (e.g. functions or types) that arec missing in this `impl` block.!777 7SSSSSGH4_7 7  ԡ9   Z7 7b.7 ɡ ]7 7b.7  ɡ|7 7b.7ݍ Օ   B This module contains structures for filtering the expected types.E[ Use case for structures in this module is, for example, situation when you need to processF^ only certain `Enum`s.  % S͙8"9"Pat",      UT Returns `Some(..)` if the provided type is an enum that implements `std::ops::Try`.W777 7SSSSSGH4_7 7  ԡ  '    $    0    / " < 2 Functionality for generating trivial constructors5 StructKind@ T9͙8X";@ P X}< given a type return the trivial constructor (if one exists)^?77 7 7  $ Look up accessible paths for items.'  87 S 8D SAssocItemContainerOSָcS9jStU}S S8S PrefixKind TK8S SSS Itertools 9  ͙8"8"#path_to_string_stripping_turbo_fish# " 8"  "B  C9TLD ,7 7 D D OOccjjtt}}        nn*#  | |   6  7 7 7777 7"$"$"$"z?wI 7SSSSSGH4_7 {-P  method_call ԡ777 7 7SSSSSGH4_7̗< fully_qualified_pathԡ#]# 777 7SSSSSGH4_7 7̗<# ԡ##&'77 7SSSSSGH4_7̗<( ö''  fuzzy_name' ԡ((**̗< module_with_method_call*ڳ* fuzzy_method_name++566ݯ 6 66 6 78287 7 78 888777 7 7SSSSSGH4_7 444040bW`(9 9ԡ99  9 <b This may return non-absolute paths if a part of the returned path is already imported into scope.;e<777 7 7SSSSSGH4_7<< <ԡ< = >@>7 7> >d>AB 777 7 7SSSSSGH4_7 <B BԡB B B D L L M NVN777 7 7SSSSSGH4_7 N NԡNP QQ777 7SSSSSGH4_7 7  Q R+  R  S S  ԡQ R  R R\ a dd777 7 7 7  d d$  d  d  d d e ee l mڙ uRu7 7 u uuyy77 7 7 zϖ zz  z{ ~x~77 7 7~ ~ segment_name~ ˳~ 77777 7SSSSSGH4_7 7SSSS\SSSqg Sw7 7Ǩ  ҃<$<<  ԡ̃    ڄ ̊     Ԝ.ל   77 7 7  item_to_searchö ޟ  777 7SSSSSGH4_7 7֖< {-Pݢ ԡע< Y777 7SSSSSGH4_7 7< ԡ˩QΩ777 7SSSSSGH4_7 7<ݩ ԡש77 7SSSSSGH4_7<  <ح ԡ77 7SSSSSGH4_7< ԡϯ սHؽ 7 7 ¾ П 8 Handle syntactic aspects of inserting a new `use` item.;  cw S:"͙8" Removable "9"8" :" HasModuleItem "׺8 "PathSegmentKind"19"  Direction # ۚ8 # Ǿ8 . "y  z z  w y   < TKYcrw                        a Determines the containing syntax node in which to insert a `use` statement affecting `position`.d4 Returns the original source node inside attributes.7777 7 7SSSSSGH4_7 {-P ԡ27 7"7 attrs   ,+,7 7 7, ,.&.7 7. .2N~ Insert an import path into the given file/node. A `merge` value of none indicates that no import merging is allowed to occur.12 77 7 72 222; @Y@"7 7 {-P   l*"@ @D3D7 7D DFG'G7 7G GPNP7 7P PR W gxg 77 7 7վ g g h  group_importsh use_itemhj j n  o  r  r y  y  ҇ʑ   ב/ڑ  . Handle syntactic aspects of merging UseTrees.1 @ EitherOrBoth[ 9<i 9͙8"8" :"׺8 "<"19"  6@O$[ [ i i yXyX  '677 7 7 Ф  z, Merge `rhs` into `lhs` keeping both intact./ Returned AST is mutable.77 7վ 7վ    merge_behavior {< /<  77 7 7      [ b77 7 7    [^ֿ 77 7 7    [   ج    ! Զ ! # # -XM Traverses both paths until they differ, returning the common prefix of both.-P- 77 7 7 {-P- - .6L6  6 7;S;7 {-P 7 ; ; ;?;?77 7 7 ? ? ?A D|D77 7 7 DɃ D D E EG KKK77 7 7 K K KL M NZN   vis0Ovis1OPtP    P Q9 Q 9 Q9 Q 9 Q    P QR R S S T  T)T 7 7T TU U%U U  5 Generated by `sourcegen_lints`, do not edit by hand.8 )9Cu|%  <    +   =+΋==  =*΋=LexedStr. 3 Various helper functions to work with SyntaxNodes.6<F 9].C͙8x" HasLoopBody~ "  "<"1VisibilityKind"8" 9" Preorder# RustLanguage "  WalkEvent # ;F U ]ddxr~ ~       A7 7J7 7 5Ӌ5F7 75 5A6 Preorder walk all the expression's child expressions.9 77 7 77 ̆5 YH Preorder walk all the expression's child expressions preserving events. Kh If the callback returns true on an [`WalkEvent::Enter`], the subtree of the expression will be skipped. k] Note that the subtree may already be skipped due to the context analysis this function does. ` 77 7 7557   ̆ 55M3 Preorder walk all the expression's child patterns.677 7 7ם=7  ̆ 1=. Preorder walk all the pattern's sub patterns.11177 7 7ם=ם=71 1̆18E( Preorder walk all the type's sub types.7+877 7 7  78  8̆8>F>77 7 7 > >>@ 5@5G:J Returns the `let` only if there is exactly one (that is, `let pat = expr`FMN or `((let pat = expr))`, but not `let pat = expr && expr` or `non_let_expr`).GQH  {-P"%"%"%" M]V HI/I5IK5OKH Calls `cb` on each expression inside `expr` that is at "tail position".MK4 Does not walk into `break` or `return` expressions.N7[ Note that modifying the tree while iterating it will cause undefined iteration which mightN^/ potentially results in an out of bounds panic.O2O77 7 775757P5P̆PPE5Q5Q5U5`5`5hh 75ϲ5 77i h5ĭii5oo75ϲ5 7˳5˳57p5o5p̆pq5tPt 77 7 7t lt1tlt2uu 5vvҲJ+v v##=#>###. v vvҲw#w Ҳ 5wx'Ҳx xx(x7 7Ҳ {-PҲ9x xy5S< Parses the input token tree as comma separated plain paths.߁?׵  {-P444040bW`(  ‚555 55M7 7ן6Ơ6ϋ66Nj#O Utilities for formatting macro expanded nodes until we get a proper formatter.R9j"9z" 5"5ۚ8 # Ǿ8. " "= # .Cӈ ..ӈ ...... .. ..............Չ..Չ..................Ê..Ê..ي..ي......................Ћ..Ћ......................nj ..nj ..........................֍..֍...... .. ..............ʎ ..ʎ ......................ɏ..ɏ..ݏ..ݏ.......... .. ......ɐ..ɐ..ݐ..ݐ......................ԑ..ԑ.............. .. ..Ȓ..Ȓ..ߒ..ߒ.............. .. ..̓..̓.......... .. .. .. .. .. ..ʔ ..ʔ ..ߔ ..ߔ .. .. .. .. .. .. .. .. ..Ε ..Ε .. .. .. .. .. .. .. .. .. .. ..֖ ..֖ .. .. .. .. .. .. .. .. ..ʗ ..ʗ ..ߗ ..ߗ .. .. .. .. .. .. .. .. ..И ..И .. .. .. .. .. .. .. .. ..ʙ ..ʙ ..ߙ ..ߙ .. .. .. .. .. .. ..ƚ ..ƚ ..ٚ ..ٚ .. .. .. .. .. .. .. .. ..ƛ ..ƛ ..ڛ ..ڛ .. .. .. .. ...... .. ..֜..֜.................. .. ..՝..՝.................. .. ..՞..՞.. .. .. .. .. .. .. .. ..џ ..џ .. .. .. .. .. .. .. .. ..Ҡ ..Ҡ .. .. ...... .. .. .. ..ѡ..ѡ.. .. .. .. ..........բ..բ...... .. ..........У ..У .. .. .......... .. ..Ϥ..Ϥ.......... .. ..ͥ ..ͥ .. .. .. .. .. .. ......Ҧ ..Ҧ .. .. .. .. .. .. .. .. ..է..է.. .. .. .. ...... .. ..Ԩ ..Ԩ ...... .. .. .. .. .. ..ѩ ..ѩ .. .. .......... .. ..ժ ..ժ ...... .. .. .. .. .. ..ܫ..ܫ.......... .. ..Ԭ ..Ԭ ...... .. .. .. ..­..­..ڭ ..ڭ ...... .. .. .. ......خ ..خ ..............̯ ..̯ ...... .. .. .. .. .. ..ذ..ذ.............. .. ..ѱ..ѱ.. .. .......... .. ..Ȳ ..Ȳ .. .. ..................ճ..ճ.. .. ...... .. ..Ŵ..Ŵ.. .. ...... .. ......׵..׵.. .. .......... .. ..ڶ ..ڶ ...... .. ...... .. ..շ..շ.. .. .. .. ......We jWzt  W       4T Renders a [`SyntaxNode`] with whitespace inserted between tokens that require them.W syn55-5-5,65,666׏6666"6$6%!%ĉ %S Tools to work with format string literals for the `format_args!` family of macros.V | ͙8"IsString" ,,[<|??  57 7ן6 66 w 77 7ן6 7667  6 6  66#6#6* 6. 6> 6F 6LL77 76 76܅L6L6L96M"696M66M!66M! 666LM6MLLLLNO 77 76 76܅O>O¾>Oվ>O">O>P!>P! 666O6OOOOOSS77 76 76܅S>S¾>Sվ>T">T>T!>T! 666S6SSSSSXX77 76 76܅X>X¾>Xվ>Y">Y>Y!>Y! 666X6YXXXXj Tools to work with expressions present in format string literals for the `format_args!` family of macros.m- Primarily meant for assists and completions.n07 Add placeholders like `$1` and `$2` in place of [`Arg::Placeholder`], and unwraps the [`Arg::Ident`] and [`Arg::Expr`] enums. ```rust # use ide_db::syntax_helpers::format_string_exprs::*; assert_eq!(with_placeholders(vec![Arg::Ident("ident".to_owned()), Arg::Placeholder, Arg::Expr("expr + 2".to_owned())]), vec!["ident".to_owned(), "$1".to_owned(), "expr + 2".to_owned()]) ``` 444040bW`(444040bW`( 7 H Parser for a format-like string. It is more allowing in terms of string contents, as we expect variable placeholders to be filled with expressions. Built for completions and assists, and escapes `\` and `$` in output. (See the comments on `get_receiver_text()` for detail.) Splits a format string that may contain expressions like ```rust assert_eq!(parse("{ident} {} {expr + 42} ").unwrap(), ("{} {} {}", vec![Arg::Ident("ident"), Arg::Placeholder, Arg::Expr("expr + 42")])); ```  7 7   'w>   ' ƍ7       3       =     ,              Ť9 ; ; IndexSet; ;2x?    2 2  8 8 ;;IndexMap;;; hash_builder;>>x     7 7    8777 7 7GGGEGEGEG EGEGEQ ! >S79  0 37 7 7  - 07 7 7  - 07 7 7    0 7 7֝  \@ 77 7FF7Fߊ F0 #/7 {-P֝  E7 7֝>:>:F><>>=>gG1   Ξ /ϥY]  \%    7  lru_capacity !)!7 7 ! !"N"7 7 # #># &T&77 7 7Ξ:QF   l* ' 'lru_capacities'''-*--/..... . .. ... ĥ.. . .../../ . . ... . .. >.. get../  .  ../. ĥ.// / /// ĥ// / // // set_lru_capacity/// // /V- W3W7 7  W WYLY 7 77֝7Y Y\Z^(ƽ ^#^ƽ  _a*ƽ b%bƽ  bj j<j7  7j(!W(ÑW(Α2W(ՑW(˖$W    )&W)WXXXXX XXXXXXXXXXXXXЙ9:&W:W:W:W:W:W:Ws#% ap    1   {-P 777 7 7GGGEGEGEG EGEGEQ ! >S79   ϧ   5 Short description of the assist, as shown in the UI.8  Ԗ  F Target ranges are used to sort assists: the smaller the target range,I? the more specific assist is, and so it should be sorted first.B   'I Computing source change sometimes is much more costly then computing theLF other fields. Additionally, the actual change is not required to showID the lightbulb UI, it only is needed when the user tries to apply anGH assist. So, we compute it lazily: the API allow requesting assists with KF or without source change. We could (and in fact, used to) distinguish IG between resolved and unresolved assists at the type level, but this is JH cumbersome, especially if you want to embed an assist into another data K! structure, such as a diagnostic. $        777 7 7GGGEGEGEG EGEGEQ ! >S79   7 7    *fg.K                                                                777 7 7GGGEGEGEG EGEGEQ ! >S79            7 7                   77 7 7                          7 7    A Unique identifier of the assist, should not be shown to the userD directly. - q$ <<    <   777 7 7GGGEGEGEG EGEGEQ ! >S79   7 7             77 7 7      7 7  J A way to control how many assist to resolve during the assist resolution.Mc When an assist is resolved, its edits are calculated that might be costly to always do by default.fЁ1    Ё No assists should be resolved."  Ё  Ё All assists should be resolved.#  Ё  Ё* Only a certain assist should be resolved.-  Ё      Ё 777 7Ё 7GGGEGEGEG EGEGEQ ! >S79   ; Hold the [`AssistId`] data of a certain assist to resolve.>B The original id object cannot be used due to a `'static` lifetimeEV and the requirement to construct this struct dynamically during the resolve handling. Y! U} ! The id of the assist.!!   !!          777 7 7GGGEGEGEG EGEGEQ ! >S79     %% Ԃtbؿ^" Ԃ%% Ԃ  % %   %%%%Ԃ %%7 7ԂԂ % %%%%%Ԃ %%777 7Ԃ 7GGGEGEGEG EGEGEQ ! >S79 % %% N      ً    ݍ      Î      ̑     Ր                             ً    ً                    ݍ     ݍ               Î     Î               ̑     ̑                         Ր     Ր                               777 7 7GGGEGEGEG EGEGEQ ! >S79     ߀        77 7 7      7 7   7 7   77 7 7    I  )) xY !    ֈ) )   ) )   ) )   ) )   ) )   е) )   **  **ֈ  * *   ֈ)))ى) ))777 7 7GGGEGEGEG EGEGEQ ! >S79 ) ))/    LK On a first blush, a single `ast::Name` defines a single definition at someHNJ scope. That is, that, by just looking at the syntactical category, we canIM, unambiguously define the semantic category.J/JH Sadly, that's not 100% true, there are special cases. To make sure thatJKK callers handle all the special cases correctly via exhaustive matching, weKN2 add a [`NameClass`] enum which lists all of them!K5L4 A model special case is `None` constant in pattern.L7L Ӷ    L L   L L   L L   N' `None` in `if let None = Some(82) {}`.M*A Syntactically, it is a name, but semantically it is a reference.MDN  NN  N N   OK `field` in `if let Foo { field } = foo`. Here, `ast::Name` both introducesNNG a definition into a local scope, and refers to an existing definition.NJO  OO   PP   LLLȌL LL777 7 7GGGEGEGEG EGEGEQ ! >S79 L LLyy ֈ(Ӎ.  ֈ ֈ ֈ ֈ ֈyy  yyֈ  yy  yy  yyֈ  yy  zz  zzֈ  zz  zz  zzֈ  zz  zz  zzֈ  zz  yyyyֈ yy777 7ֈ 7GGGEGEGEG EGEGEQ ! >S79 y yyM This is similar to [`NameClass`], but works for [`ast::NameRef`] rather thanPI for [`ast::Name`]. Similarly, what looks like a reference in syntax is aLK reference most of the time, but there are a couple of annoying exceptions.ND A model special case is field shorthand syntax, which uses a singleG* reference to point to two different defs.Ʌ- ?Y&                 цц       777 7 7GGGEGEGEG EGEGEQ ! >S79  ̕    Ԛ                            ً            ݍ      Î            Ր            K A type to specify UI label, like an entry in the list of assists. Enforces!N  proper casing:p   Frobnicate bar  D Note the upper-case first letter and the absence of `.` at the end.G  Ԗ>u  Ԗ  Ԗ         Ֆ Ԗ   7 7ԖԖ      âGM "                 ! L<ᨽ           Η    777 7 7GGGEGEGEG EGEGEQ ! >S79     Aؘ 9ݏ*    A  ؘ  ؘA  ؘ  ؘǭ Aǭ   ؘǭ ǭ   ؘؘؘ 7 7ؘؘ  ؘ 777 7ؘ 7GGGEGEGEG EGEGEQ ! >S79     ǜ ؘ   Ϝ ؘ   77 7ؘ 7ؘ    Hř8<~ 2   ř 777 7ř 7GGGEGEGEG EGEGEQ ! >S79  ř ř  ř 7 7řř   I &g'U\ 0 The range of the reference in the original file 3  . The node of the reference in the (macro-)file1  '         777 7 7GGGEGEGEG EGEGEQ ! >S79            7 7    JΚ_x+d    J  Κ  ΚJ  Κ  ΚJ  Κ  Κ؟Κ 777 7Κ 7GGGEGEGEG EGEGEQ ! >S79  ΚΚ 7 7ΚΚ      Κ    Κ   77 7Κ 7Κ    ΚΚ  7 7Κ  Κ 77 7Κ 7    ??  W Generally, `search_scope` returns files that might contain references for the element.ZZ For `pub(crate)` things it's a crate, for `pub` things it's a crate and dependant crates.]P In some cases, the location of the references is known to within a `TextRange`,S& e.g. for things like local variables.)K ӛ6mN~-"2 *  ӛ 7 7ӛӛ  ԡӛ 777 7ӛ 7GGGEGEGEG EGEGEQ ! >S79  aLa <   < <b%   ɡ ԡ    WqE <WqE aaaa  b%b  <SSSSSGH4_ <bb  c5c  d'd  dd  aaaa<   aaaa7 7 a  <aS sp /  *        ܤ 777 7 7GGGEGEGEG EGEGEQ ! >S79   7 7  U7g& V      N\Nž^$a4    N \N   žNN  NN  O\O  žO O  ֝OO  O\O  žOO  OO  ֝OO  NNNħNž NN777 7ž 7GGGEGEGEG EGEGEQ ! >S79 N NNNNNNž NN7 7žž N N a ֡jh                       Ъ ֡   777 7֡ 7GGGEGEGEG EGEGEQ ! >S79     -b  J-J@â-b.@ @@ @-@-@ @@ -ZZëZW The symbol index for a given module. These modules should only be in source roots that@ZZū are inside local_roots.@7 7@   @--BBԫB? The symbol index for a given source root within library_roots.@BB7 7@   @- -===: The symbol indices of modules that make up a given crate.@== 7 7@   @-7-CCCB The set of \"local\" (that is, from the current workspace) roots.@ The set of "local" (that is, from the current workspace) roots.CC:::7 Files in local roots are assumed to change frequently.@:: 7 7@   @-----\n Set the value of the `local_roots` input.\n\n See `local_roots` for details.\n\n *Note:* Setting values will trigger cancellation\n of any ongoing queries; this method blocks until\n those queries have been cancelled.\n  Set the value of the `local_roots` input. See `local_roots` for details. *Note:* Setting values will trigger cancellation of any ongoing queries; this method blocks until those queries have been cancelled. -- 7 7@   @- -----\n Set the value of the `local_roots` input and promise\n that its value will never change again.\n\n See `local_roots` for details.\n\n *Note:* Setting values will trigger cancellation\n of any ongoing queries; this method blocks until\n those queries have been cancelled.\n  Set the value of the `local_roots` input and promise that its value will never change again. See `local_roots` for details. *Note:* Setting values will trigger cancellation of any ongoing queries; this method blocks until those queries have been cancelled. -- 7 7@ Ϲ   @- -ƹ -----* The set of roots for crates.io libraries.@--3330 Files in libraries are assumed to never change.@33 7 7@   @-----\n Set the value of the `library_roots` input.\n\n See `library_roots` for details.\n\n *Note:* Setting values will trigger cancellation\n of any ongoing queries; this method blocks until\n those queries have been cancelled.\n  Set the value of the `library_roots` input. See `library_roots` for details. *Note:* Setting values will trigger cancellation of any ongoing queries; this method blocks until those queries have been cancelled. -- 7 7@   @- ----Ŭ-\n Set the value of the `library_roots` input and promise\n that its value will never change again.\n\n See `library_roots` for details.\n\n *Note:* Setting values will trigger cancellation\n of any ongoing queries; this method blocks until\n those queries have been cancelled.\n  Set the value of the `library_roots` input and promise that its value will never change again. See `library_roots` for details. *Note:* Setting values will trigger cancellation of any ongoing queries; this method blocks until those queries have been cancelled. -- 7 7@ Ϲ   @- -ƹ -+--٬-+ Representative struct for the query group.@--bâ.Vz^+bâ --   --    ٮ d d Ǧ Vm1-be  ;-b. J-Jâ- ---7 7   ---77 7 7 ݮ --7 7   - --77 7 7 ް - - 7 7   -7- 7 7   ---77 7 7  -- 7 7   - ---7 7 7  - -- 7 7 Ϲ   - -ƹ ---7 7 7 Ϲ  - -ƹ -- 7 7   ---77 7 7  -- 7 7   - ---7 7 7 ɼ - -- 7 7 Ϲ   - -ƹ ---7 7 7 Ϲ  - -ƹ --b ----6 Get access to extra methods pertaining to this query.A-----1 You can also use it to invoke this query, thoughA-----9 it's more common to use the trait method on the databaseA----- itself.A---7 7 7JJJJJJ9S坫7  ---b ----: Like `in_db`, but gives access to methods for setting theA-----6 value of an input. Not applicable to derived queries.A----------& # Threads, cancellation, and blockingĉA----------= Mutating the value of a query cannot be done while there areA-----> still other queries executing. If you are using your databaseۋA-----= within a single thread, this is not a problem: you only have֌A-----? `&self` access to the database, but this method requires `&mutЍA----- self`.̎A----------> However, if you have used `snapshot` to create other threads,ʏA-----? then attempts to `set` will **block the current thread** untilŐA-----8 those snapshots are dropped (usually when those threadsA-----? complete). This also implies that if you create a snapshot butA-----; do not send it to another thread, then invoking `set` willA----- deadlock.A----------= Before blocking, the thread that is attempting to `set` willA-----8 also set a cancellation flag. This will cause any queryA-----: invocations in other threads to unwind with a `Cancelled`A-----= sentinel value and eventually let the `set` succeed once allA-----0 threads have unwound past the salsa invocation.A----------7 If your query implementations are performing expensiveA-----< operations without invoking another query, you can also useA----±-: the `Runtime::unwind_if_cancelled` method to check for anA----ı-< ongoing cancellation and bring those operations to a close,A----Ʊ-< thus allowing the `set` to succeed. Otherwise, long-runningA----ȱ-8 computations may lead to "starvation", meaning that theA----ʱ-= thread attempting to `set` has to wait a long, long time. =)A---7 7 7JJ QueryTableMutJJJJPN7  ---b   ----   --  â--  @-b --  --  --  JJDerivedStorageJ group_indexJ.Jlru_listJ.Jslot_mapJ.JpolicyJ.%葖 J qLk0--  --  <-- <7  <7J  <--F----=J - ---b 77 77JJJ  -bţ ----AA-----AA-----AA-----AA---7ţ 7 7JJJJJJ9S坫7ţ  ---bţ ----AA-----AA----------ĉAĉA----------AA-----ۋAۋA-----֌A֌A-----ЍAЍA-----̎A̎A----------ʏAʏA-----ŐAŐA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA----³-AA----ij-AA---7ţ 7 7JJAJJJJPN7ţ  ---b  ţ ----   --  â--  @-bţ --  --  --  JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 ţA--  --  <-- <7  <ţ7J  <--F----=ţJ - ---bţ 77 7ţ7JţJţJ   -b ---ܴ-AA----޴-AA-----AA-----AA---7 7 7JJJJJJ9S坫7  ---b ----AA-----AA----------ĉAĉA----------AA-----ۋAۋA-----֌A֌A-----ЍAЍA-----̎A̎A----------ʏAʏA-----ŐAŐA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA-----AA-----AA---7 7 7JJAJJJJPN7  ---b   ----   --  â--  @-b --  --  --  JJ InputStorageJAJJslotsJaխ{--  --  <-- <7  <7J  <--F----=J - ----b ----AA-----AA-----AA-----AA---7 7 7JJJJJJ9S坫7  ---b ---Ӷ-AA----ն-AA----׶-----ٶ-ĉAĉA----۶-----ݶ-AA----߶-ۋAۋA-----֌A֌A-----ЍAЍA-----̎A̎A----------ʏAʏA-----ŐAŐA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA----------AA-----AA-----AA-----AA-----AA-----AA-----AA---7 7 7JJAJJJJPN7  ---b   ----   --  â--  @-b --  --  --  JJAJAJJAJaխ{--  --  <-- <7  <7J  <--F----=J - ----b-@Vm1 -  A-  A-   A-   A-b@ --@  A--b@ --77777 7@ 7 7J J DatabaseKeyIndexJ AJJ query_indexJJ key_indexJ·v$ 7GGGEGEGEG EGEGEQ ! >S79  -- ----777 7@ 7 7AJJRevisionJ generationJS]T `=  -- -revision---777 7@ 7JJRuntimeJ،JJrevision_guardJJ local_stateJJ shared_stateJzD 77 7J77A7  -_runtime----X͕J --  ---- --  ---Ļ- --777 7 7GGGEGEGEG EGEGEQ ! >S79  ----ţ;k --  ţ----ţ --ţ  ----ţ --777 7ţ 7GGGEGEGEG EGEGEQ ! >S79  ----ɖgA r --  ---- --  ---- --777 7 7GGGEGEGEG EGEGEQ ! >S79  ----!K(q --  ---Ӽ- --  ---- --777 7 7GGGEGEGEG EGEGEQ ! >S79  --8c8 ͦg 'F 88  99  8888ͦ 88ͦ  1 Enum types that implement `std::ops::Try` trait.4iITrg   i    i     7 7  ? A candidate for import, derived during various IDE activities:B/ * completion with imports on the fly proposals2# * completion edit resolve requests& * assists  * etc. jB5:   Ǩ ǨD A path, qualified (`std::collections::HashMap`) or not (`HashMap`).Gj      P A trait associated function (with no self parameter) or an associated constant.SZ For 'test_mod::TestEnum::test_function', `ty` is the `test_mod::TestEnum` expression type]" and `name` is the `test_function`%j  Ǩ    Ǩ $ A trait method with self parameter.'G For 'test_enum.test_method()', `ty` is the `test_enum` expression type J and `name` is the `test_method` #j    Ǩ     ǨӾ 777 7 7GGGEGEGEG EGEGEQ ! >S79   : A trait import needed for a given associated item access. =3 For `some::path::SomeStruct::ASSOC_`, contains the 6@ type of `some::path::SomeStruct` and `ASSOC_` as the item name. Ck Ǩr=7 = A type of the item that has the associated item accessed at. @    !B The associated item name that the trait to import should contain. E       Ǩ   777 7Ǩ 7GGGEGEGEG EGEGEQ ! >S79     0 Path import for a given name, qualified or not. 3lrA6l - Optional qualifier before name.#   ; The name the item (struct, trait, enum, etc.) should have.>   777 7 7GGGEGEGEG EGEGEQ ! >S79  !: A qualifier that has a first segment and it's unresolved.=mG        777 7 7GGGEGEGEG EGEGEQ ! >S79  . A name that will be used during item lookups.1n    ` Requires items with names that exactly match the given string, bool indicates case-sensitivity.cn        W Requires items with names that case-insensitively contain all letters from the string,Z/ in the same order, but not necessary adjacent.2n       777 7 7GGGEGEGEG EGEGEQ ! >S79   7 7  ] A struct to find imports in the project, given a certain name (or its part) and the context.`o ܘU2 !       777 7 7GGGEGEGEG EGEGEQ ! >S79  0a An import (not necessary the only one) that corresponds a certain given [`PathImportCandidate`]..d~ (the structure is not entirely correct, since there can be situations requiring two imports, see FIXME below for the details)/p0 $X  1M The path to use in the `use` statement for a given candidate to be imported.0P1   ݯ2: An item that will be imported with the import path given.1=2  5% The path import candidate, resolved.2(2" Not necessary matches the import:2%a For any associated constant from the trait, we try to access as `some::path::SomeStruct::ASSOC_`3dT the original item is the associated constant, but the import has to be a trait that4W defines this constant.45   5" A path of the original item.5 5   0000 00777 7 7GGGEGEGEG EGEGEQ ! >S79 0 000000 007 7 0 00 0 0 0 0 0 0 0  0 0 77 7 7 0 0 0 00000000 00000 0000007 7 0 00000 0077 7 7   0 ?0?0 0 0003 How imports should be grouped into use statements.6r y 6PA     k Do not change the granularity of any imports and preserve the original structure written by the developer.nr    ? Merge imports from the same crate into a single use statement.Br    @ Merge imports from the same module into a single use statement.Cr    8 Flatten imports so that each has its own use statement.;r    7 7  777 7 7GGGEGEGEG EGEGEQ ! >S79           77 7 7    7 7 su V#"         7 7 777 7 7GGGEGEGEG EGEGEQ ! >S79           77 7 7    7 7  t  ?R   t        t         t               777 7 7GGGEGEGEG EGEGEQ ! >S79          7 7   EuE L_FuFFFF uF F F F uF F F F uF F F F uF F F EEEEEEEEEEEEE EEEEEE7 7E EE E E E E E E E E E 77 7 7E E E E E E E E E 77 7 7 E E E EEEEEE77 7 7 E EEOvOB92COvOOOOvOOOOvOOOO vO O O OvOOOO vO O O N N N N N N N N N N 77 7 7N N N N N N N N N 77 7 7 N N N NNNNNN777 7 7GGGEGEGEG EGEGEQ ! >S79N NNOOOOOO7 7O OOOOO! What type of merges are allowed.$ eqXBBBC7 7 777 7 7GGGEGEGEG EGEGEQ ! >S79           77 7 7    7 7 KV0񢨙ae<~ <CCCCCC7 7C C  >ج                                                                            777 7 7GGGEGEGEG EGEGEQ ! >S79     4 Enum for representing extracted format string args.7B Can either be extracted expressions (which includes identifiers),E or placeholders `{}`. K\        777 7 7GGGEGEGEG EGEGEQ ! >S79           77 7 7    7 7  tH"̜          777 7 7GGGEGEGEG EGEGEQ ! >S79          7 7                 77 7 7    駯V0%37 קJJΪJ query_storeJJruntimeJD !         t=(  ޸J  J  ۹J J ҺJ J ɻJ âJ          7 7 7J7     7 7 7A     7 7 7A     777 7A 7GGGEGEGEG EGEGEQ ! >S79        7 7AA     A   77 7 77 7J77C7       7 7 7C      7 7 7C      7 7 7C      7 7 7C      7 7 7۹C      7 7 7C      7 7 7C      7 7 7ֺC   X/X@X/J@ɻX/@Y@X/CX/CYX/Y 7 7@֝7X @X/\YX-X/X/X/@@X/X/Xɻ~%ay|X-ɻX/X/X/X/- TaX/e;X/Y@X/JɻX/X/X/X/Y 7 7֝7X X/\YX/X/77 77֝7X7X/\YX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/7 77JJJJJJ9S坫7X X/X/X/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/X/X/X/X/X/ĉAĉAX/X/X/X/X/X/X/X/X/X/AAX/X/X/X/X/ۋAۋAX/X/X/X/X/֌A֌AX/X/X/X/X/ЍAЍAX/X/X/X/X/̎A̎AX/X/X/X/X/X/X/X/X/X/ʏAʏAX/X/X/X/X/ŐAŐAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/X/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/X/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/X/X/AAX/X/X/7 77JJAJJJJPN7X X/X/X/X/X/X/X/X/X/ɻX/X/CX/X/X/֝X/X/7X/X/JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 AX/X/X/X/<X/X/<7 <7J <--F----=JX/ X/X/X/Y Y Y 77 77JJJY Y \YX/X/C TaX/Y CX/CX/X/C AX/X/CX/X/77777 7C 77A 7GGGEGEGEG EGEGEQ ! >S79X X/X/ X/X/X/X/777 7C 77AAX X/X/ X/AX/X/X/777 7C 7A 77 7J77C7X X/AX/X/X/X/ dHX/X/X/X/X/X/X/X/ X/X/X/X/X/X/777 7 7GGGEGEGEG EGEGEQ ! >S79X X/X/[[ ƽj(E 7v          [ [ ƽ[ [ ƽ[ [ ƽ[ [ ƽ\\ƽ\\ƽ\ \ ƽ\ \ ƽ\\ƽ\\ƽ\ \ ƽ\ \ ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\\ƽ\ \ ƽ\ \ ƽ]]ƽ]]ƽ]]ƽ]]ƽ]]ƽ]]ƽ] ] ƽ] ] ƽ]]ƽ]]ƽ]]ƽ]]ƽ]]ƽ]]ƽ] ] ƽ] ] ƽ]]ƽ]]ƽ] ] ƽ] ] ƽ^ ^ ƽ^ ^ ƽ^ ^ ƽ^ ^ ƽ^^ƽ^^ƽ^ ^ ƽ^ ^ ƽ^^ƽ^^ƽ[[[[ƽ[[777 7ƽ 7GGGEGEGEG EGEGEQ ! >S79[ [[[[[[ƽ[[7 7ƽƽ[ [[[[[ƽ[ [ [ [ ƽ[ [ [ [ ƽ[ [ 77 7ƽ 7ƽ[ [ [ [[[[ƽ[[[[ƽ[[[[[ [[[[[[7 7ƽ[ [[[[[ƽ[[77 7ƽ 7[?[?[ [ [[[[ [ [ [ ƽ[ [ 77 7ƽ 7ƽ [ [ [ [[[[ƽ[[77 7ƽ 7ƽ [ [[jj YL?S'j jiiiiii7 7i ijjjjjjjjjj777 7 7GGGEGEGEG EGEGEQ ! >S79j jjj j j j j j j j j j 77 7 7j j j jjjjjjjjjjjjj jjjjjj7 7j j(W  ""   ~~8 98 89     **+555677SSS[[ggootuu{{{||}~~~ˈ                               ++Flatten++KLc RaliveXF>g89 99 99           ! $ $              # <<<# 9D D9 D<    # < ' ':_ˉ/8XS$ˉ/8X » )`L ,!.11R101010101010+qg Aױ <Ƿ<# 9D D9 D<                  ( (  6 6 ǻǻʻ*˻*Au=96 996 996 8 8 8 > B t t    00223JKKXXffgllm܎67ˉ/8XΞJ3w7ׁ֝  7֝ 7ׁD 7769D,D9طD"D7  $7++++}xΞJ3w7ׁ֝ˉ/8XNNNMNMNȈMjg(+7  7  7֝ 7ׁD7 $9ȻD ȻD9 ȻD7  #012::_ejӆ߆mm~#<ǻǻʻ*˻*AullFindIterlhaystackllprestatell:ll5l€"c<<<~#9D~D9~D<8<ˉ/8XΞJ3w<֝  <֝ < <<89D.D9$D<ʳ҂   $%+02333555777999;<<<>?AA A CC C EGIJ J K"$&')299:;;<<==FGK###((8999<<<>BBBNNNQRRR+R+deed$d$uzz~~҃݃$$џݢݩ,.;22@DGPgh   -.;??DEKKPPQQT   1188>>PPPPPiptuxϋ  LMOOSTXY !#''WY          %%%%)))LLLyyy        aNNNN   ---------------   000000000    EEEEEEENNNNNNNOC                         XXXX/XXX/YY XXX/XX/XXX/XXXXXXX/[[[[[[[[[[[[[ijjjjjj8 }R     L  "  Arg::ExprArg::Placeholder Arg::IdentDDDDDD ؖ ast::NameRef͙8"ؖ D͙8 ast::NameD͙8D"D"ؖ   crate::searchDD8EFFhirS hir::CallableSDDDDGGG;;;  WalkEvent::EnterD# D# """ 899889,S S" 899889,S"" 899889,  DDD&ч_&98};A&ч_&ݗ6L{&ч_&ݺOB/&ч_&>7Q&ч_&Rg}7&ч_&ݲ8&ч_&nj&ч_&-3ЀB@&ч_&ݞ5y6 !&ч_&d*'&ч_&ݽzw6(&ч_&6D;&ч_& &ч_&WH)A&ч_&:[%J&ч_&VAKS;&ч_&݀\ ̉&ч_&"h"|'Y&ч_&$Zeb&ч_&([*,4&ч_&ԡ fϫ&ч_&J %p&ч_&ݲZ#]9G&ч_& Uij&ч_&w ] ;6&ч_&ݪ)Q!&ч_&"&ч_&L b8&ч_&{9X 0v&ч_&ݏarl&ч_&݌:&ч_&ݢ 7 ͳ&ч_&e3#&ч_&nl`h&ч_&sꉲ&ч_&[޽'>&ч_&\imSsw&ч_&5 O\&ч_&ݢ8VȌ&ч_&&ٲp&ч_&ݟiJ|<7&ч_&݌ͫC&ч_&2&ч_&ݎzq.&ч_&ݕ>>p6&ч_&f5~&ч_&xFGVK&ч_&V5&ч_&Q:L&ч_&fZ]m&ч_&ޡ|&ч_&4#l&ч_&{dL=&ч_&ݛƴ&ч_&"u[17&ч_&A@N&ч_&ȡ=&ч_&q!P&ч_&f{n[+&ч_&9S7D&ч_& ؔ&ч_&xUېb&ч_&ݩcR&ч_&v>@tW&ч_&G?z}ʗ&ч_&E"D&ч_&˸)'&ч_&ݳ/~ks&ч_&6g=&ч_& p&ч_&5i|9+z&ч_&`#&ч_&'_6=$&ч_&t &ч_&݌m&ч_&݀W>&ч_&i*cV&ч_&hY&ч_&J  ~p&ч_&K|Db&ч_&*d&ч_&ݑ{p/C&ч_&ݾœL&ч_&)@C-&ч_&t|f4&ч_&\\Ha&ч_&fy%&ч_&AeC&ч_&{"u&ч_&gtF j&ч_&imlΞ&ч_&ݬ9tͣn &ч_& }<&ч_&@$Y&ч_&W[ 4-&ч_&"'&ч_&a~&ч_&=$&ч_&3dRA&ч_&tMh^mF&ч_&LDɴ&ч_&IW/&ч_&ݲ\v&ч_&[&ч_&h &ч_&*S#Z&ч_&ݘ&ч_&G&y]&ч_&<9&ч_&Nhk+S&ч_&ԟY&ч_&"~FO&ч_&a@Odځ&ч_&f5&ч_&_<&ч_&ݧD &ч_&݉% )Ck&ч_&ՌNI&ч_&ݲh8`&ч_&ݟ^~tP7E&&ч_&݄bo&ч_&l^y&ч_&p!k^d&ч_&еuk&ч_&}ѽ(8a&ч_&;GWg&ч_&K?Qh&ч_&ݹ p&ч_&wY" &ч_&5ֽ炸{g&ч_&p8t=y&ч_& &ч_&k+[&ч_&ݯF&ч_&2P<&ч_&W Vy&ч_&2=p&ч_&ݞ&7&ч_&E3[y|&ч_&)=qN&ч_&0 {o07&ч_&G?i&ч_&S?'&ч_&ݺ!-&ч_&ݡ=fa&ч_&Ns)&ч_&(n) F&ч_&z&ч_&ݦFֿI&ч_&`"gg1&ч_&ݞM{&ч_&J.FMYL$&ч_&*S'#&ч_&ݷ|&ч_&X,n &ч_&lZI&ч_&?t&ч_&",J2k&ч_&>L˶&ч_&gJR&ч_&ݗ*ۖ$ق&ч_&ݑ9~P&ч_&b3&ч_&Bpjr&ч_&{~ؑ7۵&ч_&[* c&ч_&ݦ@&ч_&=QP&ч_&ݡ}`Ylp&ч_&z-u&ч_&D*I&ч_& 36&ч_&`,8&ч_&"hn&ч_&kF&ч_&!.Dp&ч_&ݙ\`. &ч_&ݵ>p@&ч_&Q %>&ч_&ݰЧZ&ч_&S 4&ч_&Eu&ч_&ݠ(KŊ&ч_&Ь>&ч_&FǹՆ&ч_&EK`}&ч_&_};!&ч_&݇/8I&ч_&TF&ч_&^r0gQ`El&ч_&WXi&ч_&ݾ9qZ*&ч_&KL^S&ч_& *e`&ч_&/ ̯i&ч_&v:`&ч_&ݩis{w&ч_& &ч_&hb4 &ч_&}&ч_&ݻ˲&ч_&-w&ч_&mO" &ч_&oQ&ч_&jv+e%&ч_&&p0&ч_&14cy&ч_&]OV& M&ч_&ݠ_[&ч_&FZlLV.&ч_&jK a,'&ч_& ,d&ч_&Rt&ч_&ü&ч_&,7{'&ч_&dIb&ч_&ݻX1&ч_&2e6x&ч_&+I &ч_&rZ9X&ч_&e&"-(&ч_&> T&ч_&g_O;&ч_&Ce}@&ч_&݉#>"&ч_& LZ- &ч_&6Ћ&ч_&F`F&ч_&~Vx&ч_&>*nP&ч_&kI$Nd&ч_&m$>%&ч_&>F(d&ч_& t"&ч_&0 &ч_&#&ч_&ݶŰپ+Ə&ч_&0oBӓڎ&ч_&KE&ч_&݁~&ч_&\]@&ч_&b &ч_&lL&ч_&ݏNv=/&ч_&ݏjEn&ч_&}s&ч_& 4Rgs&ч_& $w&ч_&~& -\O&ч_&ݏ6Ⓘ&ч_&X?8V&ч_&)p[&ч_&`EUx&ч_&ݷT>@&ч_&ݴ$@TS(&ч_&z&ч_&, xw&ч_&3}h#)&ч_&ݹ!g&ч_&#翢&ч_&ݐh?f&ч_&@uu %h&ч_&ci-q&ч_&(is_,&ч_&nxYu&ч_&8D^)&ч_&N"~A&ч_&ݎE;us&ч_&݉K R&ч_&=aKt&ч_&xsx&ч_&`MW2~]}&ч_&PGmb&ч_&L"\ps&ч_&ݕ,(4?&ч_&Ln&ч_&ݢq%CBk&ч_&ݔ` ,I<&ч_&촏]&ч_&(&ч_&߆d:&ч_&/aa'&ч_&ݰ%ZY&ч_&ݸqjs&ч_&ݓ7; R&ч_&9!&ч_&N6)6&ч_&b'dE J&ч_&ݞk;&ч_&P*A+&ч_&ݛkQ&ч_&~氳&ч_&y4 Y&ч_&݃,HO&ч_&+xt&ч_&xx؃TN&ч_&ݚEF&ч_&&c$&ч_&ݻ`&0 &ч_&Fĕp'&ч_&݉i&ч_&`t|_&ч_&݌r̲l &ч_&Kh~;&ч_&o'&ч_&6R&ч_&Le$&ч_&ݓ1$I&ч_&V&ч_&ݜ0YI1&ч_&A=&&ч_&ݲ&&ч_&О&ч_&|l-w&ч_&qWL&ч_&ݽЕ9v&ч_&“<&ч_&`2c&ч_&-T&ч_&ݢzW8m&ч_&%6-&ч_&vA&ч_&'+XDl&ч_&݂!~&ч_&tn/h}&ч_&jkYс&ч_&pj"D&ч_&pi;jN&ч_&%is}&ч_&ݔNvu&ч_&n(&ч_&#P&ч_&ݿ&ч_&Dg{*&ч_&Bf&ч_&K&ч_&5BfDt&ч_&tcq&ч_&ݽsg&ч_& (/&ч_&uMN&ч_&ݒjNi&ч_&1"%&ч_&ݞdnwn9&ч_&"%sN&&ч_&^\&ч_&݁`B&ч_&J!裂]&ч_&jVˡ&ч_&oE̐&ч_&ŭR*c>&ч_&ݣRG&ч_&Tb@}&ч_&\\&ч_&taW&ч_&J8S3&ч_&c Z<=&ч_&MVD&ч_&An 4X&ч_&bU_s&ч_&ݔ>L_&ч_&5 5&ч_&O ,x*&ч_&1O -&ч_&ݓ2Ɏ$&ч_&vhҎ&ч_&ݷg'&ч_&0,TR&ч_&x_ˢ&ч_&n@&ч_&݆,p  &ч_&H3 &ч_& &ч_&wm&ч_&_O-&ч_&6"x&ч_&݀z-&ч_&ݜE8gV-&ч_&&ч_&&|1`&ч_&݁(L&ч_&S3}&ч_&4.⢤9&ч_&qenY&ч_&C*_&ч_&Hf8&ч_&zAF>&ч_&AtR2w&ч_&:<p&ч_& b&ч_&H]lҎ0&ч_&<4!Y&ч_&ݡ`8/&ч_&ݓoa&&ч_&G7g*H&ч_&O\ &ч_&l'̿'!&ч_&r&ч_&ӟw/@Q&ч_&WSUa8&ч_&g1B5x&ч_&6<rJ&ч_&W&ч_&ݲH'rv&ч_&݄;s,0&ч_&ݮY:Y:#&ч_&b+/L&ч_& &ч_&)i&ч_&ڋ.w,&ч_&.3&ч_&fsy&ч_&ݔGq>Y6&ч_&ٕĴ&ч_&vɊ\&ч_& ڨ&ч_&jPu&ч_&HAM&ч_&1e}&ч_&ݏI>_S&ч_&0&ч_&de[x1&ч_&|p&ч_&ݿ1Ұ.&ч_&kˬ&ч_&l@uR&ч_&{Nj1&ч_&ٰ\fuj&ч_&䇒]&ч_&i`->o&ч_&NE2&ч_&qs؊J&ч_&dqg&ч_&A_,C&ч_&pBy8?/&ч_&0RK&ч_&ݺ&ч_&ݵJN&ч_&%-!&ч_&ݫp4N&ч_&OrO<&b&ч_&?v>&ч_&jN&ч_&5Catm"&ч_&g#UF=s&ч_&Kt&ч_&b&ч_&rb7&ч_&81q&ч_& A\@̲&ч_&ݕ87eޜ&ч_&44)5i&ч_&)3hP&ч_&w\M^G&ч_&a[ `p&ч_&ݏ0 &ч_&o'X9&ч_&Wq:&ч_&:G3֦&ч_&,w)&ч_&ݳ:X&ч_&xD&ч_&B=da&ч_&#|VF&ч_&1y&ч_&.JG&ч_&tdVL&ч_&YuF&ч_&$U삆R&ч_&BXёjd&ч_&[@ʿI`&ч_&ݣ(0&ч_&ݳuָ&ч_&r賤,&ч_&ƖE9,&ч_&2&ч_&:&ч_&ݽ4wj'&ч_&U,6&ч_&&ч_&@, &ч_&T| ]&ч_&[ YZo&ч_&Q!A &ч_&%Y7&ч_&~v$T&ч_&F)L&ч_&ݻr]&ч_&ݭ>F&ч_&z&ч_&݃1&ч_&Fו&ч_&݅_5&ч_&nu+y&ч_&o3O&ч_&ݟ׿o&ч_&ZVGl&ч_&hew7&ч_&= %T&ч_&ݷ$sq&ч_&O*Jp'}p&ч_&݃!_Q&ч_&f9 &ч_& ,\c&ч_&ݬ(&ч_&!`c&ч_&ϪO&ч_&Tp&ч_&ݞyÌLޮ&ч_&]Β&ч_&"âh&ч_&ݲ;mh&ч_&ݓuVO&ч_&ݴ2,D}n&ч_&pE\5&ч_&Q)Ď&ч_&ݻ0 &ч_& <$=Z8&ч_&LJnB5&ч_&OAԾ&ч_&ݧ61&ч_&#&&ч_&žC&ч_&ݍ󇍦 &ч_&SBz  &ч_&Kީl&ч_&ﮂprr&ч_& Ͻ&ч_&$wfߔ&ч_& 'C&ч_&eS 3&ч_&rE7h&ч_&ݖ`>&ч_&و 1|&ч_&݉wthQ&ч_&݉Yޠ&ч_&קz &ч_&1, <&ч_&@jyDԂ&ч_&: I&ч_& 6eIh&ч_&O(8[&ч_& ]&ч_&݆Cjx&ч_&ޖ&&ч_&FVz&ч_&NEʣ&ч_&ݾxIHؠ&ч_&a?&ч_&+ը$_&ч_&y,x&ч_&}#a&ч_&pm&ч_&ݩt5L&ч_&݇9u&ч_&C!y`$&ч_&ݷ &ч_&qmLFc&ч_&]Te9w&ч_&ADp8&ч_&}{,V&ч_&JEq$X&ч_&oO <H&ч_&ݯe!{t&ч_&lr7n&ч_&:f&)&ч_&GnG&ч_&݄X@,-w&ч_&ݹf&ч_&}͊&ч_&2(pϤ*&ч_&=2]&ч_&mƇ&ч_&⁲D^&ч_&ݣ\Φ'&ч_&?5&ч_& 6&ч_&,Eӯ&ч_&ݢ25Y &ч_&zF9$&ч_&N&ч_&ݧP d&ч_&Ŧ^&ч_&xK5&ч_& z&ч_&ݺ$-#oi&ч_&x;̂"2&ч_&ݩT W&ч_&ˆz&ч_&U'ϖ5&ч_&*豹&ч_&ݴxfM&ч_&݂LQ&ч_&M &ч_&ADe/&ч_&raڋ&ч_&݀ϣ&ч_&I|&ч_&ݱx(C-m&ч_&rg4&ч_&ݥEa &ч_& ."&ч_&4&|2&ч_&)<$&ч_&8_&ч_&׹%>l&ч_&3Z} &ч_&ZƄn&ч_&RRNjkG&ч_&kn«Tz&ч_&w FVr&ч_&؂EjjM&ч_&۰s}D&ч_&DW0Q4&ч_&-.~&ч_&݁a,&ч_&e+ x&ч_&s,;&ч_&/*J$cy&ч_& )h&ч_&ݭg>|&ч_&ݧ C$~&ч_&]M@\D&ч_&ůc&ч_&v05S&ч_&1cD&ч_&|èo|&ч_&T4h%&ч_&iHo?q&ч_&3$&ч_& NoP&ч_&tg¬Z&ч_&5 &ч_&fK)HU&ч_&ݼ{dBW&ч_&wP@C&ч_&Y2v&ч_&&xA&ч_&ݷԟ$&ч_&)* &ч_&p7&ч_&{sIw&ч_&x@&ч_&rPP0&ч_&݊Vepn&ч_&pId&ч_& &ч_&L]~&ч_&mt&ч_&< -&ч_&4 %m&ч_&r&ч_&ݯX[O&ч_&|Q0:&ч_&8{&ч_&1$o]&ч_&%վ&ч_&8؝c&ч_&ݠcTi(&ч_&ݝ}B&ч_&ݹ:xI&ч_&Ԯ_(o&ч_&s 8&ч_&ݡjBo&ч_&hϛ&ч_&kd&ч_&ڝ .ԛ&ч_&ݻqS+&ч_&:KD&ч_&[B+E&ч_&ҋV#&ч_&1w 6xb &ч_&O&ч_&k)Vw^4j&ч_&p{(E&ч_& @*O&ч_& SOoC&ч_&@#Q&ч_&ݢH#^&ч_&[`vH&ч_&JӫI)&ч_&0x|L&ч_&W.-Aq&ч_&`2N1&ч_&@`]u/&ч_&݂G '&ч_&|j9.&ч_&&Mt+&ч_&p&ч_&L3m&ч_&ݠl&&ч_&ݽ8G&ч_&翓q>&ч_&`~!L&ч_&8m/mg&ч_&ӧP&ч_&T&fJT&ч_&݁AN_0&ч_&8d骓$&ч_&[(Ux\&ч_&βw&ч_&S7`r&ч_&?K-b&ч_&b&ч_&$kP_ &ч_&ݡ˭5&ч_&?ȧ|K&ч_&ݟ"s&ч_&[-%ޔ&ч_&B[[&ч_& ƞ&ч_&zz;&ч_&/Y &ч_&y/L&ч_&{2n,{&ч_&ט »h&ч_&u'^{A&ч_&N*&ч_&ݼ92Dx&ч_&ݴkc&ч_&+g:fC&ч_&J׷G\L&ч_&?Q{&ч_&ݑ6l&ч_&Ϻ>&ч_&!'aU&ч_&ݸŜT&ч_& !b&ч_&U&ч_&4$v&ч_&V `S!&ч_&ݻ;ϳXs&ч_&c&ч_&F,&ч_&xBGo&ч_&iyC$&ч_&"kb}qh&ч_&S|&ч_&ݳbNۋk&ч_& j[&ч_&X ME&ч_&戌~KO&ч_&━&&ч_& ]6nE&ч_&S*G,&ч_&_)&ч_&|q &ч_&ݘCB2v]&ч_&ݧh9U,w&ч_&.EIy&ч_&øɼ&ч_&2S q&ч_&>JKl&ч_&YHa&ч_&(8:ב&ч_&d)&ч_&-zf0;&ч_&EV&ч_&aEl&&ч_&ʶ>N&ч_&݄qr!ӮV&ч_&EX &ч_&nAs=&ч_&N &ч_&2NwLK&ч_&>*&ч_&BW9t&ч_&ݪ' &ч_&1(h&ч_&Ck*&ч_&ᨬ>ߪS&ч_&ޙU*P&ч_&u8&ч_&`>NUk&ч_&KXUy&ч_&;h)r&ч_&݋@֞ 9&ч_&*IQJ&ч_&1&ч_&n=}&ч_&.1&ч_&ˠzQ‚&ч_&,u9&ч_&{j&ч_&[JX&ч_&ݪe' .FA&ч_& :440&ч_&HVv&ч_&ݺC5w&ч_&(&ч_&ݢDc0&ч_&Ov&ч_&?+ F5&ч_&s&ч_&&O$&ч_&^bd&ч_&ݍ5ّ~6&ч_&x:V5&ч_&݉&*;[&ч_&ݓȁ6k&ч_&ďd:&ч_&Ž Ϻd&ч_&ݛ-&ч_&PT֯;&ч_&D9&ч_&1-v8&ч_&݆)h&ч_&^~5)&ч_&dܘ aC&ч_&rK&ч_&jg> &ч_&ݧ&ч_&h&ч_&]N~A&ч_&`&ч_&݉(F.J&ч_&$[(&ч_&Qv/&ч_&=_zL&ч_&YrV#U&ч_&݈6g&ч_&N &ч_&A,=&ч_&ݜBlQx&ч_&FO9*&ч_&ݳW쓠&ч_&tp&ч_&'-&ч_&ݵi!Iߡ&ч_&p"/b&ч_&6^S&ч_&޸Xr쟌&ч_& ”&ч_&hw N&ч_&ݛB\&ч_&ڹN&ч_&ʈ$&ч_&~%!&ч_&e]&ч_&.Cv1&ч_&4)&ч_&E`t&ч_&ݯ(L;3&ч_&C6jh&ч_&ݖ`='&ч_&ݙ~jM;_&ч_& \īQ&ч_&0ur}a&ч_&ryK'&ч_&6x_&ч_&݄1.s=)&ч_&ݸ?8ς*&ч_&ݣ-(&ч_&s飼&ч_&00&ч_&ݴן+%E&&ч_&kPKݤ&ч_&ݝKv&ч_&tdWj$&ч_&Þ/P&ч_&b,.png&ч_&KS./&ч_&[nD\&ч_&c.߄'&ч_&ݾ;J_&ч_&5 o&ч_&rL}x&ч_&Ρ8&ч_&jN&ч_& =O4[cx&ч_&ھ{?gg&ч_&݋a~8&ч_&GG#&>&ч_&ݘםR&ч_&,|4%&ч_&E7ҍUu&ч_&ݔ_z/&ч_&ݢe}!&ч_&έa4&ч_&ݾO6L&ч_&ЋW#!:&ч_&نTR˅&ч_&݀MUt`&ч_&ݐmG&ч_&ݽ]ve&ч_&ݖ/&ч_& [Շ8&ч_&Ot&ч_&ݬ?Ç3&ч_&݌2x&ч_&|&ч_&oHKF&ч_&A k`&ч_&ϥQs&ч_&݋v'&ч_&݌ x&ч_&?u:&ч_&2J&ч_&KUg4&ч_&n@_7&ч_&ݚwr &ч_&'&ч_&Ennz&ч_&&ч_&ea#&ч_&JP&ч_&eDį?CB&ч_&c(~O&ч_&ݣrx[Cz&ч_&qrW&ч_&> ;G&ч_&-LTo.&ч_&Y)Jα&ч_&ݷ=(_&ч_&J+g'T&ч_&܀j ^&ч_&5h8&ч_&@ &ч_&/&ч_&!'&ч_&ݑPRz&ч_&) "ir&ч_&-`f&ч_&݃ &ч_&ݫYV7&ч_&18ԥ~&ч_&ʶ&ч_&ԡR"(3&ч_&ݕn K'b&ч_&4H&ч_&݋춽&ч_&ݤgP&ч_&o)z+&ч_&_Ѥx&ч_&&ч_&ݽn&ч_&|.D&ч_&ݭx}j0&ч_&ˋY&ч_&%sr&ч_&\@ &ч_&ݔ>|aF&ч_&,&ч_&Ɛ '&ч_& jVz&ч_&Mp&ч_&WT4&ч_&yfv%&ч_& s2&ч_&p?E8&ч_&ݝY&ч_&CrW.{&ч_&H7&xF&ч_&$T%P1&ч_&OӪ&ч_&Н ɐ\&ч_&cX֭'&ч_&S +\K&ч_&8gg!V&ч_&݌՘b[`&ч_&ݱÐ&ч_&& &ч_& }Yp&ч_&ݜd7yDI&ч_&ݨC`V&ч_&! ]&ч_&U&y^&ч_&ݤ Tv{&ч_&+&Tw&ч_&0Bv<&ч_&ݒxCS_&ч_&ݰnyW&ч_&J訤sl&ч_&ݶ%n+F&ч_&%'>SƐ&ч_&@(+&ч_&,r`S&ч_&Յ "&ч_&xȆg&ч_&Kx҄a&ч_&*k &ч_&@N,&ч_&5y*F&ч_&_Kps&ч_&ݫ`u&ч_&LpZ\~9&ч_&\&ч_&miMGJh&ч_&).nI&ч_&݇'^xR&ч_&DN &ч_&mB!V&ч_&ݙr߀#&ч_&݇G92 &ч_&]O#&ч_&a'i&ч_&$34&ч_&]<&ч_&2㒿&ч_& =&ч_&OBMȍ4-&ч_&tsj&ч_&nlkI@&ч_&K &ч_&-y9>g"F&ч_&ݶk^u- &&ч_&82}v /&ч_&Hc\&ч_&2j}K½&ч_&:ZQWe&ч_&lU<&ч_&&ч_&oNXG&ч_&Ebk&ч_&y<j&ч_&_L`g&ч_&<"pL&ч_&/D0&ч_&pSPd*E&ч_&ݯ&ч_&?Is&ч_&ӭ'6&ч_&8s*K(6&ч_&[W*d&ч_&݇'Z&ч_&݋B&ч_&MW9N&ч_&˦ &ч_&݄ROY2RC&ч_&ݮ⥅~1&ч_&ZLfv&ч_& a&ч_&UA&ч_&Ms) &ч_&" _&ч_&p|2&ч_&Ǖ&ч_&݃h65&ч_&݊U^-+&ч_&ԺP&ч_&݅A&ч_&8SN )/J&ч_&tc~鸴&ч_&F C9P"&ч_&ݴE&ч_&ܶ!,/&5&ч_& n&&ч_&ݽb4&ч_&7!@7&ч_&Ț$C&ч_&n񅻨p&ч_&ݥ\'V&ч_&1i.&ч_&,"ƅg~&ч_& (&ч_&ݟDEHR&ч_&w&ч_&0!,&ч_&ݸƇe&ч_&>Ql(&ч_&ݙof\_&ч_&ɘb&ч_& '&ч_&3Z!VA&ч_&ݴ'4V(&ч_&ݛa` o&ч_&,Nnz=&ч_&,Ir0>H&ч_&j:&ч_&Rf/&ч_&zfe&ч_&rۮ&ч_&My &ч_&*QJg&ч_&ݴ&ч_&ݬ&ч_&$@Yk&ч_&Q{ny&ч_&NV-zx&ч_&B6Rdwnv&&ч_&.E&&ч_&ז -&ч_&ʶ0az&ч_&YOA&ч_& }&ч_&yds&ч_&_чPK&ч_&r|&ч_&TжI>b&ч_&>A!r&ч_&ݬx-lk&ч_&ݖ LcM&ч_&̮/&ч_&ݬFwh#&ч_&v`a=?&ч_&lωxד&ч_&Aq)&ч_&ƺP&ч_&~]{&ч_&#oeC/&ч_&Yg_n&ч_& If&ч_&칋O_&ч_&Ŀ`&ч_&UJZ:&ч_&g;=&ч_&ݻ!9&ч_&yΥEck&ч_&ݦ y&ч_&$koî&ч_&U^7&ч_&KL_;&ч_&h?/$m&ч_&XFb: 8&ч_&;1;&ч_&;(0&ч_&p{'*d&ч_&΢&ч_& -Z&ч_&o&ч_&>ܞ.&ч_&HQbb3&ч_&ݡtXō&ч_&C-l!;&ч_&wqx&ч_&\J޲?F&ч_&旀̽7J&ч_&ݍй -D&ч_&Bt&ч_&9~&ч_&ݥbx&ч_&݊r[u&ч_&ݲ6l &ч_&E*v&ч_&T+CG&ч_&b"A&ч_&ݤP+ȍ&ч_&ݑN4';&ч_&6*(PW&ч_&榼/&ч_&݀ >Tt-&ч_&7b|&ч_&ڦ*߬&ч_&ݮ>Br&ч_&c8¢&ч_& 7u&ч_&Ɗ٧&ч_&ԤF]r*χ&ч_&"vf4&ч_&|=4~Qy&ч_&0i '&ч_&ݍKԁ&ч_&݆]|&ч_&ݮ%do&ч_&W1&ч_&8>I&ч_&݉_éN1&ч_&ȱRZ&ч_&0vCܷ&ч_&LwY&ч_&5&ч_&Oi K&ч_&݉wF^ g&ч_&+,++&ч_&ݏKO`S&ч_&ݭ5j-lZ&ч_&}9ƙi.&ч_&ݽQQ&ч_& .du"&ч_& 8&ч_&EZH&ч_&}WZ{9&ч_&w,y2&ч_&zt &ч_&YU&ч_&S&ч_&݌}; S&ч_&֍g(&ч_&OЋ;p&ч_&SvZ|e&ч_&ݼ=', &ч_&I: &ч_&ݲߩp)&ч_&`bo4&ч_&"@(h /&ч_&9b$&ч_&ݟU&ч_&1D,`&ч_&x/K&ч_&ݛx D'&ч_&QRR}&ч_&?VO&ч_&1U=&ч_&ێfZlj&ч_&"yʴj&ч_&;ൿy&ч_&ᗚI|&ч_&*26s&ч_&ܠ"&ч_&!b=R~J&ч_&5 ݕ&ч_&).]&ч_&#Y &ч_&wMxlG&ч_&LA&ч_& Ui&ч_&ݢ);8w&ч_&%ϣ=F&ч_&mI7}&ч_&ݻv&ч_&dc&ч_&݆NN &ч_&-8&ч_&ݤCtsG&ч_&Wm&ч_&ݐc&ч_&ݺi^2&ч_&&z'&ч_&ݤf"e&ч_&ݥ &ч_&ݯy n>&ч_& `K&ч_&8H\{&ч_&+ƱP<&ч_&˖&ч_&=_K&ч_&ݕh5_cT&ч_&M#k&ч_&bpu&ч_&ԳqS&ч_&gz&ч_&E64&ч_&C阗І&ч_&ݸ?wk2A&ч_&l;&ч_&Wg-)/&ч_&@O&ч_&nE\o&ч_&ղr {&ч_&W&ч_&GL*7b9&ч_&KY&ч_&U"&ч_&N `k&ч_&XS4E&ч_&&&ч_&;23օ!&ч_&KE{a&ч_&8G&ч_&݂z؈&ч_&ݦ/~P&ч_&ݿH 1o&ч_&ۃ"t'&ч_&ݐ㔝M&ч_&;\mL&ч_&M Tq&ч_&ݬ}$&ч_&ݽ~@&ч_&j@/ &ч_&ݩ^" z&ч_&J| ,N&ч_&,Th&ч_&#>-bo&ч_&hZ,AQ&ч_&bw!f| j&ч_&hfȮ\&ч_&҄=I-D(&ч_&ELsy&ч_&R@m&ч_&ݬa( ݥ&ч_&VmQbO{&ч_&z$szt&ч_&ݱ5P &ч_&mV0&ч_&>h}&ч_&~q9&ч_&MȂ(R}&ч_&H3)&ч_&+T s&ч_&ݡBE8J&ч_&ݓOɏt$k&ч_&ݡX@&ч_&ݮ˫L&ч_&9{}&ч_&ӿ &ч_&;,&ч_&ΗVRC&ч_&P#u&ч_&fM&ч_&ݿ{&&ч_&6͇&ч_&ݐ=)SE&ч_&Ar/&ч_&m˱!&ч_&_1l&ч_&ݥ3tH&ч_&\Ւq&ч_&7+6&ч_& ,qE&ч_&݃,B[m&ч_&ݾG)&ч_&ݡ)?Q2&ч_& )pH&ч_&p|&ч_&TW f&ч_&^wQ]=@&ч_&ݦnB r&ч_&ݍ"+&ч_&'4&ч_&^$M&ч_&)E#+/&ч_&ݠ@{4!&ч_&żA"v&ч_&{> Q&ч_&z|d/&ч_&YvC}&ч_&o<<=M.&ч_&,J-Fw&ч_&1f*[&ч_&ݛYp O&ч_&ΐOJ&ч_&ݥI,o &ч_&4%ɇv&ч_&@nQ%` &ч_&?63aJ&ч_&u"2m8&ч_&VUuˑ&ч_&󵿄&ч_&ݲ*1u&ч_&ʼ&ч_&ݙ\Q&ч_&ݦP/)I&ч_& T&ه&ч_&a@FC&ч_&Qj&ч_&r[&ч_&&>ౖXh&ч_&9&ч_&fIzT&ч_& ?&ч_&JXE&ч_& &i\&ч_&ݑ1.z4&ч_&Sl:&ч_&˃(۞&ч_&S%.&ч_&ݖ &ч_&(k&ч_&ݾ¸t¸U&ч_&qm-&ч_&ݏr4F&ч_&ະr&ч_& 5&ч_&uӯ(yg&ч_&ݬ{&ч_&Rݜ&ч_&WvĬ&ч_&ILo&ч_&ݾ .&ч_&ݑ]P'h|&ч_&lpa<&ч_&00 &ч_&Hm녲ɲ&ч_&P[o͜~&ч_&c&ч_&ݑӚ&ч_&&ч_&a1D0&ч_&CR 9&ч_&'hD&ч_&ݩTϷ&ч_&{06w&ч_&qo| >&ч_&)ljB&ч_&*0 Q5&ч_&z F &ч_&u[SG&ч_&NkR1&ч_&ZݯH*&ч_&ݫzh5Z&ч_&ݻ <:&ч_&}H}&ч_&wF X{&ч_& WU&ч_&1=&ч_&@vġ8&ч_&*R͢&ч_&݉<&ч_&WA&ч_&T 0&*0[&ч_&VclJ<&ч_&t9QU&ч_&ݶD@rGZ&ч_&mR4/&ч_&#i &ч_&iX&ч_&\&ч_&J O&ч_&ݪD&ч_&M~&ч_&ݗhܒ&ч_&V(p&ч_& r<&ч_&!Z}م&ч_&w:z7{&ч_&i9}&ч_&YT~$"&ч_&l&&ч_&ݲ-b&ч_&ݲ@nT좏&ч_&ݞ;r,&ч_&U<9&ч_&I]q&ч_&,t!&ч_&9)T &ч_&^ѯ[ Z&ч_&̵bF&ч_&l*u :&ч_&ݕR2&ч_&ݱT>&ч_&XYg"t&ч_& WN&ч_&ݸROa&ч_&+x/&ч_&ݪQZ"_h&ч_& _LYw&ч_&a.&ч_&H2VU&ч_&ݏI (&ч_&ݲlH}&ч_&ݿ鑫4&ч_&Ut!5)&ч_&ߴWH&ч_&z0ս&ч_&ݪsr&ч_&ݞ5&ч_&' &ч_&``'&ч_&'~&ч_&ȁۡrV"&ч_&r?Å&ч_&;,)&ч_&Iݍ)&ч_&Ѿ$KS&ч_& x !&ч_&]/&ч_&ݒ;⮵&ч_&ݍP Fྔ&ч_&sFɍ*u&ч_&ܬ]ʢ&ч_&݄>T&ч_&ݽ_<lcU&ч_&ŸSQ&ч_&uaE]k&ч_&j/cl*&ч_&Ziׯ4&ч_&iD1&ч_&n 8&ч_&C]n&ч_&v/C&ч_&ݒ -&ч_&6|aF&ч_&iH:IN&ч_&ݰ &ч_&݁|H]&ч_&!]7&ч_&d?b&ч_&{ &ч_&4ױ&ч_&r[&ч_&ݥ{{=&ч_&sO~]q&ч_&ԡׯ,{&ч_&݇C'I&ч_&P&&ч_&"@y8&ч_&I]?'&ч_&ݞ^&ч_&j4M%;&ч_&ݛ){|E&ч_&ݘ[h?Q-:&ч_&|].V&ч_&'f$7V&ч_& u'&ч_&ʰ{H&ч_&z>V'3&ч_&ݹ& &ч_&;񠿹<\&ч_&]m4&ч_&݊.&ч_&۫n&ч_&ܗdJZ&ч_&un&ч_&dv%gd&ч_&ʟ;{\&ч_&MTg&ч_&̤c&ч_&y}Zw#&ч_&Ǧ$k&ч_&r@-&ч_&YH`&ч_&ݎ.&ч_&ݿ `#&ч_&6R(>&ч_&ݠ{ [}&ч_&Mx"&ч_&ݙqoZh&ч_&NckAq&ч_&'=0+3&ч_&Ջ^iy&ч_&>fS&ч_&''&c&ч_&X9=&ч_&+>H&ч_&1C&ч_& &ч_&AWlBP&ч_&{oz&ч_&swc6&ч_&V}ls&ч_&݆/V]Y&ч_&#;&Z&ч_&'&ч_&}Xmx&ч_&{py5&ч_&ݗ&s=&ч_&sJzo&ч_&݇痢=. &ч_&u$N&ч_&\sY{&ч_&.P&ч_&ex&nG46&ч_&׼#T6d&ч_&ݸK;{&ч_&ruF&ч_&'?&ч_&ݨq;v&ч_&ݷٛ;&ч_&ݍ'9g&ч_&.1b_&ч_&`` uxG&ч_&o&ч_&ݡ)W&ч_&r7)#}&ч_&̴a&ч_&2. bK&ч_&&*&ч_&VYX6&ч_&we6p&ч_&;i4&ч_&ݞwyQzC&ч_&dC ܄&ч_&" v:&ч_&!3o&ч_&݅ ]Fs&ч_&z|y&ч_&0 &ч_&Mas@O&ч_&]'OdF[&ч_&݃Wa16&ч_&h+V=4a&ч_&Ρ>D&ч_&Ns}U[&ч_&ѝ)Mz&ч_&ݪ(&ч_&ݬ2 J&ч_&7ē]h&ч_&WÅi&ч_&݁m&ч_& qOL&ч_&mB˾&ч_&mvw&ч_&y&ч_&R(]a&ч_&nq՟&D&ч_&A90k&ч_&A&ч_&ݢIUz'o&ч_&v"ld&ч_&9]=U&ч_&;$@;[۱&ч_&6u&ч_&ݰ#`)&ч_&mӠX&ч_&ݞ+Sr&ч_&ݐE(4k&ч_& uN&ч_&ᭅǎ&ч_&ݹBT?&ч_&MR;ZՌ&ч_&Dm&N&ч_&yj` &ч_&pZ{Y&ч_&qa0Yn&ч_&ݧmae&ч_&F~&ч_&gk%ҽ&ч_&ݓU)&ч_&TdWS&ч_&M-b'&ч_&F v>&ч_&Jl&ч_&q5tE&ч_&m+vO&ч_&ݾ6s&ч_&<%&ч_&L{i &ч_&(F<&ч_&um~&ч_&v0O&ч_&v͗]&ч_&a0?&ч_&-NЯ4&ч_&^8 &ч_&ݜ_&ч_&fig-&ч_&ݷS- y&ч_&&ч_&HM?q&ч_&v6]i&ч_&1jvx&ч_&E0+=V&ч_&ݲ.%&ч_&V (&ч_&Γ:V}&ч_&Ǣ]9^+&&ч_&"[+C&ч_&XuT q&ч_&q#D$uU&ч_&ݫ eM&ч_&oS^FJ&ч_&ݖCaӋ&ч_&ݫI1_&ч_&ݢIo2&ч_&ݝl!o&ч_&Fo &ч_&O$k@&ч_&ARVG&ч_&@ Q+y&ч_&mK:&ч_&݁kY&ч_&tUb b&ч_&1$&ч_&,&ч_&SR&ч_&׀bWio&ч_&LGʗk[&ч_&ݡϢ,&ч_&V1&ч_&ݩ;?&ч_&ݵָ1 &ч_&Ϭ-/&ч_&BnMj&ч_&ZڴMK~&ч_&fPBT5&ч_&C&ч_&=ld&ч_&U ?&ч_&ݛU_YT.&ч_&H@/&ч_&݋2&ч_&Ȍx"&ч_&.e4&ч_&`ٶM&ч_&lR &ч_&ȅ;B\3&ч_&ݖm3&ч_&8"ꈐ"&ч_&H0 {&ч_&CJmG&ч_&ݯn,&ч_&5V&ч_& 51^&ч_&ݔ&ч_&v̻%&ч_&vT&ч_&O&ч_&+R< &ч_&&Y;&ч_&X&ч_& kob&ч_&.%&ч_&ݰtŜ=&ч_&G-E﷧&ч_&d3Bw&ч_&}}&ч_&KM`t&ч_&o3>&ч_&#Ȅ&ч_&ݺ-&ч_&ݢ듭8&ч_&~=@&ч_&K0 &ч_&ݪA&ч_&F0;+mT:&ч_&aHWiW{&ч_&_AO(&ч_&: &ч_&[ 7&ч_&ݽ1^&ч_&0R@&ч_&V2a&ч_&G޺"&ч_&(&ч_&ݜNna&ч_&݁pZB8]&ч_&/&ч_&ݲZv&ч_&ݪ23=&ч_&'8&ч_&ݤq&ч_&ݺSOm&ч_&7@o7`i&ч_&0*)b^&ч_&+ PK6(&ч_&F^-&ч_&k(,&ч_&ݿx<&ч_&?MGF&ч_&j,oM&ч_&!Pu&ч_&u)IF&ч_&݉; &ч_&/=h/+!&ч_&/X-:Ql&ч_&/N!A&ч_&9 !&ч_&ݶ~vq&ч_&ݺ UZ&ч_&ݰλP,dx&ч_&}M*v&ч_&:wծI&ч_&ݮ4&ч_&ݴno'~&ч_&K1UՂb&ч_&݋>A&ч_&݀}"f&ч_&7K $&ч_&IC5 P&ч_&ݾsD&ч_&ݕ'C3&ч_&=*\&ч_&becZ{&ч_&,#&ч_&byO&ч_&ȁ\Ba&ч_& JE&ч_&ZjN&ч_&,/!T&ч_&L7 ?&ч_&>Yd&ч_&ݽD^V+&ч_&/mЃ&ч_&U J&ч_&ȜH4&ч_&8~{#I&ч_&1ܬu?+&ч_&1XX~4&ч_&61,&ч_&.t^&ч_&B0&ч_&ݧC!1M2\&ч_&3ʦƥ&ч_&>{&ч_&sĹ&ч_&E,&ч_&1|nK&ч_&5AD&ч_&UF&ч_&|`&ч_&&ч_&M31Na&ч_&W_Lu{&ч_&݋z "H&ч_&YVm-J&ч_&AB&&ч_&W\W&ч_&d̕˫q|&ч_&Dև44A&ч_&;2O&ч_&ݥ8G<-G&ч_&AM&ч_&X62$bV&ч_&݂;T Q&ч_&]>~Lv&ч_&#y/Id&ч_&*_A&ч_&T@ &ч_& /?&ч_&ݡ&ч_&]FX>&ч_&'!\&ч_&R5?aת&ч_&ɑ8Poz&ч_&&ч_&V&ч_&|+sC&ч_&TU2&ч_&*oy &ч_&㍦xͮ&ч_&q(q&ч_&Q%B&ч_&`jBo&ч_&d[&ч_&NwVO7&ч_&bU&ч_&B&t4&ч_&ݲ .֩&ч_&]vȣf黇&ч_&+x!B>&ч_&vP:&ч_&B62 V&ч_&*"Nһ&ч_&|19m0+&ч_&h-n&ч_&y䤉 M&ч_&Q3mK&ч_&8!a q&ч_&ݭ{J&ч_&,WoU&ч_&14;5&ч_&ݢk9&ч_&B&ч_&msq&ч_&G|q&ч_&CWܟ&ч_&ݖ-c&ч_&ݶ, &ч_&ݗf:&ч_&jž&ч_&bPsvg&ч_&ݗw&ч_&}k9&ч_&B2}7&ч_&̢^Y&ч_& Wzw&ч_&݇:mi&ч_&wa6HL&ч_&D".&ч_&hf}䩷r&ч_&݀6_&ч_&; n&ч_&cVx?&ч_&+&ч_&|zI &ч_&W/7P&ч_&LcPJ&ч_&ݙn6&ч_&* `h&ч_&32o &ч_&ݕ;bG"&ч_&ݽ˰^S&ч_&ݮ,ܑS&ч_&ݶc&ч_&l.=1m&ч_&6ZMI&ч_&lQY&ч_&˶:3&ч_&.$I35IM&ч_&KWO$&ч_&BlK3:&ч_&>2(&ч_&NZ$^2̰&ч_&eTVT&ч_&mQDF&ч_&ݖ R'&ч_&G̑BS?x&ч_& 3`=&ч_&nIn&ч_&CZ~F&ч_&݌M f&ч_&aT}&ч_&mËvd&ч_&CcH&ч_&ݹ 1'&ч_&ݾ@៓&ч_&%n+ۙ&ч_&r)7&ч_&vK:rz&ч_&݁_[$&ч_&ݓ"} 8y&ч_&ݴ_@&ч_&I&ч_&>/X&ч_&zK9 d&ч_&/?)n>v&ч_&'2[&ч_&[x@>YSe&ч_& ӳBM&ч_&ݱ8F5&ч_&ݰ_C#&ч_&Pu&ч_&ݎPu(=W&ч_&Me*&ч_&iS)Bf&ч_& ?ܐ&ч_&+p7&ч_& M &ч_&ݲڴS&ч_&ݯ 5f&ч_&ݦ?&ч_&u!{&ч_&GV&ч_&O==b&ч_&D~[ &ч_&A&ч_&|+F&ч_&݉(E&ч_&6ut3h&ч_&!>;&ч_&Hܯ0&ч_&ݻ=CZ&ч_&&ч_&@<{&ч_&k=>o&ч_&ݱTF&ч_&O̸&ч_&ݬU0J#&ч_& 4&ч_&6&ч_&݋0;&ч_&2K-V&ч_&)"k&ч_&\ ;6+&ч_&ݓ%4[5]&ч_&݈b K&ч_&#&ч_&#JD)6i&ч_&$FR,V +&ч_&n/̑&ч_&@F3KNw&ч_&HS).&ч_&ݬ1&ч_&!9_&ч_&EbJf&ч_&Ժs&ч_&n ձ&ч_&a"8P&ч_&ݹ75˻&ч_&Q<ɇ&ч_&#6VI&ч_&ݱ=™k&ч_&`&6+q&ч_&7,h`&ч_&Ia[&ч_& ̇W;&ч_&݈Ðsd&ч_&eOn:&ч_&"7J&ч_&#w&[&ч_&pMEMd`&ч_&9+Gd&ч_&Wׯ&ч_&7-hyG&ч_&rHs&ч_&ݫ?1?&ч_&ݥK'&ч_&BWi&ч_&WJz=(&ч_&݃yR$&ч_&݋)wחc&ч_&ݤȩR[&ч_&-7S&ч_&݆a&ч_&,@U0-&ч_&sJIX&ч_&? '&ч_&WFI&ч_&ݡ m&ч_&E@H&eÿ&ч_&zj֢J&ч_&֘{&ч_&w ! &ч_&&63&ч_&Sy&ч_&$du&ч_&ݧ_ͬ&ч_&S8~&ч_& P&ч_& .5&ч_&ɧ$=n&ч_&ݵ0&ч_&ݿF&ч_&jbb &ч_&ݖ~2&ч_&ݩ0rI&ч_&Dj&ч_&ݓIkO&ч_&^_&ч_&݃B- &ч_&9e G6&ч_&o<&ч_&(}׍ t&ч_&ݒeǕX9&ч_&ݴ1)1n&ч_&Ljnd&ч_&źɣ&ч_&ݤ[pUF9&ч_&‰^tn&ч_&[nsH&ч_&-ġ%e&ч_&c~0LM&ч_&*Z&ч_&Ւ83/&ч_&ݬ#j&ч_&I{GA1&ч_&] .pC_&ч_&d&ч_&QHQ&ч_&m% +&ч_&a*Ng&ч_&ݴv*&ч_&$ZR3S&ч_&Wʁn6&ч_& !v&ч_&D8ީ &ч_&E62&ч_&`Ah1&ч_&k(Dl&ч_&w4&ч_&s 'p"&ч_&ݺ^I,&ч_&ݹ65&ч_&'uޕ%&ч_&ݢUzU^&ч_&&ч_&uG8&ч_&z}s\&ч_&7OD&ч_&wEU&ч_&ݟ'&ч_&ݧ$ŧ&ч_&GP{&ч_&TCo&ч_&ݿjڶ*&ч_&܀&ч_&ݦ]5 &ч_&aܘ&ч_&:2;&ч_&l[+{&ч_& Z&ч_&qhgQa'&ч_&y;-@,&ч_&;2&ч_&@*=pN&ч_&g*䈿&ч_&ݒǗmW&ч_&+uWS&ч_&ZB"&ч_&)zV&ч_&ݖނ<&ч_& 4uJ&ч_&ݭl'S&ч_&l]ݷ#w&ч_&ݛ*CJ~&ч_&j&ч_&ݪ]fKP&ч_&-]Tu&ч_&)%v&ч_&4~ ,&ч_&ɰ5&ч_&n4'nr&ч_&9y@hY_&ч_&tE`zO&ч_&9yX&ч_&:I8&ч_& {s1&ч_&ݷaWU&ч_&H8)$&ч_&a+oE&ч_&b2jz&ч_&ݳP ۂ&ч_&dϮu&ч_&)a٦~&ч_&Fe[= &ч_&ݬҴ?&ч_&[.&ч_&s4 s&ч_&ݎwQ(&ч_&K2e&ч_& jQ1p&ч_&Pqt&ч_&/[y»&ч_&ݪ&K&ч_&*$hpG&ч_&|7f&ч_& Jj};&ч_&Ü2/k&ч_&8@&ч_&ݢx&ч_&ݡf&ч_&ݎݕڪ&ч_&ݮu;шc&ч_&g@H&ч_&ݒ]yӍ,:&ч_&&ч_&넷ս&ч_&H'ypTv&ч_&ݟl&ч_&׿Ә%c&ч_& \-&ч_&P &ч_&tsMSU&ч_&ՠZϡ&ч_&T/G&ч_&|-H}&ч_&PGNjd&ч_&]M.CS&ч_&q~U&ч_&hKeX&ч_&j<@&ч_&k}Kj&ч_&g+g&ч_&Qĵ&ч_&ݬn?&ч_&yC&ч_&݆VM)t&ч_&@ 5&ч_&\հ&ч_&ݵXO&ч_&ᦍ@*~&ч_&ݻ~_&ч_&>Q 4&ч_& &ч_& .6&ч_&}g&ч_&h'b[/&ч_&bjO3L&ч_&&ч_&H6|^&ч_&kNZ&ч_&mT&ч_&zz5&ч_&55G&ч_&݄}ϷG&ч_&w&ч_&q}^hvf&ч_&bѡmZ&&ч_&6.&ч_&ݕ|&ч_&dP<3K&ч_&ݼ8};O&ч_&ݪ #;&ч_&Z,ޅo&ч_&ݖ1fNA&ч_&=~OnT-&ч_&{*Vf|܁'&ч_&݅qA&ч_&ݍ_PQ&ч_&1wtA&ч_&&hUW&ч_&.&ч_&:m4&ч_&݁r{׎8;so@G ;jr444444444444444444444444444444444444444444K x  7%m7 L?Y q_*d }# #3 E~F ^ 8 UDa  Nf?;f"jbz?V!!X""W##$9%Y%&&''v(((V)**m+A,,K-l-./{0o1:2U23h33y44505w55 6$6t6666A79 N=m==0>>?t??L@@$AAsstRttRuuvvvwlww3xxFyy؁#=bljӊ4HC]ŐmN9Wo$rܚ&oߛ=CeŞHޟ{ɠAݡfɢD.|ʤfP:]JI0լ#q [Fe=۱*yȲfSWiSJFiah| 'kHg5;Ws*m-  5n^viIAYswJ?aW m/}_hF?^2jd| N__'uhSb\3Tq8M        b @Su [ER/~McP{ A!""&#t#{''C)))H**+,_,8----W...//00~001h112T222133c5{556u77883999:k::;U;;;=M==e>>>??@O@@@A#BqBB C[CCC:DKDDDD E=E[EvEEEEEFhHHI_IIJPJ%KsK6MMMNsO9PPPGQRR"STEUUU/V}VVZWW7XXXLYYYYZTZnZZ2[[\\"]q]]^f^.ΔjT>ڗ(vĘPߚ-]G2d!c{ԫάKcȭEaǮnӰ@pTlȶ $xǸxԺSr.ܾ<cM8u[0k"][>]}:ug8EeN3ebXwPoHg@_8W0O(G ?W I F_4S @ 'F#B ,Lnq ia2Su>,FXr :Lf.x@ZT!}1i>$sjKwt  $ ]   *    ; ! ^  U/P%bTSRtJk5UEdT:w%b&Ef#`F   !>>???r@@AeC~CQTQQQQQ R+RRRSSSTTUVnV^^^ _A_d___`4`U`#a;aaacckl@lalllllMmmmm]nvn(pApixxxxy7yWyxyyyzz{8{X{x{{{{|}~JF߃Bۅ>{և)K>ۉu͌9Ee`;ߔĕ<]9"?:Z}ԜT9gߟDC)fã;-,Eިx F>{0m.fޮ9ѯ/l!^lE+hĶ+}Ϸ!sƸ>;x/cּ(z̽pþ;n+e._tR'vcP=+hMe1 J<qjd!\M~Dm>Y|k6QD_Rm`{mlcSFg\|kFfD} \I6#r_L9&uc [M    : w  # C    U ;v-h s -i7L9Ym_d eu} A# 3CDD EZF^X& dH # JB  !# 6^rO!I%([-J2'55666<=_?``AaaceeSklrt3IК . yV{6KQOyzt   c'-s5DvYZdZsެ[حU~dº3l)dVnE^(=Rg|$9NcxN@?z"7Lr<h0\$Ps(5\dl   2 U   &IYKJ,9KnYWz !."# 779 AuC9QQSTeV^Q_3aacklmn8px$y {{|~z vr08ċً֔2&KY:]2$#bjrz?z7r)dV0ʯ(cUVk<_ %54o&߻ȼм2_J#+3;CKS[cks{_5=RA3CKS[ckUvOGUcq|=w;7?GOW_gowT  n  w  L oa  !  %     !       ##    %%                 ###  !                                                      % $$$$$$$!$$#!################### ###########!!$$$$$$                   """"$$##### $$$$###$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##$$$$$$      "$$$$$$$$$$$$$$$$$$$$$$$$$$$                i'!Jr  j,!"k##$m%,&&'(()j)(**+U,-./01j23E559667h7;<T=s=D>>???`@@8AAPBB(CCDlDDDEEFFFGHH3IIGJKLOPQsRS:VVVW8Y:[[]l__[`a]aacde fAwr"1[mKyO}uk%nEr4bs%suvh@ 2    v Tl42a V!""#Y(W)\**+s,L--./335c6 77*8^<=a=>>?@AoCDBDDDDE&EDEbE}EEEEEYF|HHIJL%NNOMP RRlTVWXTYYY"ZtZZ[$^^&AFW'wuۮTܶ8ϸʹں:Yľ.QJk4UDcZmlKc;>h4^*Vw"NoFg>_ 6W.O~&Gvl2g:["l-)2vKwCo ;gI9Z\$P|D pP6FqS-| O | 9   l   P s  <]Dwhn |Pq;Kji w ,Ml u  !!B!c!!!!!L"%#%%&^(_+.90B3678)8V99@::,;;;l<<Q==R>>$?? @@BjP[QQQQR2RRR*STU]^_'_k___`;`j`Oab2klGlhllllTmtmmowxxx>y^yyyy&zz{>{^{~{{)|}~0,( $އ/Fs-Yō K`ّFƓ"Bcіܘ (@ϛڜi9Ɵ+X{PA/,Ũ2_ĩ26lǮN#ٲ'ʳFr´Z}̶3b׷)X{Dk޼ 0_Խ&UxPCpgf0]Jl 7Y$Fs}n:i_z OsHVh!Jsa2 gu v%h7MncL$YCe0R?l ,Y{Fh3U Bo /\~I@     )  j  2 $,6@LXdp|O >[u            $0<H`85}`dco{\t9P   & 2 > J V b n z             !!!&!2!>!J!V!b!n!z!!R""Q##$3%S%&&''_(p((((P)**f+:,,E-e-./t0g132N23a33r445)5p5566m6666;788888888888899<0=<=H=g==*>>?n??F@@AA6BBCzCCRDD*EEFnFFGHHII-JJJKL\LNNNNO OO$O0Oڣ(vĤ`J4KWD}Cܫ*ϬkU?](6Ա#r_LOܷb{LD08DP\hp|̾ؾ (4@b [bv !e}Ba/5QWm$g'/gXpcC;S 1m5qD )1=IU]eq} !-9[Qg)wY Lb@{#9X,zd|^vH Y Y!obM\NViu-{NWak2GS[eoy    ) 5 A M Y a m u        y    [ 9Mo}U?L)w|xG\It 9!!"#n#5&?&I&R&^&g&s&&&&&&&&&&&&' ''!'-'9'E'Q']'i'u''=)))B**+ ,Y,2----Q...//*0x001b111M222*3y3444445 55!5-595E5Q5]5u556o7788-9{99:e::;O;;;<G==_>>8???I@@@ABkBBCUCCC4DEDDDDE6ETEoEEEEE FGGGGGGHHH&H2H>HJHVHbHH IYIIIJJKmK0M~MMNmO3PPPAQRRST?UUU)VwVVTWW1XXXFYzYYYZNZhZZ,[z[}\\]j]]^`^ēГܓ(ȔdN8ԗ"p J;EMUamyٚ' WAݝ+Uk^tg}p^ը +7CO[gs˩שߩ1G]uΫȬE]­ڭ?[h~Ͱ:jܵNf¶`pqκMl(վ50]~Gh1nT)dVU8Wv3n`2?^ G-k^$\{RqJiBa:Y|2Qt*Il"Ad9\PB?|Y|.Mp:!@<&Eh1k)c![z+Lm7$>Pj2|D^ &p8RNw*c7l3bCon  V   $    4  W  "Op(I[ML Kn8De/N ?^}M3p[ ?`Y? |  !6!W!v!!!!!0"#$Y%>&'(+V/03A7778w8#9;99%::;;;Q<<6==7>> ?x??k@@A^CwCQ?QMQ}QQQQR$RRRSSSSTTNVgV^^^^_:_]_~__ `-`N`aa5aaacckk l9lZl{llllFmfmmHnVnon!p:pbxxxxx y0yPyqyyy zzz{1{Q{q{{{{ |}~C܁?|؃ ;xԅ7tЇ#D8Yԉnnnjڍ3?^Y|5ؔ6Wx3˜94SvΜM3aٟ><"_4&%ʦz?بErש?|٪7t)f(`خ2ʯ(e߱W ,f>$a%Hwɷ>m74q(]м"Etƽ;j4g$_(VX{mL!Cp0]Jl 7Y$aG_ +OC5k5d .]UGx<e6Qtc.I<WJeXsfe\L?`UuWe~ ?_y=v)VxCe0R?l ,Y{Fh3U Bo /\TF  b z  3 p   < y   N 4o&a`hrz "w'/7?GOW_gow $,4<DLT\dlt|%-5=EMU]emu!)19AIQYaiqyS[cks{ #+3;CKS\enw $Vbk          !!!!!*!3!>?t??L@@$AAssTttuvlwwxn}frzʀր ".:FRZfs{́؁yՅ%=ljӊ4Őʖ֖&2>JVbnzʗח !-;Wšܚ&qߛCɠߡfɢ:Q+0F e/WkS 6>JVbnvƾҾ޾&.:Hh| 'mHgh=W]s*m-c^GCY7s;w#/7CO[ckw'3AaW m}RhH)?^lf|  N__abTo{uT\f:~Y`jt~   # / ; G S _ g s {            b @UuX ~M{ A!""#:&D&P&X&e&m&y&&&&&&&&&&&& '''''3'?'K'W'c'o'}'E(C)H**+_,8----.2344445555'535?5K5W5e5{5O66u78J<=M==>?@@[CC]`Cg f E7N5q *b XyPqHi@a8Yz0Qr(Ij Ab@W21la4Uv f'# ,rp7q/i'aB2S.FZr":Nf.zBZJ !1k'>&u:tv  $    f   $ ; G ^   (Wv/;vKb=<Shxv>Jk5{Ed=T`wKb&GfI`l   !>>???r@@BgCUPQFQTQQQQQ R+RRRSSSSTUWV]^^^^ _C_d___`4`U`a%a;aabckkll@lalllllMmmmmOn_nno*pwkxxxxxy7yWyxyyyzzz{8{X{x{{{{|}~plhބޅd{چ؇)q@_St EZӑ@Ȕߔ <]ݗȘ"ߙ:Ԝ=T3%,COf$;ۤ,Ѧ),Kݩ1l)d{Vѭ0fޮ"9Ul G²!2l.EQhƶ-Nѷ#Du'&ax/ѻeؼ*K|ν Ar$;ۿQ=\P<R*Iy6f#Sr@_Qhh4U3J%t;m4GP~`DmAYk9QG_Umc{pfS"Fg\|^nFi-D/_~Lk 9X&Eu2bOn <[)Hx5Fs)   i   ` w  # i   > U aS fpx )} %-5=EMU]emu}"*2:BJRZbjrz +3;CKS[cks| !'/7?GOW_gowYaiqy !)19AIQZclu} "+\is         ! !!!(!1!:!C!L!U!^!g!p!y!!!!!!!!!!!!!!!!!"""5"="S"["q"y""""""""""""##!#)#1#9#A#I#Q#Y#a#i#q#y#################$ $$$!$)$1$9$A$I$Q$Y$a$i$q$y$$$$$$$$$$$$$$$$$% %%%!%)%1%G%O%W%_%u%}%%%%%%%%%%%%%%&&&"&+&4&=&F&O&X&a&j&r&z&&&&&&&&&&&&&&&&&' '''"'*'2':'B'J'R'Z'b'j'r'z''''''''''''''((((&(.(6(>(F(N(V(^(f(n(v(~((((((((((((((((())))')/)7)?)G)O)W)_)g)o)w))))))))))))))))* ***(*1*:*C*L*U*^*g*p*y***************+ +++$+-+6+?+H+R+\+f+o+x+++++++++++++++,,, ,),2,;,D,M,V,_,h,q,z,,,,,,,,,,,,,,,- ---%-.-7-@-I-R-[-d-m-v----------------... .(.1.:.C.K.S.\.e.n.w................///"/+/4/=/F/O/X/a/j/s/|///////////////0 000'00090B0K0T0]0f0o0x0000000000000000111#1,151>1G1P1Y1b1k1t1}1111111111111112 222'20292B2K2T2]2f2o2x2222222222222223 333$3-363?3G3O3X3a3j3s3|3333333333333334 444'40494B4K4T4]4f4o4x444?:6U Y}1.v1]Lm(J!8""6##$%D%%&s''M(l((((>))*C+ ,,=-V-n.^/O0>1 2E22Y33U445"5[5556O6666&7;=_=~==t>>L??$@@@hABBBXCC0DDEtEELFFdGGdHHxIJ|JJKLTL(PP}QQRRR@SSTT UYUUtVV"WWB[Z\\^^^=__`:```a_{(`6Pr\uCo4Q=gZET+ s3~   i   l >  s^b%70R!o`?A@U !!"#f#' ))):***+Q,"-v---@...L//"0p00 1Z111E2223q3n556M77o88%9s99:]:::G;;;<.==D>> ?~??A@@@6ABcBBBMCCC$DDDE.ELEjEEEEEHHQIIIBJKeKMvMMNSOPPP9QRRST7UUU!VoVV0WWXwXX>Y^YYYZ:Z_ZZ[r[k\\]b]]^P^\F0~̗h9ȚO9՝#h~qzvͨ>ʪDZn߫٬3Vӭ-PMyðްݱ²{ʵ4_L׸ )xEd Ͼ ܿ.(Uv?`)g8$_QC.On}!iDu*w5Ve@CLeTsJi@a8Yz0Qr(Ij Ab9Z1RI;:ur&Ef2t84={L~'aYzQrQ#De{/~7r:c+f.WZ"KFXe#Yy05+Z0}QP  L    w   -  P   Gh!DT FEv9R]~'H!VuFiT7XwR# u   .!O!p!!!!!)"";#9%&&(+)/i0t3777 8488899 :s::_;;A<<==>>>V??>@@A@CpCP4QfQQQQQR=RRSSSfTT0V`Vq^^^_2_L_v___&`F``.aaaqcckk"lRlslllll_mm3nhnp3pDxxxxyyIyiyyyzzz){I{i{{{{|a}F~;y7u3q/m<z Q~̉ \dЍ +5VehQ`Γ-єOp3*KZƜFAџ65X-֥ߦ7 7Ш=jϩ:uǪ2mҬ$_>wҮ+}ůѰ#^ñP/"\}ش7Zֶ@o6e0/jϺ!ڻAu=l3b-KnZ N{F_Q E;h(UwBd/Q~Z+y#E<. -\&UdP+^p-V,Jll7B(P6^DlRE0~,u(XynBw%Wrt6l}!Np;](Jw7d$Qs>`+Mz:g'TcO*|n  , w   i   5 r   G j \N4";E","J"h""""#>%l%%''0~-Le RnI$t0x=fC!)"f"'##$ %=%%&c''C(e((((4))*6+,, -O-^.N/?0-11>22'3v3D4445Q5{556E6x6667; =U=t==d>>GoOno#?cJc;&FN~5EyY|!]&C/<=4m4XqJ/F@*n3h g*35(a"jA)t   Y   \ .  iWRiS `5=S q^2~D  !!""4#')))***+,-i---3.e..?///>000(1v112b223?3g556@77b888A999+:y::;c;;<'==7>s>>L??@]@@AA1BBBCCCDDDE'EEEcE~EEEEHHImIIJJ3K MDMMyNFO P~PPQ~RRRTUSUUU=VV#WhWXEXX YWYYYY0ZXZuZ [@[d\\\0]]]B^ܔ*xƕbL6Ҙ2ϛkUawҟj۠s|i(=SgثҬ#O̭Iy=rװqͱt'XB иgۺ;Zž˿'oKl5V`'XJ2$Edlb3wn m+LT9<;TJi@_6Wx.Op&Gh?`7X/P'HB43neh;\m . *3t;wWxOp GhpJ:[iL0h0\$\$PP|D|Q TOr).}!Pv?>}  B    m   &  I   =^=xM?>o(zA~St>}Lk?b M-Nm K n   $!E!f!!!!!"""&#(% &&}(+/X0c37778*8819x99b::N;;3<< =u=>q>>E??-@@@/CiCPQ\QQQQQR3RRRSSVTTVYV`^^^_(_E_l___`<``'aaa`cckklHlilllllUmum"nano,p3xmxxxxy?y_yyyyzz{?{_{{{{{P}5~1r-n)j%f܆߇2sGt‰KZƍ!+LTaڑGOǓ#ʔEfn ) AIݜ?:ǟ,.Q&ݤťtئ0-ƨ3`ũ3nϫ+fX7mȮ$lWI(ֳRsδ0S϶6eڷ ,[~)ֹ(cwӻ0n3b׽)X{&ݿ:]SDq5N@>1^Km 8Z%GtSo;u5' }#RvKSIWi#Lu"Cb[&;I%W3eAw4&hdNod1pMkqc/blDf1S@m -Z|Gi4V!Cp0]JRHu]   p   b   + k   @ cU=+$.v"%"C"a""""#7%e%%''#C:Y\ [52z3aPo,L!<"":##$%F%%&x''R(n((((C))*E+",,B-X-s.c/T0C12G22^33Z44 5$5`5556T6666+7-<=d===y>>Q??)@@AmABBB]CC5DD EyEEQFFiGGiHH}IJJJK LYL*PQQQRRESUTTU^UUvVV$WWD[\\\^^^B__`<```a>axaabccefYf|ffffgjkklsllmmknnopqPqqq0rrrs5sVssItkt.uuu^vvwcwwxxxyy%0;p݋+ь?}2WEF\i͚\|ʛ(ל:G4ɟg%ԡ.'ף%s]G14Ĩש^ê.ǫ'hR<ܯZ ѱ o \IK#wGvIASDE`mVx ^},~2HBY,_H)c>n.N,h 0l5LDQ&tCC-vUwawHq9VB l_JY- x8   n   q C  x"`g*<5&tAbDFBZ !!"#k#'%)))?***+V,$-x---B...N//'0u001_111J2223v3p556O77q88*9x99:b:::L;;;<0==F>> ???F@@@ABhBBCRCCC&DDDE0ENElEEEEEHHVIIIGJKjKM{MMNUOPPP>QRRSTڝ(+=FOxҨJp۬8Xխ2RR{Ȱ Dz}ϵ6aQٸ.}Ji%Ծ 0-Z{De.i=&aSH3Ts&kIw/|:[jBEQjYxOn Ef=^5Vw-No%Fg>_6WK=<ww+Jk7v=9#B}Q,f$^VwS(Ij4!9w?e-k3Y!_'MKZj%^{27 0_5VU  Q    |   /  R   Lm#FV HGx>Wb ,M#[z HkV<]|T( w   3!T!u!!!!!+"">%"&'(+./n0y377789899:x::d;;C<<==>>>[??C@@AECrCP6QkQQQQR!RBRR SSSkTT5VbVv^^^_7_N_{___+`K``0aaavcckk'lWlxllllldmm8njnp5pIxxxx y!yNynyyyzzz.{N{n{{{{|f}K~@{Ł<w8s4o A|Vщ aiČՍ0:[jjVeГ2ӔTu8/P_˜ HC֟;7 Z/!ۥ 9<ըBoԩ<w̪4o׬&a@|׮-ǯְ%`ȱR 1'aݴ9 \ضEtƷ;j21lԺ#ܻFwBqý8g/Ps\%SKdVG@m -Z|Gi4V!\0~(J>02a+Zi R0`r 2[1Lqq<D-R;`InWJ 51z-]~sGy'\ty8q&Su@b-O|<i)VxCe0R?l ,Yh Q/~s  G   k   : t   I l^S8@Jj(# k!"l##$n%-&&'())k)***+V,-./01k23F55:667;<E>>???a@@9AAQBB)CCDmDDEEEFFFG"HH6IIJJKOPQtRS;VVWW[]_\`a^aa cef?fffjmmMnn(oprstu(vw xxՂR0މK+ېđlĘҙ;Z4ޠ{O@G]}o5kֿ'}<l?Bxs#2\nN!Rvl(s5et(vvxi 3    w Um53d Y!""Z(Z)]**+t,M--. / 35d6 77-8_<=d=>>?@ArCDD}HHIJL&NNONP RRmTVWXWY%ZZ[%^)BIxvܮUݶ9и˹/RKl5V[n m d<?5+x#ph` XPHwm3h\#mwLD <J]%Q}E qQ7GrT.}!P} :   Q t  =^Exio }jxNv  M"%%&_(`+.:0C367W99A::-;;<m<<R==S>>%?? @@BkP+STU]k`Pab3kmow'zz{*|}~1-) %߇Gt‰.Zƍ aǓҖݘЛj:Y|QB0-ƨ3`ũ37O$ڲ(˳Gô[~϶6eڷ ,[~En3b׽)X{QDqhg1^Km 8Z%Gt~o;j` }#RvKWi3 hv j8%ZDf1S@m -Z|Gi4V!Cp0]JA      k !+~#-uj(# k!"l##$n%-&&'())k)***+V,-./01k23F55:667<<G>>???c@@;AASBB+CCDoDDGEEFFFG$HH8IILJKOPQtRS;VVWW[]_]`a^aa ce?fefmmNnn+opstu)vw xxՂR0߉K+ېđlĘҙ;Z4ޠ{OAH]}p6kֿ'}<l?Cxt$2\nNRvl)t6et(vvxi 3    w Um53d Y!""Z(Z)]**+t,M--. / 35d6 77-8_<=d=>>?@ArCD}HHIJL&NNONP RRmTVWX%ZZ[%^)BKxvܮUݶ9˹/R[ d`?*?5Ti+~# &;Pezwm4$9N#LD<t]%Q}E qu7GT :  Q t Exj jxv M"%%&`(a+.;0D36X99B::.;;<n<<S==T>>&?? @@BkP+STU]k`Pab3kmow'z{*|}~ .Ƌۋ Җݘ(ЛjY|QC3O$ڲX˳mGô[~EQhg~?Tj`3 hv j8%ZA     k ![ ;f"j\!X""]##$_%&&''|()\)**s+G,,r-./0v1\23h33y44755+667<6>>?z??R@@*AABBBCCC^DD6EEFzFFGHH%II9JJKKLOP=QQeRRSS}TTUgU,VVVHW,[[\\a^^^_M``Oaac.ff mm>nnopp qYqqsttRuuvvvwrww3xxFyƂC!͉ي:HC]̐N]oÙ$r,=I %{ϠAlϢD.|ʤfP@]1I6լ#q [Ll=۱*yȲfS^$Zǿn-]y0s3i d#M_=A g]s/_d2&Tee'gSh\{3 Z $    h F{^&[ER/$ScP H! ""&#K(I)))N**+,e,>--.W...//00~001h112T222135U66{78883999:k::;U;;P<=S==e>>>??@O@@@A#BqBB CaCCDnHHI_IIJJ%KL6MMNNO?PPPQRR^TTEUUU/V}VVZWW7XXXZZ2[[\\"]q]]^ΔjT>ڗ(vĘߚ3]G8igͮFrζ* C<&t|JUw0& xph^$|=5->NzB n6b(8EA +  B e .|6iZ[~ig >"$%&P(Q+.+0436H992::;;;^<<C==D>>???y@B\PSTU]\`Aab$kmuowz{|}~"ezÖΘ[JmB3Q$ح@sɲ8LoTJ6QGBb WXO<)xeo[QA: $sYgu Z)K5"q^K8%taN;0   ~  \ ~Cv~߈ QYˋ}K2E) ͘u}ƝΝ֝Yؠ~~'/;CKπԂ܂nу\P!T$j̇ϊaӋ$,4@muɌ"*6>FN~;C5=Q08qđ֑!@iޑȒ&]e“+fFNVbjrzҕڕS[ckwU]eq}$,emu}hp| )͛՛Rɜ@iޝ19A !-5=EQ@owR̊la8js|F\:9y $"."L"j"""" #@%n%%''F E:!p+2, -38;N=>?H@BzCDFH?J TzV%Z~ < ^"cIe|Q{+KP޹#;1R)<*n9H6/l]F1`  qjNh').10Y12c3a6K8:;y<=?:@ZAHD>FxJ6N v 4 deQg >hhjj`kmlo1tuuv xJyi}WlSX"L>1&W0;24B<=(?@bCEzF JK+M5PgQUSDU,VXPZp\E^_`accyhkm rXss"uuwC D E F I oK WM P GW [X \ r] ^ ~` a b c d f $i n p /s u kx { X} ~  f ņ $ S C Ԝ ԥ ` | # 0 d i r  wh X  P  H  @ z 8   r 0 p j ( b F!#$%Z'(S [\   z{W+?-75QVWXYZ[\]p^f_`abr' v 4 `PQDx H   "#$Y&bNNOx W  ) Q $ ' I E MM I  U yW˓{¯Z; ԫm ; u 3 m + e # ]  U  M E   C  Y _``>a bpb3cc _ + e # j C+cCD!,,-L j38y;L=z>?F@AmCDFGpIQxVZ[ cCeSvOuߞ`ަ)E1ܹn! 9P'~:~(lQ8)SWD+Z  zohE\')Q+/0S12]355I8:;s<= ?8@XAFD?G@ByCDFHI>J?RyV$Z[; !cHe{Pz*JOݹo" :Q(;)mVG5.k\E0_  piMg')R+00X12b365J8:;x<=?9@YAGD=FwJ5NQu 3 ePg=h hjj_kmkoruuvxIyh}V&RW!K/=0ZV0:24A<='?@BEyF=IKLaNfQTSCU+VXOZo\D^_`abcxhkmrWss!uuwxv+‹UD D E F I nK VM P FW ZX \ q] ^ }` a b c d f #i n !p .s u jx { W} ~  e X  u ڋ E ֎ Ӝ ӥ _ {  " / c V E ӫ۳ ~ vg W  O G  ? y 7 q   / i ' a  #$%Y'o+T} \^  yz08>-.`6VWXYZ[\]o^e_ ``=aaobbcd_`b2c0tu 3 ߢ_kOPCwG   "#$X&&NO4Py ? h ( P i # & H D  _R[syh `~`2aadbbc d = dW[xĶym ``7aaibbcd B Gl7T0@"?##$!%%&}'W((H))*J+',,x.h/Y0H122]4e55Y6607>>f??>@@AA.BBCrCCJDD"EEEfFF~GG~HIIJJK-P$QQRZT{V)WW_\^ ``"a}abcm nynnops;uukvw#xy@u֌5\aaϛ-ܜL9Οl*,9kЪ;ԫX0LIHev[E^hK2hG'w3:IVF6M>G0= q  v H  }%l/:JeE_ $!!" #*))**+)-}--G.S/356T77v8<3==K>??@AC+DHII KMNZO PPRRT7WXXDZ$[r\U^@Ϛ8JS\}ƫ=7WͰ%̲Ե;VB M+NoVoV|D p8d,oc :[Z V    C\!-  #G%+& '(+7/w03"79:::m;;F<< ==>>>d??L@@JCQSpT:V{^aa{ck=n pNxz{k}P~ʁƃ…fojd!Ѫܬ ۰ͱٺKUxPi[5n56 vA2@N\S:L~vm4x P !   "X#b-- T      ###efgefgoo b R S # $j #;;;>?@ Ky  ###  #  ####  $####                ## # ##  $# # ##K7K6 !"#$%&KKKKKKKKKK-KKKKKKKKKK-KKKKKKKKKKKKKKKKKK # # # # #######  $#  #  #  3 ,  3 ##  ##  #  K!K#K$K%K&K'K(K:K:K:K:K:K:K:K:K7K6KKKKKKKKKK- ##  $3 , #  aj Nb?$!9%(K-:25w5 6t66`7;=L0Yd__#``1aabdeffj|lqRtl}#9oݡi Fk;A?Fjd8|   S#{'-3c5:DDDEQFLYYTZ^OcԫάKȭEnӰpT Ǹ"cM[~SE]ed~43wog_WOG?=/.i_Sdon @,X Lx@H}i$$sqt   ! D  U8s H:9futx:]HEFi  "#77~8@eCQQSTUV^A_#aackl]n(pixyz{{mi߂߃eۄۅa׆ևn>QXŔ ۗݙ}:1)L!ؤ'*.i&aS.R D+NĶ+}Ϸ!s$#^λcּ(z̽p!ؿN;9'vcP=Ne10"qjDM]>|6DR`mckf* \I6#r_L9&uC~p  ]  f  ; ^P|<eKkr/DoYT biF  $2!7{ yߓ+RHO@!o6 p<e?kr#DcYܸzHyV]~:  {& 7zmӓF<C4۶zcu* GJNUhlptx|"59@DLT[by} '+/JNRVdhlptx| #'+/37;?CGKOSW[_cgkos #=BFUez'+38=EJOS[_tx &+3;CKSg!2Ha{ 1 D [ ` p u z !!(!-!?!G!^!c!h!!!!!!!!!!!!"" """""#"("-"2"T"Y"p"x"}"""""""""""""""""""####$#)#.#3#8#=#B#G#L#Q#V#i#w#|##########$$$%$7$L$j$w$$$$$$$$$$$$%%#%4%9%>%F%K%p%%%%%%%%%% &&&& &%&*&/&4&9&>&C&H&M&R&W&\&a&f&k&p&u&z&&&&&&&&&&&&&&&&&&&&'''&'8'A'S'X']'u'z''''''(( (("(7(<(A(N(S(X(](b(g(l(q(v({((((((((((((((((((((((((((()))")'):)?)D)I)U)e)m)r)z)))))))))) ***3*8*=*B*J*R*Z*_*s*x*}******************+"+'+/+4+<+A+F+K+P+U+Z+_+d+y+++++++++++++++++,.,D,V,g,l,t,y,,,,,,,,,,,,,,,,,,,,- -----"-'-,-1-C-Y-s--------------...+.7.F.N.l.......... ///*/8/@/H/M/U/Z/h/v/////////0,0L0k0000000000001 1111,1A1T1Y1^1c1h1m1r1w1|111111111111111111111111 22.2;2R2W2\2r22222222222222222 33333$3,31393>3C3K3T3Y3a3i3n3s3{333333333333334 44444494X4]4b4g4444444444444445555&5+5=5P5e55555555555555566 66666$6)6.63686=6B6G6L6Q6V6[6`6e6j6o6t6y6~666666667%7*72777O7i7777777777 888.83888T8s8x888888888899(909M9b9g9y9~99999999999999999999999999:: :+:D:I:N:d:|:::::::; ;;#;(;-;2;7;<;A;F;K;P;U;Z;t;y;;;;;;;;;;;;;;;;;<<6<M<R<W<\<a<f<k<p<u<z<<<<<<<<===#=(===M=R=W=\=a=f=z========= >>9>I>]>w>>>>>>>>>>>>>>>>>>??!?;?@?Q?V?k?p?u??????????@@@ @%@*@/@W@\@w@|@@@@@@@@@@@@AA"A'A,A1ATAwA|AAAAAAAAAAAAAAAAAAAAAAABB BBB#B8B=BBBGBLBQBVB[BsBxBBBBBBBBBBBBBBCC&C/C8C]CfCoCCCCCCCCCCCCCCCCCCCDDD DDDDD D$D(D,D0D4D8DFFFSF]FeFrFzFFFFFFFFFFFFFFFFGG1G6GMGRGVG^GbGjGnGrGvG~GGGGGGGGGGGGGGGGGGG HHH"H'H5H:HBHFHNHbHsHHHHHHHHHHHHHHHII II I(I8I=IEIPIUI]IlIqIyIIIIIIIIIIIIIIIJJJ J0J5J=JQJVJ^JkJpJxJJJJJJJJJJJJJJJKKKKKK"K&K.K2K:KBKSKdKiKqKKKKKKKKKKKKKKKKLL+LMCMHMMMRMWM[McMgMoMsM{MMMMMMMMMMMMMMMMMMMMMMMN NNNN&N+N3NDN\NdNiNpNNNNNNNNNNNNNNNOOOOO"O;OMOROZO_OfOkOsOOOOOOOOOOOOOPPPP#P(P-P5P:P?PGPLPQPYP^PfPnPPPPPPPPPPPPQ Q7Q[[[`[h[}[[[[[[[[[[[[\\\\\#\<\L\Q\^\c\l\q\y\~\\\\\\\\\\\\\\]]"];]@]H]M]R]Z]_]d]l]q]v]~]]]]]]]]]]]]]]]^^^&^+^<^A^S^X^k^p^u^z^^^^^^^^^^^^^^^^_ ___0_5_:_?_G_L_T_Y_a_f_n_s___________________```2`>`C`P`U`d`i`{``````````````aaaa%a*a>aCaQaVa[acanaaaaaaaaaaaaaaaaaabbbb$b)b2b7bMbRbdbibnbvb{bbbbbbbbbbc:cVcrcccccccccd+dHdQdZdcdgd|dddddddddddddddddee#e,e0e8e@eIeMeVeZecegepeyeeeeeeeeeeeeeff fff!f*f3fHfMfQfXf\fdfufffffffffffffffffg ggg%g*g?gDgMgRg[g`gigngggggggggggggggggghhh%h*h3h8hnEnLnSnZnanhnonvn}nnnnnnnnnnnnnnnnnnnooooo#o*o1o8o?oFoMoTo[oboiopowo~oooooooooooooooooooopp pppp&p-p2p9p@pGpNpUp\pcpjpqpxppppppppppppppppppppq qqq q'q.q5quEuLuSuZuauhuouvu}uuuuuuuuuuuuuuuuuuuv vvvv%v,v3v:vAvHvOvVv]vdvkvrvyvvvvvvvvvvvvvvvvvvvvw www!w(w/w6w=wDwKwRwYw`wgwnwuw|wwwwwwwwwwwwwwwwwwwxxxxx$x+x2x9x@xGxNxUx\xcxjxqxxxxxxxxxxxxxxxxxxxxxxy yyy y'y.y5y|E|L|S|Z|a|h|o|v|}|||||||||||||||||||} }}}}%},}3}:}A}H}O}V}]}d}k}r}y}}}}}}}}}}}}}}}}}}}}~ ~<eeNkr1DqYV  5J_t1F[p/DjkT\d    '4!7{ (0ы{-TZbjrQNcx ȼ #+3;CKS[cks{-5J;CKS[cq8/7?GOW_gow ȃ6757'66F64z6$5;7 5<5i7 7 )8 -ˉ/8Xǻǻʻ*˻*Au# # SyntaxNodeChildren# >## #Qc}.    ,   ,R>h9A]P    Ԉ`-ˉ/8Xǻǻʻ*˻*Au11R101010101010+qg Acccinternedc҈RFb+b+b+Interner 60p+PS ` S  (x(x(zǢ(({(sIo ,`,((R(((ɘ(((3&" `/ ݍ ݍ  /ݍݍ ݍ ' ':_ˉ/8X++++}x```č`ˉ/8X++++}x » )`L ,!.`S  `++++}xǻǻʻ*˻*AuNNNMNMNȈMjg(+` b#  ` ``S`S ``č` ڷލ`9ލ` ݍˉ/8X`` ލ`    >  XП+9Iݍ ލ`` ݍ``  ҍ`č` `` ` `-ˉ/8X``,`,` / ݍč`ԍ``ԍ`č```` `-ˉ/8X   Ξ CR ,ݯ,9    ` ݯ `-ˉ/8X`Ғ`,`,`` ``Й` `-ٿٿ Successorsܿ8ݿsucc8tD"  61++++}xR>h9A]P1515 {-P 3  `NeverShortCircuit `ʑ `` ) `  9  ` ` ` `ǜ`` `l c utyǜ``ȑ ``36060FV>,ǻǻʻ*˻*AuNNNMNMNȈMjg(+66*LL RawRwLockL Lߪ-JrJtJu NotComputedJv InProgressJw،JFJxwaitingJFJzJ{MemoizedJ| JF al)ţ*`JrJtJu`Jv`Jw،JFJx`JFJzJ{`J| JF al)*`JrJtJu`Jv`Jw،JFJx`JFJzJ{`J| JF al) m(m(JT+T+T+CrateSupportsNoStdQuery ~AJT+T+T+CrateLangItemsQuery pJ_+AJAJT+T+T+VariantsAttrsQuery EI4K AJb8b8b8TraitEnvironmentQuery W{RAJb9b9b9TraitImplsInBlockQuery sS AJT+T+T+ AttrsQuery g.1AJb8b8b8ConstParamTyQuery 8z9HAJb:b:b:ProgramClausesForChalkEnvQuery x-AJT+T+T+ConstVisibilityQuery 7a?B[LAJb7b7b7 MirBodyQuery V徛rAJT*T*T*MacroRulesDataQuery AJb9b9b9!IncoherentInherentImplCratesQuery Xgu#AJb:b:b:StructDatumQuery !IQAJT*T*T*UnionDataQuery e/~AJb:b:b:ImplDatumQuery ENKAJb8b8b8TargetDataLayoutQuery H]҅AJb:b:b:FnDefVarianceQuery GEFbE AJT+T+T+BodyWithSourceMapQuery d]AJT*T*T*TypeAliasDataQuery >.AJT*T*T*FileItemTreeQuery sSIAJb8b8b8ImplTraitQuery V`NAJU U U MacroArgNodeQuery  ~&AJT*T*T*StructDataWithDiagnosticsQuery p24AJT*T*T*BlockDefMapQuery ~`0 AJT+T+T+ExprScopesQuery >~AJb8b8b8ImplSelfTyQuery ;IyAJb:b:b:TraitSolveQueryQuery %g1AJT+T+T+GenericParamsQuery fAJT*T*T*StructDataQuery (+AJT*T*T*StaticDataQuery 0卯AJb9b9b9GenericDefaultsQuery t)xAJb8b8b8ConstEvalQuery \FAJU U U AstIdMapQuery Xb ]AJU U U ParseMacroExpansionQuery FDA;6AJT+T+T+ BodyQuery f]"kAJb:b:b:FnDefDatumQuery WNAJţAJT*T*T*TraitAliasDataQuery $\E㰝AJb9b9b9InherentImplsInCrateQuery ns}tAJT*T*T*ImplDataWithDiagnosticsQuery Xo%2UAJb:b:b:AdtVarianceQuery pY+wAJT*T*T*UnionDataWithDiagnosticsQuery 2?AJb8b8b8 ValueTyQuery ?1AJSourceRootCratesQuery nmAJb8b8b8GenericPredicatesQuery ى5AJT*T*T*ProcMacroDataQuery q:JAJT*T*T*CrateDefMapQueryQuery +8FAJT+T+T+VariantsAttrsSourceMapQuery =/rx(TAJb8b8b8TyQuery 3kuuAJT+T+T+FieldsAttrsQuery :"bAJT*T*T* EnumDataQuery d2bJz AJU U U MacroExpandQuery aVh_AJAJb7b7b7InferQueryQuery !1KAJT*T*T*TraitDataQuery +[ AJT+T+T+ LangItemQuery t6_AJb9b9b9TraitImplsInCrateQuery -6phfAJb8b8b8LayoutOfAdtQuery %3`8TAJb8b8b8GenericPredicatesForParamQuery %=9AJU U U ParseMacroExpansionErrorQuery Od"AJU U U DeclMacroExpanderQuery !R hAJb8b8b8FieldTypesQuery ZL_XAJb9b9b9AssociatedTyDataQuery X3LA JAJţAJA     *  /  /JJJJXuRjTLTLItemLocTL containerTL،{q7{T6T6T6generic_paramsT6 T6:T6 is_negativeT6itemsT6ast_id-`TNTNTNImplIdTN T $g[ΞJ3w`JJInternIdJJw 0JT!T!T!InternImplQuery ]=  ` ``9ˉ/8X`` `/Copied(хʒKeys2{T;7֝FFFVfsPathF Fa x9 ֝ˉ/8X`     >  XП+9I֝ `/JJJJXuRjTLTL`TL`TL،{q7{T5T5T5T57T5`T5T5`J6TMTMTMUnionIdTM T gԏΞJ3w``JT!T!T!InternUnionQuery ͺ=  ```9ˉ/8X`` `/ » )`L ,!.DαǷ*   / ǻǻʻ*˻*Au ' ':_ˉ/8Xˉ/8X  R Ξ ZP,T/T/T/T/ T/T/T/ T/T/T/ \S  `ˉ/8X`Ƿ` `9` ˉ/8X`` `    >  XП+9I `` `` ``/ލ````/``/ *  ߲*    /    ǻǻʻ*˻*Auǻǻʻ*˻*Au``` ``9`  ˉ/8X`` `    >  XП+9I  ````` ````` `/``/ ```/NNNMNMNȈMjg(+֝9 ֝ˉ/8X`````/`͝9 ֝ˉ/8X`͝````/JJJJXuRjTLTL`TL`TL،{q7{T3T3 T3T3`T3{Yq&TOTOTO ExternBlockIdTO T J{ΞJ3w``JT!T!T!InternExternBlockQuery =m\K  ```9ˉ/8X`` `/JJJJXuRjTLTL AssocItemLocTL`TL،1l:NT6T6T6T67T6boundsT6`T6 T6` ~TeTNTNTNTN T q6ް--F----=JJSlotJJJdatabase_key_indexJJ stamped_valueJ~CrateGraphQuery *:(!FJ`  ``9ˉ/8X`` `/` *   /` ǻǻʻ*˻*Au```9` ˉ/8X````````````/`9 ֝ˉ/8X`````/JJJJXuRjTLTL`TL`TL،{q7{T5T5T5T57T5`T5T5`[fŀ:TLTLTLStructIdTL T -5cΞJ3w``JT!T!T!InternStructQuery :,  ```9ˉ/8Xaa `/ J;((m96ˉ/8Xa  33 SetLenOnDrop333 local_len3+- a/``!#πn444040bW`(  5 ˉ/8Xaʆa`/ݍ`č`ҍ`/JJJJXuRjTLTL`TL`TL،1l:NT5T5T5T57T5mutableT5 T5`OTkTNTNTNTN T 9jǎΞJ3wa`JT!T!T!InternStaticQuery :  a`χa9ˉ/8Xaa χa/``/ԝˉ/8XΞJ3wׁ֝9ԝˉ/8Xċa ԝnja/JJJJXuRj֝OOOO>q6ް֝--F----=JJ`JJJ`JJ`J~ FileTextQuery mw8ZJa  aa9ˉ/8Xaɏa a/JJJJXuRj>:>:F><>>=>gG1Ξ:QF   'w444040bW`(`[v]OOOO>q6ް--F----=JJ`JJJ`JJ`J~ProcMacrosQuery 2uJ˔a  Փa֐a9ˉ/8Xaa ֐a/JJJJXuRjTLTL`TL`TL،{q7{T6T6ȓT6T67T6`T6`CS3&GTNTNTNTN T p}j[ΞJ3wa`JT!T!T!InternTraitAliasQuery K>DD  a`a9ˉ/8Xڗaa a/JJJJXuRjTQTQLifetimeParamIdTQʼnTQv1P{Sb:b:b:InternedLifetimeParamIdb: b GΞJ3wa`Jb9b9b9InternLifetimeParamIdQuery $g" n  a`יa9ˉ/8Xa›a יa/JJJJXuRjTUTUTUTU TUTUTU TUTUTU TUTU InTypeConstIdTU TUTU VariantIdTU D`!!!>!!!x3'~TA!TATAMissingTATATA TAIfTA conditionTA then_branchTA else_branchTALetTATATATA،TA statementsTB`TBTBAsyncTB،TBaTB`TBTBGTB TBUnsafeTB،TBaTB`TBLoopTB5TBTBWhile TBОaTB5TBTB TB8TBTBis_assignee_exprTB TBTB method_nameTBTB generic_argsTBMatch TBTBarmsTBl TBTBcTBTBTBTBTBTBTBYeetTBTB RecordLitTBTBTBspreadTBellipsisTBaTBTBTBTBTBTBCastTBTB TBRefTBTBrawnessTB mutabilityTB TBTBUnaryOpTBTBTBBinaryOpTBTB TBTBTBTB TB range_typeTBTBΞTBTBClosureTBTB arg_typesTBret_typeTB5TB closure_kindTB capture_byTBTupleTBexprsTBaTBTBArrayTB TBTBTB TBTBߝ R pIb;b;b;InternedGeneratorIdb; b V%UGΞJ3wa`Jb9b9b9InternGeneratorQuery È)Q  a`a9ˉ/8Xaa a/``!#πn444040bW`(  5 ˉ/8Xaa`/``Ғ``/  9 6 ˉ/8X    фa  a/JJDatabaseKeyIndexDebugJJJJG NNNMNMNȈMjg(+AJ   Aa   9a6aˉ/8Xaa a aфa aa/a/ԝa a/`Ƿ`/JJJJXuRj >:>:F><>>=>gG1 SourceRoot is_libraryfile_setu#aYOOOO>q6ް --F----=JJ`JJJ`JJ`J~SourceRootQuery EϏ<Ja  ȳaa9ˉ/8Xaa a/JJaJJJJG7aJ7 ίaa  79a6aˉ/8Xaa a aфa aa/ݍ`č`ԍ`/````/JJJJXuRjTPTP Macro2LocTP`TP،TP`TPej=TPTPTPMacro2IdTP T |h7ΞJ3wa`JT"T"T"InternMacro2Query xg–  a`a9ˉ/8Xaa a/JJJJXuRjTQTQBlockLocTQ`TTQT#LY4TQTQTQBlockIdTQ T 6oΞJ3wa`JT"T"T"InternBlockQuery Ù|M}  a`ٻa9ˉ/8Xaa ٻa/JJJJXuRjTLTL`TL`TL،1l:NT3T3T3T37T3explicit_generic_paramsT3T3paramsT3aT3`T3T/;CTLTLTLTL T s)  ΞJ3wa`JT!T!T!InternFunctionQuery ;7tyb  a`a9ˉ/8Xaa a/11R101010101010+qg A796ˉ/8Xa7  фa a/ݯ` `/``/```/ԝċa9ԝˉ/8Xċaaa/JJJJXuRj OOOO>q6ް--F----=JJ`JJJ`JJ`J~J  aa9ˉ/8Xaa a/`Ƿ`/aOOOO>q6ް--F----=JJ`JJJ`JJ`J~J  aa9ˉ/8Xaaa/``/JJJJXuRjTLTL`TL`TL،{q7{T5T5T5T57T5`T5variantsT5`ֽ̱CTMTMTMEnumIdTM T pΞJ3wa`JT!T!T!InternEnumQuery L͌  a`a9ˉ/8Xaa a/```܌`/JJJJXuRj֝ OOOO>q6ް֝--F----=JJ`JJJ`JJ`J~FileSourceRootQuery M:`Ja  aa9ˉ/8Xaa a/JJJJXuRjb,b,b,b, b,b,ab, b,b,b,  _0,b;b;b;InternedCallableDefIdb; b fDΞJ3wa`Jb9b9b9InternCallableDefQuery W+#X  a`a9ˉ/8Xaa a/````/````/JJJJXuRjbFbFbFReturnTypeImplTraitbF bF bFbFAsyncBlockTypeImplTraitbF bF L{#Zb:b:b:InternedOpaqueTyIdb: b B6EΞJ3wa`Jb9b9b9InternImplTraitIdQuery bTAs  a`a9ˉ/8Xaa a/JJJJXuRjUU MacroCallLocUɡU7UUeagerUUuFGGUUU MacroCallIdU U Ű W.ΞJ3wa`JU U U InternMacroCallQuery B0  a`a9ˉ/8Xaa a/ `  ƈ`/JJJJXuRjTPTP MacroRulesLocTP`TP،TP`TPTP local_inner%IMTPTPTP MacroRulesIdTP T jΞJ3wa`JT"T"T"InternMacroRulesQuery YZ^52  a`a9ˉ/8Xaa a/`Zip3 333a_len3U`q J;((m ChunksMutM chunk_sizeMȈMJ m)m+ ; ߱  ;  a`m0m0m0SendPtrm0 m eq a9`6`ˉ/8Xaa ` `фa `a/a/ԝaaa/JJJJXuRjab;b;b;InternedClosureIdb; b B3aJb9b9b9InternClosureQuery ?<$B1 aa9ˉ/8Xaa a/JJJJXuRjTQTQTypeOrConstParamIdTQʼnTQoSb:b:b:InternedTypeOrConstParamIdb: b ezoΞJ3wa`Jb9b9b9InternTypeOrConstParamIdQuery 첱dO   a`a9ˉ/8Xaa a/JJJJXuRjTLTL`TL`TL،{q7{T5T5T5T57T5`T5is_autoT5 is_unsafeT5`T5`Y$vH ΞJ3wa`JT!T!T!InternTraitQuery ۑ[9P 3  a`a9ˉ/8Xaa a/JJJJXuRjTLTL`TL`TL،1l:NT5T5GT5T57T5 T5`Е#=TMTMTMTM T q)bΞJ3wa`JT!T!T!InternConstQuery e*Ohg  a`a9ˉ/8Xaa a/NNNMNMNȈMjg(+96ˉ/8Xaaʄaaa/ m/m/ SliceDrainm/m.K1om      / NNNMNMNȈMjg(+  /11R101010101010+qg A"444040bW`( /ΞJ3w֝/ m/m/am/m.K1o m       /ˉ/8Xǻǻʻ*˻*Au##PreorderWithTokens# #### skip_subtree#XR哈# # # # #  # # #  Q\W# # #  #  # # ِ #  56ÐX####Y G5# # # #N90 {-Pa  a     a/++++}x aa   /++++}x a  a   /a b/`/Once6O4- "ba/((R(((ɘ(((3&"  /CharsXޛJ" /"5"5 "5""5 "Im+(",",",ExprStmt", ",",R", ",",LetStmt", Ɋ(;'R>h9A]P "  b/NNNMNMNȈMjg(+ /`/`aa/ R>h9A]P ج /ٿٿ`ܿ8ݿ`8tDa # a: "  l c utybb/bb:  "   bl c uty bˆb/bb:6 " 6 bl c uty6bԉb/bb::::: ::: džAK " ϊb bl c utyϊbbb/ǻǻʻ*˻*Au##=# ####a#ümmz# # # # #  # # #  Q\Wa {-Pab:"%"%"%"!D*Ǜ " b bl c utybbb/bb3 ՛` Ӌ5 9 bb ϐbl c utybы5bb/Ě,l c uty,b:  "  bbޒb  bВb b b  {-Pb/ b , l c utyˆb, b/   b 5 ˉ/8X++++}xb   : ˆb    ˆbbˆb  b b  {-P Ζbbb    bb  b b  {-P b/ b bb/ ` , l c utyl c uty ,ڈ`b3  b .  b :    b b b bb b  ڈ`bךb  b ƚb  {-Pڈ`b/bb:"""" T~k5 " b bl c utybbÝb/bb* l c uty " : Ǟb bǞb bbǞb/ ` , b,ڈ`b.  b :  b b b bbb bb bbb/Split X %[|r _: l c utyb/bb:Κ bl c utyΚb/bb: "  bl c utybb/ ` , b,ڈ`b: 1    b¥bbbb bbb/a733 InPlaceDrop3030[B"i3 b   'wb b/Ě,l c uty,b:  "  bbb bbb bb Ϩbbb/b :l c utyl c uty  ;ˉ/8Xb  ;;ˉ/8Xb b   bl c uty ֫b b b̫b bbb/bb:ļ " ļ bl c utyļbb/`,l c uty ,11R101010101010+qg A b ͯb  {-Pӯbb/bb:ŵ " ŵ bl c utyŵƱbٱb/`/```/ a /bb/```/```/ aa/aa/`͝/a/ b /`/`/`aa/``Ғ`/ aa/a7/ލ```/aaa/ݍ`č`/aaa/a/`/  /```/ b /ݍ`č`/`Ƿ/``/```/`4``4++++}x`11R101010101010+qg A4aa4NNNMNMNȈMjg(+b4NNNMNMNȈMjg(+sZsZWideChars[ ss\s *p"%b451 1QJ` ' ':_ˉ/8XbbRepeatelement7U;4NNNMNMNȈMjg(+üb4aa4bbmmmMaxLenProducermΞmmmaH&źem(m(ChunksMutProducerm(am'm( m'mbmbmbm ˉ/8Xaam ˉ/8Xaam`am m`m m)J J7J7˶aضaJ ˯aݯaJJJ A {-PϹ   A  {-P  Ϲ 7Jb  Abbb222--F----=JjJj`JmJFJn`JFJo JFJpAJFJq lru_indexJF 'gţA2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gA2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A252--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gڭ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2222--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gٮ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gҬ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2ž2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gA2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gˣ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g´`A22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gϪ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g˫`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gڱ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2S S LocalSourceS S source=D*Btu22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A22--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2ݍ2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2`2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gԷ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gֶ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'g`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gϵ`A2--F----=JjJj`JmJFJn`JFJo JFJpAJFJqbJF 'gް`A2c2c2b2b22c22b2c2b2b2ž2b2Ќc2b2b2c2b2b2c2b2c2͂c2c22b2b2ơc2c2`2ݍ2b2b2c2b2c2b2b2b2b2b2b2b2b2b2b2c2b2b2c222b2c2b2b2b2c2c2c2b2٢c2c2c2b252b2Ěc2c2b2b2c2c2b2b2b2b2כc2b2b2b2b22b2b2b2c2ғc22c2c22c2b2b2b2b22c27ma`mmmListVecConsumer >'srvama`mmCollectConsumerm mmmmmEz`ama`cama`Ĵcama`Ĵcama`ca#JaJaJ`JaJaJaJaJaJaJaJaJaJaJ`J`J`JțaJaJaJaJ`JaJaaJaaJ``JțaaJ``JaaJaaJaaJaaJaaJ``Ja֘aJaaJ``JaaJaaJaaJaغaJ``JaaJaaJaa222'  '  (`֝/֝͝` ֝`͝(`֝/֝`c`(`֝/֝`c`(`(NNNMNMNȈMjg(+:1?1<"ן6 a6 66 a6 c  l c utycc(`(`֝  b5Κϊb bbˆbļb«a`aK))      K))     ` ݍ`  ` ` `` ``  `` ݍ``955a`a```ׁ֝a`֝a`a```a`a`a`a`````a`a`a`a`a```֝a```֝ ֝` `   `5b5bbˆb5 bbˆbbb5b'NNNMNMNȈMjg(+c' ' ':_ccc'cc  {-P  {-Pc'cc  cc 'cccc'cc  cc'```'```'``ԍ`'```'bb'bb  {-P  {-Pb'``'``MMMMM   ׁ֝ ֝ ֝955955 5  99 GroupInner 99999 current_key99 current_elt99done99 top_group99oldest_buffered_group99 bottom_group99buffer99 dropped_group9U*t쵞55   99Groups9ʼn9sˉc559``JAJţAJAJţAJAJAJް`AJ`AJڱ`AJ`AJţAJ`AJ˫`AJ`AJ`AJ`AJٮ`AJ`AJԷ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJˣ`AJ`AJ`AJ`AJ`AJ`AJϵ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ´`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJAJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJAJ`AJ`AJڭ`AJ`AJϪ`AJ`AJֶ`AJҬ`AJ`AJ`AJ`AJ`A  b {-PJJJJXuRjaVV ValueResultVVerrui& \>:>:F><>>=>gG1Subtree delimiter token_treeso˱R%TokenId BUUUUnresolvedProcMacroU UUMbeU UURecursionOverflowPoisonedUUU ݹMDWuJҬ`A  b {-PJJJJXuRja>:>:F><>>=>gG1TETEBody TEҦaTEpatsTEbindingsTElabelsTEbinding_ownersTEaTE body_exprTE block_scopesT TE_cT Çz+c,>:>:F><>>=>gG1TETE BodySourceMap TEexpr_mapT TE expr_map_backT TEpat_mapT TE pat_map_backT TE label_mapT TElabel_map_backT TE field_mapT TEfield_map_backT TE expansionsT TE diagnosticsT 2S~0J`A  b {-PJJJJXuRj`>:>:F><>>=>gG1T:T:ImplDataT: T::T:`T:`T:attribute_callsf䕣G>:>:F><>>=>gG1 TGTG DefDiagnosticTG in_moduleTGQIZJ`A  c {-PJJJJXuRjcccc HLC)`--F----=ee TraitDatume،ebinderseeassociated_ty_idse well_known-t`J`A  c {-PJJJJXuRjTUTUTUTU TUTUTU TUTUTU TUTUTU TUTUTU TUTU`TU TUTUTU TUTUTU [ipr>:>:F><>>=>gG1bEbETraitEnvironmentbE7bEbEtraits_from_clausesbbEȒ)3tbJ`A  b {-PJJJJXuRjccc AssocTypeIdc s|n6`--F----=eeAssociatedTyDatumetrait_ide،eec Ze1`J`A  c {-PJJJJXuRj>:>:F><>>=>gG1b?b? TraitImplsb?b'otoJ`A  ccJ`A  c {-PJJJJXuRja>:>:F><>>=>gG1T;T; StaticDataT;T; T;7T;ӇaT; is_externbJ`A  b {-PJJJJXuRjaVVcVVcui& \ {-P## GreenNode##Ea6J>:>:F><>>=>gG1   l* " " " SyntaxError"  """  "" W%.nqJ`A  c {-PJJJJXuRj {-Pżac"c" Canonicalc"c"cŘ| Ki;Hcc InEnvironmentc environmentcgoal|%c#c#Goalc#`c9` {-Pe!e!e! e! e!e!Ambige! .R<`Jϵ`A  c {-PJJJJXuRja>:>:F><>>=>gG1T:T: FunctionData T:T:aT:aT:<T:7T:T:legacy_const_generics_indicesT: T:T4—OJ`A  c {-PJJJJXuRj`c!c!Bindersc!cc!cY0"`J`A  c {-PJJJJXuRj >:>:F><>>=>gG1T:T: TraitData T:T:`T:aT:aT: T:!skip_array_during_method_dispatchT:T:7T:c tK3J`A  b {-PJJJJXuRjc>:>:F><>>=>gG1 c!c!dc!cc!cY0"c!c!dc!cc!cY0"ccc Implementedc ccAliasEqc ccLifetimeOutlivesc cc TypeOutlivesc '`J`A  b {-PJJJJXuRjcccFnDefIdc ڵl>7W`--F----=ee FnDefDatume،e8ecw8`QJ`J`A  b {-PJJJJXuRja>:>:F><>>=>gG1T9T9EnumDataT9T9aT9 T97T9 91J`A  c {-PJJJJXuRjTTTTTTTT TTTT ConstBlockIdTT TTTTaTU  āV9c'c' Substitutionc'`c:?ǹ`   'wccGc`c%~`b.b.b. MirLowerErrorb. b.b. MirEvalErrorb. `9AJڱ`A  c {-PJJJJXuRj>:>:F><>>=>gG1 cJ`A  c {-PJJJJXuRja>:>:F><>>=>gG1b*b*InferenceResultb*method_resolutionsbb*field_resolutionsbb*variant_resolutionsbb*assoc_resolutionsbb*cb* type_of_exprb* type_of_patb*type_of_bindingb* type_of_rpitb*type_of_for_iteratorb*type_mismatchesbb*standard_typesbb*pat_adjustmentsb* binding_modesb*expr_adjustmentsb* closure_infobb*mutated_bindings_in_closure;vJ´`A  b {-PJJJJXuRjTVTVTVTV TVTVaTV TVTW`TW 1k.4>:>:F><>>=>gG1!!ArenaMap!!!!e]!!!>!!!x3'~T9T9 FieldDataT9T9 T97"qjm:::: ::: džAK" " AstPtr" >"" "Wfq" " TupleField" ".Pr@ 9" " d" >"" "Wfq" " RecordField" "&_J`A  b {-PJJJJXuRjTVTVTVTV TVTVFieldIdTV TVTVTV TVTVTV TVTVTV TVTVTV TVTVTV TVTVTV TVTVTV TVTV TV TVTV TV TVTV` TV TVTVGenericParamId TV TVTV` TV TVTV ExternCrateIdTV 0K2BT,T,T,AttrsT, To jWHPJ`A  b {-PJJJJXuRjcadJA  b {-PJJJJXuRj֝7Jˣ`A  b {-PJJJJXuRjJ`A  b {-PJJJJXuRja   'w>:>:F><>>=>gG1bEbEMirBodybE basic_blocksbElocalsbE start_blockbEownerbEbinding_localsbE param_localsbEclosures9zR{b@b@b@ConstEvalErrorb@ b@ b@b@ LayoutErrorb@ b@b@IncompleteExprb@b@IncompletePatternb@bATraitFunctionDefinitionbA bA bAbAUnresolvedNamebA bAbARecordLiteralWithoutPathbAbAUnresolvedMethodbA bAbAUnresolvedFieldbAbAUnsizedTemporary bA bAbAMissingFunctionDefinition bA bA bAbA TypeMismatch bA bAbA TypeError bA bAbA NotSupported bA bAbAContinueWithoutLoopbAbABreakWithoutLoopbAbAabAbAImplementationErrorbA bAbALangItemNotFoundbA bAbAMutatingRvaluebAbAUnresolvedLabelbAbAUnresolvedUpvarbA bAbAUnaccessableLocalbAbAGenericArgNotProvidedbA bA !eJ`A  b {-PJJJJXuRjb,b,b,b, b,b-b- b-b-b- zX}fadJ`A  b {-PJJJJXuRjdcc Environmentcclauses|`c%c%ProgramClausesc%`c&!.`J`A  b {-PJJJJXuRj`>:>:F><>>=>gG1T7T7 StructDataT7T7 variant_dataT7 T77T7:aË9cJ`A  c {-PJJJJXuRjd>:>:F><>>=>gG1!!d!!!!e]ddJ`A  b {-PJJJJXuRja>:>:F><>>=>gG1!!d!!!!e]!!!>!!!x3'~T9T9EnumVariantDataT9T9dT9tree_id8h tdJڭ`A  b {-PJJJJXuRjUUU HirFileIdU U 䊭>:>:F><>>=>gG1T/T/ItemTreeT/cTT/ top_levelTT/<TT/T}gSJԷ`A  c {-PJJJJXuRjadcJ`A  b {-PJJJJXuRjcccc 0,"`c'c' Variancesc'`cpC1s`J`A  b {-PJJJJXuRja {-P>:>:F><>>=>gG1c!c!dc!cc!cY0"bGbGReturnTypeImplTraitsbG impl_traitsb2 "J`A  כc {-PJJJJXuRjTMTMTMʼnTMכU0p   'wdJ`A  c {-PJJJJXuRjd>:>:F><>>=>gG1!!d!!!!e]d8J`A  c {-PJJJJXuRjb> b>b>Strb>b>Sliceb>b>ab>b>Neverb>b>RawPtrb> b>b>Scalarb> b>b>ʒb> b>b>Dynb> b>b> ForeignTypeb> b>b>Unit b>b> Unnameable b>b> b> GZV(x(x(zǢ(({(sIoJ`A  b {-PJJJJXuRjeeeAssociatedTyValueIde ywPZ`--F----=eeAssociatedTyValueeimpl_ideassociated_ty_ide0Z `J`A  b {-PJJJJXuRja>:>:F><>>=>gG1T:T:TraitAliasDataT:T:7Ve>J`A  b {-PJJJJXuRjb-b-b-b- b-b-ab- b-b-`b- b-b-b- b-b-b- b-b-b- 5XdJ`A  b {-PJJJJXuRjc>:>:F><>>=>gG1 c!c!dc!cc!cY0"cc GenericArgc`cK'b1`J`A  b {-PJJJJXuRjTQTQTQ ConstParamIdTQ T \w&y`J`A  c {-PJJJJXuRjUUU\U4 4RUtUt FileAstIdUv>U_Uw covariantU_3U "1"1"1 "1 "1"1 "1 Ѭ=!Tw>:>:F><>>=>gG1UUDeclarativeMacroExpanderUǏUdef_site_token_mapeW4JϪ`A  b {-PJJJJXuRj`dJ`A  b {-PJJJJXuRja8J`A  b {-PJJJJXuRjc[[Interned[arc[i;īT<T< GenericParamsT<type_or_constsT<T<where_predicatesηT{J`A  b {-PJJJJXuRja>:>:F><>>=>gG1!!d!!!!e]d" " d" >"" "WfqJް`A  c {-PJJJJXuRj>:>:F><>>=>gG1TLTL ImportMapTLTTL importablesTTLT_J`A  ғc {-PJJJJXuRjT=T=T=SizedT=T=UnsizeT=T= StructuralPeqT=T= StructuralTeqT=T=mT=T=iT=T=T=T=DiscriminantKindT=T= DiscriminantT=T= PointeeTrait T=T= T=T= DynMetadata T=T=Freeze T=T= FnPtrTrait T=T= FnPtrAddrT=T=DropT=T=DestructT=T= CoerceUnsizedT=T=DispatchFromDynT=T= TransmuteOptsT=T=TransmuteTraitT=T=AddT=T=SubT=T=MulT=T=DivT=T=RemT=T=NegT=T=NotT=T=BitXorT=T=BitAndT=T=BitOrT=T=ShlT=T=Shr T=T= AddAssign!T=T= SubAssign"T=T= MulAssign#T=T= DivAssign$T=T= RemAssign%T=T= BitXorAssign&T=T= BitAndAssign'T=T= BitOrAssign(T=T= ShlAssign)T=T= ShrAssign*T=T=+T=T=IndexMut,T=T= UnsafeCell-T=T=VaList.T=T=u/T=T=DerefMut0T=T= DerefTarget1T=T=2T=T=ϴ3T=T=FnMut4T>T>FnOnce5T>T> FnOnceOutput6T>T>7T>T>GeneratorState8T>T>9T>T>Unpin:T>T>;T>T><T>T>=T>T>CVoid>T>T>Panic?T>T> PanicNounwind@T>T>PanicFmtAT>T> PanicDisplayBT>T> ConstPanicFmtCT>T>PanicBoundsCheckDT>T>!PanicMisalignedPointerDereferenceET>T> PanicInfoFT>T> PanicLocationGT>T> PanicImplHT>T>PanicCannotUnwindIT>T> BeginPanicJT>T>FormatAlignmentKT>T>FormatArgumentLT>T>FormatArgumentsMT>T> FormatCountNT>T>FormatPlaceholderOT>T>FormatUnsafeArgPT>T>ExchangeMallocQT>T>BoxFreeRT>T> DropInPlaceST>T> AllocLayoutTT>T>StartUT>T> EhPersonalityVT>T>EhCatchTypeinfoWT>T>OwnedBoxXT>T> PhantomDataYT>T>7ZT>T> MaybeUninit[T>T> AlignOffset\T>T> Termination]T>T>^T>T>Ħa_T>T>SliceLen`T>T>TryTraitFromResidualaT>T>TryTraitFromOutputbT>T>TryTraitBranchcT>T>TryTraitFromYeetdT>T> PointerLikeeT>T>jfT>T>gT>T> PollReadyhT>T> PollPendingiT>T>jT>T> GetContextkT>T>klT>T> FuturePollmT>T>nT>T> OptionSomeoT>T> OptionNonepT>T>ResultOkqT>T> ResultErrrT>T>ControlFlowContinuesT>T>ControlFlowBreaktT?T?IntoFutureIntoFutureuT?T?IntoIterIntoItervT?T? IteratorNextwT?T?PinNewUncheckedxT?T?yT?T?zT?T?RangeInclusiveStruct{T?T?RangeInclusiveNew|T?T?}T?T?~T?T?T?T?T?T?e5NHL {-PT< T<T<aT< T<T<T< T<T<ImplDefT< T<T<T< T<T<T< T<T<T< T<T<T< T<T<T< T<T< EnumVariantT< 9|J`A  b {-PJJJJXuRja>:>:F><>>=>gG1T:T:MacroRulesDataT:T:w:%J`A  b {-PJJJJXuRjUU MacroFileU macro_call_idz>wVVcVVcui& \"5"5Parse"5green""5errors""5"j ²C>:>:F><>>=>gG1VVTokenMapVVVsynthetic_entriesrQg2cJ`A  b {-PJJJJXuRj`cJ`A  b {-PJJJJXuRjccc`c ket`--F----=ee ImplDatumepolarityece eassociated_ty_value_ids?n|`J`A  b {-PJJJJXuRjddJ`A  c {-PJJJJXuRj dcJ`A  c {-PJJJJXuRj>:>:F><>>=>gG1b?b? InherentImplsb?bb? invalid_implsbhY2J`A  ٢c {-PJJJJXuRjża՚eJ`A  b {-PJJJJXuRja>:>:F><>>=>gG1T;T; ConstDataT;T; T;7T; 焚|1J`A  ͂c {-PJJJJXuRjadJ`A  b {-PJJJJXuRja8J`A  b {-PJJJJXuRj >Jٮ`A  b {-PJJJJXuRj֝"5"5e"5e""5e""5"j ²CJ`A  b {-PJJJJXuRj>:>:F><>>=>gG1TJTJDefMap TJcTTJTTJmodulesTTJ7TTJTTJmacro_use_preludeTTJderive_helpers_in_scopeTTJcTTJT'mI3:J`A  b {-PJJJJXuRjd>:>:F><>>=>gG1U U AstIdMapU U_U U_U cU_>.JA  b {-PJJJJXuRj J`A  b {-PJJJJXuRj` {-Pc!c!dc!cc!cY0"ccTraitRefccc substitution#xoM `Jֶ`A  ơc {-PJJJJXuRja>:>:F><>>=>gG1T:T: Macro2DataT:T:7T:@BAEs=J`A  b {-PJJJJXuRj`>:>:F><>>=>gG1T;T; ProcMacroDataT;T;@cj=u!J`A  b {-PJJJJXuRjd>:>:F><>>=>gG1U U HygieneFrameU expansionUU aUU 7UU call_siteUU def_siteU)rۓEJ`A  b {-PJJJJXuRjadJţA  b {-PJJJJXuRj  J`A  b {-PJJJJXuRjd--F----=eeAdtDatumece،eel`J`A  Ќc {-PJJJJXuRjacJ`A  c {-PJJJJXuRja   'w>:>:F><>>=>gG1 bAbABorrowckResultbAmir_bodybAmutability_of_localsbAmoved_out_of_refL`ZdJ`A  b {-PJJJJXuRjTRTRTRaTR TRTR`TR TRTRaTR d5d   'w>:>:F><>>=>gG1^^LayoutS^^a^^ largest_niche^^ p\]b>b>b>RustcEnumVariantIdxb> ˩zڝb>b>b> UserErrorb> b>b> SizeOverflowb>b>TargetLayoutNotAvailableb>b>HasPlaceholderb>b> HasErrorTypeb>b>NotImplementedb>b>p`tI[ZJ`A  c {-PJJJJXuRjac!c!dc!cc!cY0"bFbF CallableSigbFparams_and_returnbbF is_varargsbbF beLJ`A  c {-PJJJJXuRjżacJ˫`A  c {-PJJJJXuRj {-P>:>:F><>>=>gG1^^TargetDataLayout^endian^i1_align^i8_align^ i16_align^ i32_align^ i64_align^ i128_align^ f32_align^ f64_align^ pointer_size^ pointer_align^aggregate_align^ vector_align^instruction_address_space^c_enum_min_sizeyþJ`A  b {-PJJJJXuRja>:>:F><>>=>gG1TDTD ExprScopesTDscopesTTD scope_entriesTTD scope_by_exprT`z2J`A  c {-PJJJJXuRjd>:>:F><>>=>gG1!!d!!!!e]ddJ`A  b {-PJJJJXuRj`>:>:F><>>=>gG1T:T: TypeAliasDataT:T: T:7T:cT: T: T:`ǵ>(J`A  Ěc {-PJJJJXuRj>:>:F><>>=>gG1T=T= LangItemsT=`T K`fJ`A  b {-PJJJJXuRjżaeJAJţAJAJţAJAJA a-ˉ/8X b.`-ˉ/8X a.ˉ/8Xa .ˉ/8XbȄb.ˉ/8X`.ˉ/8Xbج .ˉ/8X`-ˉ/8Xab-ˉ/8Xaa.ˉ/8Xb bb-`bb.ˉ/8XĚbb.ebb-`bb.ebb-`bb*Dα/Ƿ` `Ƿ*11R101010101010+qg A9 *`ː`/``Ғ`` ``Ғ`*ܽܽ TakeWhile߽3flag3 3 IҢ5ʑ  ``*Dα/Ƿ`e`Ƿ*Dα/Ƿ`e`Ƿ*aJţA  Яaa A*aJAeܶae* » )`L ,!.  R Ξ ZP,  *ǻǻʻ*˻*Au`   վ  *ˉ/8Xbb*  *aJAee*ǻǻʻ*˻*Au5 3 ՛` ؾ9ܽܽe߽3e3 3 IҢ » )`L ,!.eؾ  eee el c utye־ee*e3 e9ܽܽe߽3e3 3 IҢ » )`L ,!.eeeeeee*  33b3030[B"i3 e   'we e*e :  `l c uty e*`ː`*e *e *Dα*  0`011R101010101010+qg A`0e ֝``5++++}xab++++}xaa   n``g«an``g`n``gaeneneenmm CollectResultm mm total_lenmminitialized_lenmminvariant_lifetimem^٣s enmmem mmemmemmem^٣s`neennmmem mmemmemmem^٣s eneneneennennmm/m/ DrainProducerm/ m.DCzmmMapWithConsumermΞmmmmmap_opm2fmmγcm mmmmmEz    n n FnContextn migratednn Ȉn*>ec m4m4LengthSplitterm4mm4minmי}d"eemeeecceeeee  nn WorkerThreadnworkernnstealernnfifonnnnrngnnregistryn/fi/eeee eenennmemmemΞmmmmem2fc   eeceeemeeecceeeee eeeee eeenennnm)a aaaa eenm)aeeee eeeee eeenenemmmEnumerateProducermΞmmm/*(bmm MapConsumermΞmmemZwGbca eecceee eeenennmeèfceeeeee eeefe eefnenee eeeneneeeenennmemmemΞmmemZwGbĴca eeceefmeffcceefee ee׃ffe eefnene׃f ee׃fnennmm/m/em/ m.DCz mmemΞmmmmem2fmmγcm mmmmmEz    eeceffmffΆfcceffee eeffe eefnennmfmmemΞmmmmem2fc   eeceffmffÈfcceffee ee߈ffe eefnenfeffnenfefɇfnennnm)aeaa  ;aefnm)aeĊfefeffeefnenfeffneneeeeneneeeenenfeffnenee eeenenfeefnenef eefnene߈f ee߈fnnf efnnefeneۇf eۇfnee eenefffnef efneȄf eȄfnef efnee eeneeЏfenfefnef efnefffnefffneNjffNjfnefffnee eenef efnef efnfefnef efneЉfےfЉfnef efneیf eیfnefffnefffnnn SpinLatchn core_latchnnenntarget_worker_indexnncrossnJՠ/fenfیfenfȄfenffenfNjfenffenfeennnLatchRefnnnn2cKfxnn LockLatchnmnnn[FوLfenffenffenffenffnffenffenffenffenfeenffnfeenfۇfenffenfeenffenfЉfenfeenffenfیfenffnfȄfenffenffenffnffenfeenffenffenffenfeenffenfЉfenfeenffenfیfenffenffenffnffenfeenfۇfenffenffenfȄfenffenffnffenfNjfenfۇfenffenfЉfenffenffenfNjfenffenffenffenfیfenfeenffenffnffenffenffenfȄfenfeenfeenffenffnffenfeenffen}nnStackJobnlatchnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfeen}nnfnfnn nan na\sfۇfen}nnfnfnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfیfen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfNjfen}nnfnfnn nan na\sfeen}nnfnfnn nan na\sfeen}nnfnfnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfЉfen}nnfnfnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfeen}nnfnfnn nan na\sffn}nnfnfnn nan na\sffen}nnfnfnn nan na\sffn}nnfnfnn nan na\sffen}nnfnfnn nan na\sffen}nnfnfnn nan na\sfȄfennfe nnnFlushn ThreadStartnennterminate_addrnnThreadTerminatenenn ThreadIdlenenn latch_addrnnThreadFoundWorknennyieldsnnThreadSawLatchSetnennfnn ThreadSleepynenn jobs_counternnThreadSleepInterruptedByLatchnennfnnThreadSleepInterruptedByJobnennThreadSleeping nennfnn ThreadAwoken nennfnn ThreadNotify nenn JobPushed nenn JobPopped nenn JobStolennennvictimnn JobsInjectednnn JobUninjectednenn JobBroadcastnnnJobThreadCountsnennnum_idlenn num_sleepersn:ADžnnfeѲfnnfeѲfnnfeѲfnneeѲfnneeѲfnnfeѲfnneeѲfnffeenfeeenf׃feenffneeeenf߈feeneeeeneenfeeéf݁fnffefneeeeneeeeeenffeeffneeeeeenf߈feeffnf׃feeffnefneenfneenefnefnenefnefffnefffnefffneefeneefeneeenfefnefffneenfneneeneene߈fne׃fnefne׃fلffne߈fffneff΍fneeffneeffnfffnefЎfneeffnffneenenfnenfneeeneeenfefnfeߊfnfnnefffennefffenneff͓fennfefnnefffennefffennefffennefffennfefnneef’fenneeЏffenneNjfffennefffennefffennefffenneeffenneЉfےffenneeffenneefnnefےffenneffєfenneeffenneۇfffenneȄfffennefffenneffƑfennefЏf܏fennefffenneefːfennfefnneیfffennefffeneenfenfeneenfeneenfenfenfe  fef nnRegistry nloggernn thread_infosnnsleepnn injected_jobsnn broadcastsnnnn start_handlernn exit_handlernnterminate_countnhx nfe feffnfe feffneefefnfe feffnee feefnfe feffnee feefnfeѲfnfeffnfeѲfnfeѲfneeeeneeѲfneeeeneeѲfnfeffnfeffneeeenfeѲfnfeefnfefɇfneeѲfnfeѲfnfeneenfeneenfeneenfenfeneeeenfeffneeeenfeffnfefɇfnfeefnfeffneeeenfenfenfeneeneenfenfeneeneenfenfeneenfenfeneenfe)NNNMNMNȈMjg(+)NNNMNMNȈMjg(+̲a)11R101010101010+qg A. » )`L ,!.aeJA e  b. » )`L ,!.aeJţAf  b. » )`L ,!.aeJAf  b.++++}x`   bb.ܽܽe߽3e3 3 IҢ¼¼ SkipWhileż1Ƽe1Ǽ 176`f   bbMMM MK)c   TimSortRunJ JDr)c fK)cf)cf3 55 GenericShunt5&5 &M|.8vb4a4aa3ǻǻʻ*˻*Auǻǻʻ*˻*Auc553 ++++}xa  3    Ξ CR 4 a3 » )`L ,!.e 3 3ǻǻʻ*˻*AuײDb4aa4bb4übüb4bbĺbb``4aabb4übüb``4aa4bbbbĺbb4bb4aa4bb m   e am  mm ListVecFolderm mPZ  am  e am   mmfm mPZ  am    m   m    aam   aam   e m   f m  f m  e «aa`/55 m m m`m m m`m m m`955+`+``Ғ``+````+````+`ݯ `+`  + aa+a  +`+b ج + ab+aa+bbȄb+`+ab+`  ךbb+`  bb+ĚВbb+b  bb+`  bb+Ěbb+``Ғ`+b  +a  +```+`+```   *dOOOO>q6ްdcJ`Ad9ǻǻʻ*˻*Auff d*dOOOO>q6ްcbJ`Ad9ǻǻʻ*˻*Auff d*eOOOO>q6ް bJţAe9ǻǻʻ*˻*Auff e*dOOOO>q6ްdcJ`Ad9ǻǻʻ*˻*Auff d*aϯ9 ֝ǻǻʻ*˻*Auaϯ```f*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Auff d*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Auff d*eOOOO>q6ްża٢cJ`Ae9ǻǻʻ*˻*Auˀgg e*dOOOO>q6ްacJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ް`bJϪ`Ad9ǻǻʻ*˻*AuÃgg d*eOOOO>q6ްcJ`Aՙe9ǻǻʻ*˻*Augg e*̓eOOOO>q6ް`bJ`Ae9ǻǻʻ*˻*Augg ̓e*ƁdOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Augg Ɓd*dOOOO>q6ްdbJڭ`Ad9ǻǻʻ*˻*Augg d*¼dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg ¼d*eOOOO>q6ްdcJ`Ae9ǻǻʻ*˻*Augߌg e*cOOOO>q6ްcbJ`Ac9ǻǻʻ*˻*Augg c*dOOOO>q6ްcJڱ`Aלd9ǻǻʻ*˻*Aug׏g d*dOOOO>q6ްcbJ`Ad9ǻǻʻ*˻*Auߐgg d*eOOOO>q6ްabJ`Ae9ǻǻʻ*˻*Augϒg e*```*cOOOO>q6ްccJ`Ac9ǻǻʻ*˻*Augg c*eOOOO>q6ްĚcJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްacJԷ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Augژg d*eOOOO>q6ްebJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdcJ`Ad9ǻǻʻ*˻*Augқg d*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Auڜgg d*eOOOO>q6ް bJ`Ae9ǻǻʻ*˻*Augʞg e*eOOOO>q6ްabJ`Aôe9ǻǻʻ*˻*Auҟgg e*eOOOO>q6ްabJ`Aàe9ǻǻʻ*˻*Aug¡g e*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Auʢgg d*eOOOO>q6ްaơcJֶ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdcJ`Ad9ǻǻʻ*˻*Au¥gg d* ```*״ײD " ״9״ ״*dOOOO>q6ް`bJ`Ad9ǻǻʻ*˻*Auݧgg d*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augͩg d*cOOOO>q6ްacJ`Ac9ǻǻʻ*˻*Auժgg c*dOOOO>q6ްcJް`Ad9ǻǻʻ*˻*AugŬg d*dOOOO>q6ްcbJ`Ad9ǻǻʻ*˻*Auͭgg d*зeOOOO>q6ްebJ`Ae9ǻǻʻ*˻*Augg зe*eOOOO>q6ްcJ˫`Ae9ǻǻʻ*˻*AuŰgg e*eOOOO>q6ްbJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*"5"5 "5""5 "Im+(5595  g ŵg*cOOOO>q6ްabJ`Ac9ǻǻʻ*˻*Aug۶gg* `  /    ƈ`  ƈ` *eOOOO>q6ް cJ`Ae9ǻǻʻ*˻*Aug۸g e*ɲeOOOO>q6ްdbJ`Ae9ǻǻʻ*˻*Augg ɲe*°eOOOO>q6ް`bJ`Ae9ǻǻʻ*˻*Augӻg °e*cOOOO>q6ްccJ`Ac9ǻǻʻ*˻*Auۼgg c*cOOOO>q6ްcJ`Ac9ǻǻʻ*˻*Aug˾g c*a3 333a3U`qbb9 ״ǻǻʻ*˻*Auӿg     >  XП+9I״ g* ``/ ``܌``܌``*cOOOO>q6ްabJҬ`Ac9ǻǻʻ*˻*Augg c*dOOOO>q6ްabJ`Aֱd9ǻǻʻ*˻*Augg d*ՉdOOOO>q6ްacJϵ`Ad9ǻǻʻ*˻*Augg Չd*eOOOO>q6ްacJ`Aƺe9ǻǻʻ*˻*Augg e*dOOOO>q6ްdғcJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ްdcJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ް֝bJAd9ǻǻʻ*˻*Augg d*dOOOO>q6ްdכcJ`Ad9ǻǻʻ*˻*Augg d*eOOOO>q6ްżabJ`Ae9ǻǻʻ*˻*Augg e*УeOOOO>q6ް֝bJٮ`Ae9ǻǻʻ*˻*Augg Уe*eOOOO>q6ްdbJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ް cJ`Ad9ǻǻʻ*˻*Augg d*eOOOO>q6ްɾebJ`Aͽe9ǻǻʻ*˻*Augg e*eOOOO>q6ްaЌcJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdbJ´`Ad9ǻǻʻ*˻*Augg d*eOOOO>q6ްebJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްabJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*cOOOO>q6ްacJ`Ac9ǻǻʻ*˻*Augg c*```*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*dOOOO>q6ް`cJ`Ad9ǻǻʻ*˻*Augg d*eOOOO>q6ްbJAe9ǻǻʻ*˻*Augg e*dOOOO>q6ްbJˣ`Ad9ǻǻʻ*˻*Augg d*eOOOO>q6ްa͂cJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*```*eOOOO>q6ްabJ`Ae9ǻǻʻ*˻*Augg e*dOOOO>q6ްdbJ`Ad9ǻǻʻ*˻*Augg d*cOOOO>q6ް`bJ`Ac9ǻǻʻ*˻*Augg c*dOOOO>q6ް˙dcJ`AϘd9ǻǻʻ*˻*Augg d*eOOOO>q6ްacJ`Ae9ǻǻʻ*˻*Augg e*eOOOO>q6ްżacJ`Ae9ǻǻʻ*˻*Augg e*۝eOOOO>q6ްabJ`Ae9ǻǻʻ*˻*Augg ۝e*ٗeOOOO>q6ްdbJ`Ae9ǻǻʻ*˻*Augg ٗe*eOOOO>q6ް`bJ`Ae9ǻǻʻ*˻*Augg e* ӑ``/ ``````*eOOOO>q6ް`bJ`Ae9ǻǻʻ*˻*Augg e*=*״gg bgg* "5"5 "5""5 "Im+(  *b*llDlDllDll:ll5l€"c*ײDb*b*f5* *6ҟ`6* Вbb*վ ` :վ  e վ l c utyվ gg* ` /   b b  bb b*ÎNNNMNMNȈMjg(+:Î Îl c utyÎg* "ŵ   {-P:"ŵ  l c utyh܁h*5 ) eeeee*=: bbhb* "ļԀh:"ļhҁhh܁h* bb* ` /   b b gbb b*5 ) eeeee* ` /   b bhb b*ˉ/8XbbbbǞb*5c5:55 5b5b* "Ԁh:"hҁhh܁h*aʌbb/ abbb abb bb*ײDb*aϯ*``*f5*=*``* ``*``*ӿg*5c5* ӑ``* ``1   ץb1f ךbbeehӋ5b5ʑ ``eؾe35ʑ ``ǜ`3f bb3eؾee3eee3hӋ5bb3 bӋ5bbb3 eeee3 eؾeee3  b bb͛b3  `ǜ`ʑ ``Ǟ`8"  8Ț`MMM AefAfAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAefAfAefAfAfAefAefAefׁ֝֝֝,eӯb,ӯb,``,```,```,ϕ```,```ߖ`,``˜`,``Й``,````,ڈ`,eb,e ,eĚ,e11R101010101010+qg AŇ,e ,eӯb,eĚ,ea,ea,`ڈ`ךbb,`ڈ`bb,eВbb,e bb,ebb,`ڈ`bb,ڈ`bךbܛbb,bbbb,bВbbb, bbbb,ڈ`bbbb,ڈ`bbbb,ϕ``,e ,``,e ,eh,``m  e m   f m   c m  c m  e m   c m   f m  c m  e m   c m   f m  c #444040bW`(m`m m m`m m m m`m mfaemeaemeemeemf fmf f«aa`J J7L)J"J$J%EmptyJ&J'FullJ( JJ)J*DeadrJJ WaitResultJJFJcycleJF.X܌  AL)J"J$J%hJ&J'hJ( JJ)J*РhrJJhJJFJhJF.X܌ 7A   ` ` ` ݍ` ֝f ֝` ֝` ֝b6O4- ԝ ` ֝` ` ݍ` ״g ֝`  ` ֝b6O4-  ֝``` ݍ``` ``` ֝h    >  XП+9I֝ ֝``` ֝f`` ״ggg ֝``` ``` ֝```  ``` ֝h``(KffKff#@ 444040bW`( b@ Ӭhb 55f5&5 &M|.8vbӬhKffKffb                 зױѲ:9?<B~߲NMS  "b6O4- "b"a"ba"aa"" "ļ"ŵ""ŵԀh"ļԀh"ŵh"h"Ԁh"ļh"վ "ŵ""ļ"  " " ״"  " " վ "׎h"њ`" 6"ן6"ן6cc" "  "  "  "  "  ֝` ֝`44 ״g ֝` ֝f ֝h ֝` ֝h44C`C`C` C`؟C`mam«am`11 D J J CycleErrorJ hJJ changed_atJJ durabilityJ\ƴ|S%AhDԝDDbDDeD7hhD)uIMF@h2c2ž2b22b2b22b2b2b2ݍ2c22c2c2b2b2b2c2b2b2b2Ќc2c2c2c2c2c2b2b2c2c2٢c2c2b22Ěc22c2b2c2b2b2b2c2c2b2b2͂c2c2b2b2b2c2b2c2b2c22b2b2b2c2b2ғc22b2b2b2b2b2b2c2b252c2b2b2c2b2b2b2b2b2b22כc2b22b2ơc2b2`2b2c2b2c2b22ba͌a"m`m m a`«aUUϊbUŵUļUbU XXX XXXp+цUbhUŵhUϊbhUļhUUUUUļUUŵUϊbUU UUUļU """"YIBhU UhU UU ddU:::: ::: džAK"2"2"2"2 "2"2G"2 YٌqC"3"3"3"3 "3"3ȓ"3 XQ=+U UhU bU """"5ZJ&hUŵUhUU5UU:::: ::: džAKdŵUhUUU USSSNamedS SSPosS < UU "!"!"!"Z0(k؊hUhUU èdèdUhbUhUUhUhU5̷5U """"ߔCIhUhUhUϊbU "!"!"!"LUhUUhUhhUhUhUhUhUèdUUhUUUUhUUhUUèdUhU̷5UUhUhUUbUUUdU!1c19c1<ccc1=c1?cc1@cmammCallbackm6m;uJ;!mmhmmmconsumerm߂ͦ ebmammhm6m;uJ;!mmhmmmhm߂ͦ fbmahbmahb$`eg$deg$adg$ g$`cg$acg$aaa$ddg$adf$acg$`dg$ddg$aaa$```$aaa$ddf$ddg$aaa$ddg$aaa$a8g$żacg$`dg$aaa$a8g$cdg$aaa$deg$ddg$`dg$aaa$ddȋg$dg$```$aeߤg$adg$םdg$adf$aaa$żaeg$֝ a$aƻeg$֝eg$adg$eӕeg$ a$ddf$cdf$ddg$ża՚eg$ccg$aa$eeg$eg$aaa$aaa$ddg$acg$ddg$˙ddg$eg$ddg$cc˔g$՚e؅g$ccg$`ała$eeg$g$`cg$`eg$ aa$ɾeeg$```$ eg$ddg$adg$cdg$֝a$ddg$ażaa$adg$aeg$ a$ >g$ddg$adЈg$adg$a a$```$aֲdg$```$ dg$`$֝7g$aeg$eڲg$aaNJa$adg$ad×g$acg$cg$`eg$aaa$d`g$aǚaa$deg$acg$ddg$  f$aeg$aeg$dҊeg$ddgG  G G G SubsequenceG subseqG3FG hG hG hG hG h G G TransitionG inpG G addrJa:, G hG h  GGGG StreamOutputG G B+GGGStreamG G ȚthhG G G G hG GGGG StreamBuilderG G E#hhGhh ׁ֝״>ׁ֝֝֝֝֝֝``a```a`a`֝``a`a`a`a`a`a`a`ׁ֝a`a`a```a```a```ׁׁ֝֝֝֝ ֝ ֝         ݍݍ   &@@@AssertUnwindSafeA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*f&@@@iA R:e_0*fe&@@@iA R:e_0*f&@@@iA R:e_0*f&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*f&@@@iA R:e_0*fe&@@@iA R:e_0*fe&@@@iA R:e_0*fefnfeffefnfeffefneeffefnfeffefneeffefnfeffefneeffefnfeffefiefiefiefiefiefiefiefޓie9ei9ei9ei9ei9ei9ei9ei9eِi9ei9ei9ei9eёi9ei9i9ei9ei9eΊi9e̓i9ei9eވi9ei9ei9ei9ei9eƋi9e։i9i9ei9ei9ńi9ei9i9ie9ie9ie9ie9ie9ie9ёie9ie9ie9։ie9Ƌie9ie9ie9ie9ńi9ie9ވie9ِie9ie9ie9Ίie9̓ie9ie9ie9ie9ie9i9ie9ie9i9i9ie9ie9ie9ie9ie9i9ie9ńi9։ie9ie9ie9ie9ie9ie9ie9i9ie9ie9ie9ie9ie9i9ie9ie9ёie9Ίie9ie9Ƌie9ِie9ވie9ie9̓ie9ieǨžb>bbaׁbΚaֈ c a bbaԂ,ę,UUUnescapedDisplayUUų n=,״,,UUxUUUU@ana[G hIIžIaIaL #  77Ԗ״״nn RegistryIdnhn^PsYiܟܟؘؘ``FaFaF ΞJ3w֝F fF aNNNMNMNȈMjg(+aF NNNMNMNȈMjg(+žF aNNNMNMNȈMjg(+aF ĶC 444040bW`(J J PromiseJ fulfilledJJslotJߎ^h *#*#*&>* *'* f<| LLRawMutexL L`@Q<0(x(x(zǢ(({(sIoi **RwLockUpgradableReadGuard*rwlock***J(`Ǣ` 444040bW`(J J iJiJJiJߎ^h ***i***9l`` **i*i***J(`٠` ***i***9l`Ǣ` **i*i***J(`` *#*#*&>* *'* f<| i(x(x(zǢ(({(sIoi ***i***9l`٠` e e e               JJ PanicGuardJ`JFJiJFJmemoJFJCJFc]_PA i JJiJ`JFJiJFJiJFJCJFc]_PţA m)m)m) left_startm(m)left_endm(m) right_startm(m) right_endm(m)destm(gu-c i i JJiJ`JFJiJFJiJFJCJFc]_PA m)m) CopyOnDropm)ڤm(m)im(m)m(2IM ] 444040bW`(b 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(٢c 444040bW`(ғc 444040bW`(c b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b b 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(ơc 444040bW`(b 444040bW`(b 444040bW`(b  444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b ` 444040bW`(b 444040bW`(b 444040bW`(c NNIterMutNMNMNȈM-bD 444040bW`(b 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(͂c 444040bW`(c NNiNMNMNȈM-bD  b 444040bW`(c h 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(c 444040bW`(b ٠` 444040bW`(b h 444040bW`(c 444040bW`(Ěc 444040bW`(b 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(b 444040bW`(c 444040bW`(c 444040bW`(b 444040bW`(c 444040bW`(b Ǣ` 444040bW`(b 444040bW`(כc 444040bW`(Ќc 444040bW`(b    b     a  aa``bךbbb`` J Ji```` e55  bb666``bΖbbbbВb Яae`` W     ``66bieߔ`ԍ`ie bbi  aa b aiiۯaaab a ج  ԄbȄb  aabb beee`` `ڝ``eeehRopt>$!],jgԝ  {-P֖<m)m) MergeHolem) m(m)m(m)im(óh9A]Pԝ  R  Y՝JJ StampedValueJJJhJJhJ`S/U7KKRunVecKbuf_ptrJKǢJKJK run_alloc_fnJKrun_dealloc_fnJ : #ff ##i&'(ܜ 400Drain1 tail_start01tail_len0101 0pe!ڒ {-PJJ InsertionHoleJڤJJiJk2 Ǟb w wRawTable z  { MSKM  w wj z  { MSKMԝed:``babÝbb٠`«a    RawIntoIter    allocation     FZ,iԝ  j   j     FZ,i` m)m)Ąjm)ڤm(m)im(oC*f11R101010101010+qg A {-PJ}J}iJJFJiJF;OgRΞOP&268֝""d"_nknmnnnonpnq nnrnsdnt nVvde {-PhJJĄjJڤJJiJk2ffh`<aa {-P f##i&'(ܜ 4`--Weak--5H=2R>aذbKKiK JKJKiJ"NCbGx  R  2>2ArcInner>4>>5>Lf'ͦ##i&'(ܜ 4 aeb--܎j--5H=2R>ae811R101010101010+qg AͰff--֐j-strong--weak---/ T=a444040bW`(a""d"_Ǣ`hfhdbee --֐j-j--ēj---/ T=a--F----=A`JJjJJJhJJhJ`S/U --܎j--5H=2R>Al c uty w wj z  { MSKM` {-Pe {-Pe--F----=AeC޻޻Fuse->;]e޻޻j->;]e##i&'(ܜ 4--܎j--5H=2R>A {-P8 w wj z  { MSKM)R)ROnceCell)T)EHr.##i&'(ܜ 4a  j   j     FZ,i`i--֐j-j--ēj---/ T=Ammfm mPZ` fe5--֐j-j--ēj---/ T=A5 {-Pi   'w    ys;\:ݍ {-Pi w wj z  { MSKM 444040bW`(abfee33b3030[B"i  {-P {-Pj    ys;\:̓e    ys;\:    ys;\:e۝edhJJĄjJڤJJiJk2de w wj z  { MSKMecлл FlattenCompatӻ+Ի frontiter+ջbackiter+L VEeĚллjӻ+ԻŨj+ջ٨j+L VEeĚ""d"_`d##i&'(ܜ 4a33InPlaceDstBufDrop303030/k ""d"_٠` {-PKKiK JKJKiJ"NCbGxeeb 5 w wj z  { MSKM:eb/a`aa aaa`Չddee<°ee¥A    >  XП+9IdAJJLruJ green_zoneJJJ'n ќbba   >  XП+9IedԺi--܎j--5H=2R>bl c uty5   >  XП+9Iظi d  {-P    ys;\: eceУeJJLruDataJ end_red_zoneJJend_yellow_zoneJJend_green_zoneJJeJJJ컜E7b --F----=C""d"_aeɲee --֐j-j--ēj---/ T=b--܎j--5H=2R>C {-P O O BucketO OO OO Oxa {-Pje`##i&'(ܜ 4  Enumerate))məA3fO O jO OO OO OxaUUU\U4 4Rhd444040bW`(5h prevb݉$S!#c`--֐j-j--ēj---/ T=C b ϻjb݉$S!#c«a w wj z  { MSKMjde--F----=JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 `A {-P iNjf"""Dropper"  L KK/h77R7Ǣ p} <`--܎j--5H=2R>j677R7Ǣ p} <«a   >  XП+9I ***>***ThNx@9`Ǣ`d je##i&'(ܜ 45--F----=JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 `A {-PNjfۇfe--܎j--5H=2R>j  j¼dJJjJjJJJ'n ќb--F----=JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 ˣ`AbJJjJjJJJ'n ќb {-Pۇf""d"_jb--܎j--5H=2R>j--܎j--5H=2R>bf##i&'(ܜ 46--܎j--5H=2R>b    ys;\:UUU\U4 4Rhe j444040bW`(AJJܳjJjJJjJJjJJeJJJ컜E7bif""d"_j--F----=¥AOO IndexMapCoreO O?OO?%A adJJܳjJjJJjJJjJJeJJJ컜E7b--F----=A--֐j-j--ēj---/ T=b--܎j--5H=2R>¥Ai i {-Pff--F----=JJ̤AJAJ.JAJ.JAJ.JAJ.%葖 `A--֐j-j--ēj---/ T=b--܎j--5H=2R>A11R101010101010+qg A5OOjO O?OO?%A a***i***Bu!mN`Ǣ`--܎j--5H=2R>je(( DropGuard( ((num_init(222j2 1 ]bF,enknmnnnonpnq nnrnsdnt nVvdeٗe bnknmnnnonpnq nnrnsdnt nVvdeiif""d"_j222j2 1 ]bF$!],jg `222j2 1 ]bF***ThNx@9`` {-Pfe""d"_Ҵj    >  XП+9I***>***ThNx@9`٠`ic ##i&'(ܜ 4jڈ` {-Pe""d"_j11R101010101010+qg Ab11R101010101010+qg AbJ J BlockingFutureJ iJ uhe222j2 1 ]bFj11R101010101010+qg AЌc11R101010101010+qg Abǻǻʻ*˻*Aug   'wjh66222j2 1 ]bF2>2֐j>4>>5>Lf'  {-Pef##i&'(ܜ 4b11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Abf77R7Ǣ p} <a##i&'(ܜ 4b11R101010101010+qg AĚc11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Acb {-Pj)|)|ת:)cell)E)init)EҦjgPb)|)|ת:)јk)E)ޘk)EҦjgPbߪ)|)|ת:)јk)E)ޘk)EҦjgPbnknmnnnonpnq nnrnsdnt nVvde--F----=j11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ac11R101010101010+qg Ac11R101010101010+qg Acnknmnnnonpnq nnrnsdnt nVvded {-Pf""d"_k222j2 1 ]bFj11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ab11R101010101010+qg Ac11R101010101010+qg Ac""d"_j {-P ii11R101010101010+qg Ab11R101010101010+qg Ac""d"_jif222j2 1 ]bF  XП+9IO O jO OO OO Oxbcdbe222j2 1 ]bF* *'* f<| iҴj``--܎j--5H=2R>jdޮib``c k   l*kǫf--֐j-j--ēj---/ T=jOO>OOO>O>uaSK 9a***mutex* ** Ýٱ%iiҴj222j2 1 ]bFOOO>O>uaSK 9a`c((R(((ɘ(((3&" ii##i&'(ܜ 4ieeeJJjJJJhJJhJ`S/U f""d"_k   >  XП+9Iׁ֝OOjO O?OO?%A b""d"_kO O jO OO OO Ox bˉ/8Xҁbbd`ԩf444040bW`(knknmnnnonpnq nnrnsdnt nVvdeac *#*#*&>* *'* f<| ijd*#*#*&>* *'* f<| ije  {-Pkedf k {-Pkd***k* ** Ýٱ%iij##i&'(ܜ 4k*#*#*&>* *'* f<| ih***k* ** Ýٱ%iijd""d"_k`e((R(((ɘ(((3&" iŰi   l*kkOOjO O?OO?%A  b***k* ** Ýٱ%iihfeٿٿ`ܿ8ݿ`8tDΎhǻǻʻ*˻*Aug5ǻǻʻ*˻*Aug 444040bW`(k""d"_kf   l*euninit  ?+˼<jk""d"_k`f   l*ek  ?+˼<ͽjk""d"_i {-Pe {-Pe""d"_kaj  |R&%[`fj  |R&%[«a##i&'(ܜ 4kb*#*#*&>* *'* f<| ih`eOO>OOO>O>uaSK 9֝b`""d"_k***k* ** Ýٱ%iihe222j2 1 ]bF;]e޻޻j->;]edee""d"_Űiefзe {-Pkeedced222j2 1 ]bFOOO>O>uaSK 9bƁdd222j2 1 ]bF***ThNx@9`k222j2 1 ]bF***ThNx@9`kj  |R&%[a222j2 1 ]bF;]`5222j2 1 ]bF***ThNx@9`k222j2 1 ]bFOOO>O>uaSK 9 b222j2 1 ]bF;]eˉ/8Xaa***i***9l`km6m6MapWithm6Ξmm6mm6em(E5ۂ%m2m2m2m0ao   nknmnnnonpnq nnrnsdnt nVvde***i***Bu!mN`knknmnnnonpnq nnrnsdnt nVvdeid""d"_km6m6lm6Ξmm6mm6em(E5ۂ%i  de***k* ** Ýٱ%iiŰieea`ллjӻ+ԻŨj+ջ٨j+L VEeh`++++}xb ج bmmhmmmhm߂ͦ emmhmmmhm߂ͦ fˉ/8Xbbллjӻ+ԻŨj+ջ٨j+L VEeӯb""d"_l`***>***ThNx@9`k`a""d"_l""d"_ld***i***9l`k***i***Bu!mN`kmm MapWithFoldermΞmmmmem<f  eллjӻ+ԻŨj+ջ٨j+L VE` {-P` {-P`nknmnnnonpnq nnrnsdnt nVvde`***>***ThNx@9`knknmnnnonpnq nnrnsdnt nVvdeÓbmmlmΞmmmmem<e  ae eee`޻޻j->;]` {-P`***i***9l`kf***i***Bu!mN`k֐afллjӻ+ԻŨj+ջ٨j+L VEe ллjӻ+ԻŨj+ջ٨j+L VEe ǻǻʻ*˻*AuײDg***>***ThNx@9`l » )`L ,!.ee***i***9l`l {-P`***i***Bu!mN`l""d"_ֱlmmlmΞmmmmem<f  nknmnnnonpnq nnrnsdnt nVvde""d"_l {-P`eedӿgd޻޻j->;]`mmlmΞmmmmem<e  eee޻޻j->;]`fmmhmmmhm߂ͦ f""d"_޼lݣ8 {-Pe {-Peϕ`nknmnnnonpnq nnrnsdnt nVvde޻޻j->;]e޻޻j->;]ea7`599GroupBy9999-Wg>Oa55mmhmmmhm߂ͦ ef߈fcbhaml  mmγcm mmmmmEz mmem mmemmemmem^٣s l {-Pϕ`""d"_l5eeA޻޻j->;]ϕ`ag""RefMut""borrow"=Cզca!!!l!amZcaܽܽe߽3e3 3 IҢhӋ5""d"_cKKBufGuardKЁjJKǢJKelem_dealloc_fnJۢsO)"cǻǻʻ*˻*Auhbeллjӻ+ԻŨj+ջ٨j+L VE`` {-P5eԖml  mmγcm mmmmmEz mmem mmemmemmem^٣s la`i imm MapFoldermΞmmemdr jafmmlmΞmmemdr eaa3 333a3U`q``ffg {-P`99 ZipLongest999 9Ρ9J``  fллjӻ+ԻŨj+ջ٨j+L VEϕ``Ԃӛ֡ллjӻ+ԻŨj+ջ٨j+L VE`ڈ``eeb {-Pafܮf i {-P`iieařͦJJ LocalStateJ query_stackJU#j>t(ллjӻ+ԻŨj+ջ٨j+L VEee Inspect..}sf bKKlKЁjJKǢJKlJۢsO)"c/a afnknmnnnonpnq nnrnsdnt nVvdaSourceDatabaseGroupStorage__parseR8yT$b7b7HirDatabaseGroupStorage__5b7 infer_queryb7޻eb7mir_body_for_closureb7monomorphized_mir_bodyb7"monomorphized_mir_body_for_closureb7borrowckb7 b7value_tyb7 impl_self_tyb7b7 const_evalb7const_eval_staticb7const_eval_discriminantb7 impl_traitb7 field_typesb7 layout_of_adtb7 layout_of_tyb7target_data_layoutb7lookup_impl_methodb7callable_item_signatureb7return_type_impl_traitsb7generic_predicates_for_paramb7generic_predicatesb7trait_environmentb7generic_defaultsb7inherent_impls_in_crateb7inherent_impls_in_blockb7incoherent_inherent_impl_cratesb7trait_impls_in_crateb7trait_impls_in_blockb7trait_impls_in_depsb7intern_callable_defb7lookup_intern_callable_defb7intern_type_or_const_param_idb7$lookup_intern_type_or_const_param_idb7intern_lifetime_param_idb7lookup_intern_lifetime_param_idb7intern_impl_trait_idb7lookup_intern_impl_trait_idb7intern_closureb7lookup_intern_closureb7intern_generatorb7lookup_intern_generatorb7associated_ty_datab7 trait_datumb7 struct_datumb7 impl_datumb7 fn_def_datumb7fn_def_varianceb7 adt_varianceb7associated_ty_valueb7trait_solve_queryb7program_clauses_for_chalk_envWؿ`ž"""In" ""PubCrate""PubSuper""PubSelf""PubqhVf444040bW`(;T)T)DefDatabaseGroupStorage__(T)expand_proc_attr_macrosT)file_item_treeT)crate_def_map_queryT) block_def_mapT) struct_dataT)struct_data_with_diagnosticsT) union_dataT)union_data_with_diagnosticsT) enum_dataT)enum_data_with_diagnosticsT) impl_dataT)impl_data_with_diagnosticsT) trait_dataT)trait_data_with_diagnosticsT)trait_alias_dataT)type_alias_dataT) function_dataT) const_dataT) static_dataT) macro2_dataT)macro_rules_dataT)proc_macro_dataT)extern_crate_decl_dataT)body_with_source_mapT)5T) expr_scopesT)`T)variants_attrsT) fields_attrsT)variants_attrs_source_mapT)fields_attrs_source_mapT)<T) lang_attrT) lang_itemT)ײ9T)field_visibilitiesT)function_visibilityT)const_visibilityT)crate_lang_itemsT)crate_supports_no_stdǓv`C {-PfSourceDatabaseExtGroupStorage__Éfile_source_root source_rootsource_root_cratesyY{1B*` `g ``gaT T InternDatabaseGroupStorage__&T intern_importT lookup_intern_importT intern_extern_crateT lookup_intern_extern_crateT intern_functionT lookup_intern_functionT intern_structT lookup_intern_structT intern_unionT lookup_intern_unionT intern_enumT lookup_intern_enumT intern_constT lookup_intern_constT intern_staticT lookup_intern_staticT intern_traitT lookup_intern_traitT intern_trait_aliasT lookup_intern_trait_aliasT intern_type_aliasT lookup_intern_type_aliasT intern_implT lookup_intern_implT intern_extern_blockT lookup_intern_extern_blockT intern_macro2T lookup_intern_macro2T intern_proc_macroT lookup_intern_proc_macroT intern_macro_rulesT lookup_intern_macro_rulesT intern_blockT lookup_intern_blockT intern_anonymous_constT lookup_intern_anonymous_constT intern_in_type_constT lookup_intern_in_type_constN7a3 333a3U`qĺbb/a af""d"_l ǻǻʻ*˻*Aubfǻǻʻ*˻*Aub##i&'(ܜ 4i {-PڅU U ExpandDatabaseGroupStorage__ U ast_id_mapU parse_macro_expansionU intern_macro_callU lookup_intern_macro_callU macro_arg_nodeU decl_macro_expanderU macro_expandU include_expandU expand_proc_macroU parse_macro_expansion_errorU hygiene_frame-BL/7a a7 {-Pf   ##i&'(ܜ 4;444040bW`(mBmBRunmB m(mBm(mN "/  a`a Յ>2>2֐j>4>>5>Lf'7 {-Pfԝ ž {-PJJAJJJJPNٮ`JJAJJJJPN`""d"_mKKjKЁjJKǢJKJKjJKjJ : #ffUUU\U4 4Rhf11R101010101010+qg Aݍ""d"_mJJAJJJJPN`JJAJJJJPN##i&'(ܜ 4iG G G hG  G $)nqh@JJAJJJJPN`ĶC`یf  ##i&'(ܜ 4mׁ {-PǨJJAJJJJPN`JJAJJJJPN`11R101010101010+qg AJJAJJJJPN`--F----=JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN` {-Pیf --܎j--5H=2R>444040bW`( 11R101010101010+qg AcҲjJJAJJJJPN`JJAJJJJPNް`JJAJJJJPN`JJAJJJJPNϪ`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPNֶ`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`jллjӻ+ԻŨj+ջ٨j+L VE``ahmDmDjmD m.mDm.mDorig_lenm.5I<< JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`""d"_mf =   'wJJAJJJJPN`JJAJJJJPNڭ`JJAJJJJPNϵ`JJAJJJJPN`##i&'(ܜ 4--֐j-j--ēj---/ T=JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN` eӯbRi>$!],jgG G StreamWithStateG GG autGG hGG empty_outputGG stackGG end_atG VAhmDmDRmD m.5X5, JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`!!!`!"L ֯`b w wj z  { MSKMލ`  R  Y՝`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN˫`JJAJJJJPN`JJAJJJJPNڱ`l..}sf f##i&'(ܜ 4  UUU\U4 4RTKTKTKTK TKTKTK TKTKTK >ՏaJJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`Ǣ`Αjkmiiii```DJJAJJJJPNҬ`JJAJJJJPN`a`00j1j01j0101 0pe!ڒ l c utyR>h9A]P {-P"""֟a" ""a" """ ""G" """ U`.S1f w wj z  { MSKMJJAJJJJPNˣ`JJAJJJJPN`JJAJJJJPN`ҁbΑj`##i&'(ܜ 4##i&'(ܜ 4##i&'(ܜ 4a {-Pž; w wj z  { MSKMfJJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPNaaaj33۪j303030/k""d"_l5JJAJJJJPN´`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`f##i&'(ܜ 4ž33۪j303030/k {-PiJJAJJJJPN {-P`<Ri>$!],jgRi>$!],jg JJAJJJJPN`JJAJJJJPN`JJAJJJJPN  {-P7JJAJJJJPNԷ`JJAJJJJPN`JJAJJJJPNţ/Яaaaaiaaллjӻ+ԻŨj+ջ٨j+L VEeaллjӻ+ԻŨj+ջ٨j+L VEea   l*m8ˤlJJAJJJJPN`JJAJJJJPN`JJAJJJJPN`JJAJJJJPN`   l*m>!!!l!amZi {-P""""-srs  R  h9A]Pb  R  ! m Ξ:QFmm m܁hm:  :Ԛlh::     :lh:  :b :lh:hҁhh:   Ζb܁h : mnm:hҁhh:hҁhh:    ܁h :  b܁h : `܁h;ܫbb;ܫbbb9aa9a9aʆa9aaa9`͝9bb9aaa9```9b  9aaa9aיa›a9```9ċaԝ9b 9aٻaa9aaa9a a9```9```9aaa9a a9`9aaa9aaa9```9ċaԝ9```9ڗaaa9a9aaɏa9a`a9```9```9aaa9b ج 9aaa9`9 ab9aχaa9`9b 9 aa9aaa9aaa9a`a9aa9aaa9``9`9a  9aaa9b  9`  9Ě9aaa9  9bb9aaa9```9`9aaa9a֐aa9`ݯ 9a9aaa9`9bb9aaa9a79ab9```9aa9a9`ލ``9`Ƿ9a9`;a;a;`9b9übüb9bb9bb9ĺbb9aa9``:11R101010101010+qg A:֗:  :f¥b:l:j:e:l :e :ǻǻʻ*˻*Aug:eg:m :  :bb:վ ggg: ڸm: ¥bbb:  bˠb:  `l c uty :  bb: ړn :Îgh: ee: j:֗ l c uty֗:bעb:g*e۝egg egg:a/aaaa aaa:a/ݺaaaa ݺaaa:a/aaaa aaa:al:g*ddgg dgg:g*ddgg dgg:g*eeߌgg eߌgg:g*ddͩgg dͩgg:f*eeff eff:a/aaaa aaa:a/aaaa aaa:g*eeg٤g eg٤g:ݧg*ddgg dgg:a/aaaa aaa:aϮj:g*eegg egg:`/```` ```:a/a a:a/a`aa aaa:11R101010101010+qg Ȃ9̑؆ ̑؆:g*ddgg dgg:g*eɲegg egg:` *   g    g:`(֝Ҿc  ֝Ҿc:g*ڙeeg҅g ڙeg҅g:a/aaaa aaa:g*ܜdd׏gg ܜd׏gg:a/aaaa aaa:a/aaaa aaa:g*ddgg dgg:ͭg*ddgg dgg:ʢg*ddgg dgg:¥g*ddgg dgg:f*ddff dff:g*eegg egg:g*eegԲg egԲg:g*ddgg dgg:`/```` ```:ӿg*g g: `:g*ddgڂg dgڂg:֋j9ԝan:g*dՉdgg dgg:`*` `ge`g:g*ddgg dgg:g*dƁdgʈg dgʈg:g*eegg egg:g*eegg egg:g*ddқgg dқgg:D)αeeαe:g*eegg egg:g*ddŬgg dŬgg: l99l  gn:a/aaaa aaa:bƍ7:`9` :f*ddff dff:`/```` ```:` `:g*ddgg dgg:`(֝c֣nc:g*eegg egg:g*ddgg dgg:g*Ԙddgg Ԙdgg:=*g g:e)eee:g*eegg egg:a/ «aaa naa:g*ddژgg dژgg:a*ݯϯf ݯϯf:Űg*eegg egg:g*ddgg dgg: h99h ם=Ȳn n:g*ddgg dgg:"5"5 "5""5 "Im+(9 :g*ddgg dgg:a/aaaa aaa:a/aٻaaa aaa:`/```` ```:g*eeϒgg eϒgg:ҟg*ȴeegg ȴegg:h9 ֝h```n:ۼg*ccgg cgg:f*ddff dff:g*˺eegg ˺egg:g*eУegg egg:a/ aʆaۆa nۆaʆa:D)αeeαe:g*Ƞee¡gg Ƞe¡gg:a/aaaa aaa:g*ccgg cgg:g*eзegܯg egܯg:a/aχaaa aaa:m:g*e°eӻgg eӻgg:g*cc۶gg c۶gg:g*ccgg cgg:a/aaaa aaa:`/ ݯ `  ` :ժg*ccgg cgg:g*ddgg dgg:g*Íddgg Ídgg:Ҡn9̑͡n:a/ߏaaɏaa ߏaaɏa:`/``` ```:g*eegg egg:ڈ`  9 :`/``ana`:`/```` ```:D)αeeαe:k9k :`(֝c֣nc: l99lnȲngn:g*ddgg dgg:`/ ``` n``:` `:g*cc˾gg c˾gg:`/```n``:g*ddgg dgg:a/aaaa aaa:g*eegg egg:g*d¼dg‹g dg‹g:g*55g 55g:ڗa/ۘaaaa ۘaaa:a/ana:a/aaaa aaa:Ãg*ddgg dgg:f*ddff dff:g*۱ddgg ۱dgg:ߐg*ddgg dgg:aހm:f*ddff dff:i9ž žn:ˀg*eegg egg:g*eegg egg:g*eٗegg egg:g*ccgŔg cgŔg:g*ddgg dgg:g*eegg egg:a/a֐aaa aaa:a/aיa›aa aa›a:g*ddgg dgg:g*eegg egg:g*ҽeegg ҽegg:g*e̓egg egg:g*ccgg cgg:g*ddgg dgg:l9 :g*eeʞgg eʞgg:g*ccgg cgg:a/aaaaœnaa:h9ԝ ֝hܨhan:ڜg*ddgg dgg:g*eegg egg:g*ee۸gg e۸gg:5995 Ȳn nn:`)`ː`eeː`e:`/```` ```:D:`9l9ڈ`9 » )`L ,!.e 9 :`:ߞ`9``9``9cc9bb9cc9g9g9g9g9e9`9a9g9a9g9ڲg9g9g9g9`9g9f9؅g9g9g9NJa9a9f9a9g9g9a9f9Јg9a9g9`9a9g9g9a9a9g9g9a9g9g9g9g9e9a9g9g9a9ߤg9g9g9×g9g9g9g9g9a9ȋg9g9`9g9g9g9a9g9g9g9a9k9g9g9g9g9g9g9g9g9g9g9`9g9g9g9g9g9f9g9g9g9a9g9f9`9g9f9g9g9g9ła9g9g9g9g9g9a9g9`9˔g9a9g9g9a9g9a9a9g9gg9gg9aa9gg9gg9ff9gg9aa9g˖g9gg9gg9aa9gg9aa9gg9gĹg9gg9gg9gg9kn9Јgg9gg9gg9aa9gȍg9gg9łaa9gg9aa9gg9g؇g9gg9ff9gg9ڲgg9gg9gg9gg9gg9NJaa9gg9gg9gg9aa9gg9`ӳn9``9gg9gg9gg9×gg9``9gg9gg9gg9gg9aa9gg9gg9gg9``9ߤgg9gg9gg9gڴg9ff9``9؅gg9gg9aa9aa9aa9ȋgg9ee9gg9aa9gߦg9gg9gg9aa9ff9``9aa9gg9fg9aa9gg9gg9aa9gg9gg9ee9gg9˔gg9aa9gg9gg9gЊg9gg9gg9gg9``9aa9gÙg9gg9ff9gg9gg9gg9gg9a־a9gg9aa9gg9aתa9gg9gg;  ;ܫbb֫b;֫bbb;`9e 9ee9ae9e9e9e9e 9e9ae9ae9Dα9  9e :a:g:f:g:g:g:a:g:` :g:a:g:`:a:f:NJa:g:g:g:g:g:g:h:g:g:g:g:a:g:a>:g:a:ڲg:g:g:g:a:a:a:g:g:g:g:  :g:g:g:g:a :˔g:g:g:ݯ:g:g:g:g:a:f=:f=:g:g:g:a:g:g:aj:g:g:g:g:g:g:f:g:aj:g:Јg:g:a:f:؅g:ła:a:a:g:`:g:a:g:a«a:a:g:g:a:×g:g:`:f:h:g:g:g:f«a:`:a:f:j<:g:a:g:g:g:a:g:` :` :g:g:g:g:ȋg:g:g:f:g:`:g:ߤg:` :`:`:a:b {-PӬh:`:D:f :f :ff:ff:ff:h b: :=55:hbb:l  :ˉ/8Xbbbb:g   :hb:hϊbb:hΚ:l  ::g:b:ײDh:ޒb:hŵƱb:f5:hļb:h6b:hb: `l c uty:55hh: `l c uty:Κbb:ޒbbb:ļbbӮb:ϊbbbb:  o  ko:     b :     b :bbbǏb: l c uty:bbb:hbh:55 nj5:bbbb:a  :```:`  :`:b  :aa:a:ab: ab:Ě: aa:`ݯ :`:b ج 9Ҡn؆9hn9nn9aa9in9ff9``95n9aa9aa9aa9֋jn9``9aa9l9͌anja9aa9``9nn9k9``9k 9gg9kŵg9``9``9hn9Ǹl9Ҡn9n9aa9``9ۻnn9aa9``9ŵggg9ng۲n9aaa9```9f`f9̑؆͡nݡn9nnn9aaa9aaaa9nn9 aaa9ggg9״g˧g9ԝnjaaa9žnnn9ngn9`aaa9nnn9ԝnan9n`n9````9ee9̑͡nn9```9aaa9```9````9ԝnan9 ``9ԝaaa9aa޷aa9nнn9ލ``Ô`Ӕ`9````9```9e9`:GG TransitionsGGGGD!YF0G hhh:ho hco:ccc:g* Îgg ggg:=* bh nbhb:a3 333a3U`qbb:immm܁h:ʌb* babbh bb bhb:ɏn:nnڸm:l:   ٣oob:b/ abbb Ɉhbb܈hb:b/ aÝbbb ɈhÝbb܈hÝb:ΞJ3wm:mmmm܁h:5```::ooo:g:Ӥooܤo: *  ܁hǀhhn ǀhh܁h: : ړnnn:տc(cc  ccc: *  ܁hƇh݇hn Ƈh݇h܁h:`*  b g bb gb:`/ bb bbb:b: ́nفn܁h:j:nȕnj:ڈ` bb:Ҵo:hooҵoc:b/ abbb Ɉhbb܈hb:`*  b Ȅh bb Ȅhb:e) e ee ee: : mnՀn܁h: *  ܁hȃh߃hn ȃh߃h܁h:`* վ g g bg  gg:b/   b b  bb b:`*  b ho hb:b/ aٱbbb Ɉhٱbb܈hٱb: : ړnnn: :oo¡o:a3 333a3U`qbb:mmmm܁h:5*  e h  e  he:b/ aԉbbb Ɉhԉbb܈hԉb:b/ bbbbb bb:a3 333a3U`qübüb:mmmm܁h: :  nn܁h:ڈ` ךbb:Ě/ bb nbbb::nn܁h:b/ abbŊb ɈhbŊb܈hb:l:   oob:b/ b ߩbbߩb b: e) ee ee ee:  bb:c* 55b5h 5b5hb:* bh nbhb:ڈ` bb:=:55ooj:g:  oook:Ě/ bbobb:b/ abbb Ɉhbb܈hb:ab/ bb7b bbb7b:b/ abbb abb܈hb:b/ aˆbbb Ɉhˆbb܈hˆb:5*  e ̂hoôhe:b/ aǞbbb ɈhǞbb܈hǞb:b/ abbb Ɉhbb܈hb::֗nnn:* bgogb: :  nn܁h9f9f:559c959=77ԝ777*ccgŔgnn*55gnn*eУeggnn*ܜdd׏ggnn*ddggnn*ddggnn*ddқggnΰn*e°eӻggnn*ȴeeggnn*e۝eggnn*eeffnʛn*ccggnn*eeggnn*eeggnn*ddggʝnڝn*ccggnn*ccggnn*eeggnn*` `gll*ddggnn*˺eeggnn*eeߌggnšn*ddͩggnn*ccggnn*eɲeggҢnn*״gggg*eeggnn*gnn*d¼dg‹gnn*ddffnn*۱ddggnn*cc˾ggnn*ddggnn*eeg٤gnn*eٗeggnn*ddgڂgnìn*ddggnn*eeggnn*ddژggnn*ddffnn*` `gen*ddggnn*ddggnn*ddggnn*eeggnn*ҽeeggnn*eeggnƯn*ddggnʻn*eegԲgnn*ddggnn*ee۸ggnn*eeggnn*eeggnn*````*eeϒggnn*g٫nn*ddggnn*ddggnѨn*ddggnɧn*Íddggnn*ddffnn*eeggnn*````*ddggnn*````*ddggnn*ddggnn* ````*ddggnn*ddffnn*eeggnn*ݯϯfnºn*eeggnn*ddggnn*ddŬggnn*ddggnn*ccggnn*dՉdggn­n*dƁdgʈgnn*eeggnƱn*ddggѪnn*cc۶ggnn*eeggɩn٩n*eeggnn*ddggnn*eeʞggnn*Ԙddggnn*e̓eggnn*ddggмnn*ڙeeg҅gnn*Ƞee¡ggnn*   gnn*ccggnn*ddggnn*eзegܯgnn*ddffnn*  b hoo*  e hoo* Îggoo*  ܁hƇh݇hno* babbhʸo۸o*  e ̂hoo* bhoo*  b Ȅhoo* bgoo*  b goo* bhoo*  ܁hȃh߃hno* վ g goo*  ܁hǀhhno* 55b5hoo* Ǟbbbɟb֟b5b @ ӬhbhӬh/ bb7boo/ abbboo/   b bgg/ abbbƈh׈h/   b bhh/ bboo/ bboo/ abbboo/   b b̗bٗb/   b bhh/ abbboo/ abbŊboo/ aǞbbboo/ aÝbbbúoкo/   b boo/ bbbbo/ b ߩbbo/ aԉbbboo/ bboo/naann/aaaann/Ƿ`ee/Яaaaaii/aaaann/aaaažnվn/aaaa˗nۗn/ ݍč`ԍ``Ζ`/aaaann/ ````g/all/ߏaaɏaann/``ann/Ƿ`ee/ۘaaaann/  a`m/```/aaaann/Ƿ`ee/֝`cc/ݺaaaann/`````/aχaaann/ ݍč`ҍ```/aٻaaann/ann/````nn/````nn/֝`cc/aיa›aann/``Ғ``ee/aaaaœnn/7amm/all/ݍލ```ܔ``/aaaann/`````/` `/Яaaaaim/ ݯ `nn/nʆaۆann/aaaann/````nn/n``nn/aaaaӘnn/```nn/֝͝`cc/ԝaaa/````մnn/aaaann/a֐aaann/a`aann/```nn/aaaann/ann/aaaann/ԝaaa/ `````/````Ϳnݿn/a`aajj/aaaaœnҜn/``a/````nn/    ƈ`gg/```/aaaann/ ``܌``g4üb4b4a4b4a.ea 9e.e 9e.ea 9e.e 9e'c'cccc'c'cccc'b 9b(ccȽoo(֝c֣nn(֝c֣nn(֝Ҿc֣nn)αeen) ` ``Ν`)een)`ː`een)αeen)αeen) eeeh) ee eeo) eeeh) e eeo-   9 -ӯb 9ӯb-bb 9b-   9 -a  9a-hŇ 9h,eӯbͯbb,e bb,`ڈ`bb,ebb,`ڈ`ƚbb,`ڈ`bb,eϨbb,bbbb,bͯbbΰb,bϨbbb, bbbb, bbbb, bƚbbb, bbbb,`ڈ` Ԉ`,``,```,```,ϕ```,  Ԉ```,ݯ`˘`ۘ`,````,````,``Й``.  b bbؠb.  b bbb.ff.ff.ff0e0`0` 6 `0e  {-P` e8 VW WW WVW  W  W  iiVjVjVjVkVkVVO O jO OO OO OxżacVO O jO OO OO OxՓaVkVO O jO OO OO Ox`bVO O jO OO OO Ox`bVO O jO OO OO OxacVO O jO OO OO Ox cVO O jO OO OO OxabVO O jO OO OO OxbVO O jO OO OO OxabVO O jO OO OO OxɾebVO O jO OO OO OxabVO O jO OO OO OxcbVjV̲aVO O jO OO OO OxacVO O jO OO OO OxdbVO O jO OO OO OxcbVO O jO OO OO OxcVO O jO OO OO OxdbVO O jO OO OO OxdbVO O jO OO OO OxdbVO O jO OO OO OxacVO O jO OO OO OxdcVO O jO OO OO OxabVO O jO OO OO OxabVO O jO OO OO OxabVO O jO OO OO OxebVO O jO OO OO OxdכcVO O jO OO OO Ox`bVO O jO OO OO OxdbVO O jO OO OO OxcVO O jO OO OO OxdcVO O jO OO OO OxdbVO O jO OO OO OxdbVO O jO OO OO OxdbVO O jO OO OO OxdғcVO O jO OO OO OxdbVO O jO OO OO OxcVO O jO OO OO OxaЌcVO O jO OO OO OxcbVO O jO OO OO Ox`bVO O jO OO OO Ox֝aVO O jO OO OO OxcbVO O jO OO OO OxdbVO O jO OO OO Ox bVO O jO OO OO Ox˙dcVO O jO OO OO OxcVO O jO OO OO OxebVO O jO OO OO Oxża٢cVO O jO OO OO OxdbVO O jO OO OO Ox`bVO O jO OO OO OxdcVO O jO OO OO OxccVO O jO OO OO OxaơcVO O jO OO OO Ox`cVO O jO OO OO OxbVO O jO OO OO Ox`bVO O jO OO OO OxabV VVVO O jO OO OO Ox`VO O jO OO OO OxabVO O jO OO OO Ox֝aV VO O jO OO OO OxdbVO O jO OO OO Ox cVO O jO OO OO OxdbVkVO O jO OO OO OxdcVO O jO OO OO OxacVO O jO OO OO OxacVO O jO OO OO Ox`bVO O jO OO OO OxacVjVO O jO OO OO OxabVO O jO OO OO OxebVO O jO OO OO OxcVO O jO OO OO OxabVjVO O jO OO OO OxĚcVO O jO OO OO OxdbVO O jO OO OO OxabVO O jO OO OO OxdcVO O jO OO OO Oxa͂cVO O jO OO OO OxacVVO O jO OO OO OxabVO O jO OO OO Ox֝bVO O jO OO OO OxabVO O jO OO OO OxdcVO O jO OO OO OxżabVO O jO OO OO OxabVV6VO O jO OO OO OxccVO O jO OO OO Ox ȳaV֝VO O jO OO OO OxabVbV VbVbV VVVVVVV WVV WW;LLLbbUUU UUiU`U U UiNN NNKc)c ccffKc)c ccffKcpKcpKffKffKffKffKffKffKcKcK iJcJ iJcK iK i    i  K i pp  K ippK i p K ippK K  pK iK iK KcKcK iK iKcKcK iKcKcK iK pK p  p pK iK iLiײײز _@z/LaL CxKĮLipX X l??>ʏ>hJţAi h>>aJ ab>hJţAp>hJAip>hJAp>hJA h>hJţAip>hJAip>hJAip>aJ ap>hJAip??6??60`pp??p0epp??Κ??? pa O Փa? pe O ab? pd O dכc? ɫpc O ab? jJţAi aj h?? jJţAipp?? pc O `b?7jJAi 7jp?ݰ?? pd O ab?7jJAipp?? pc O ac?  pG G G G  G RE2ƏGh pp? pd O dc?? pe O `b? pc O cc?5?ppGh pp?7jJAipp?? pc O cb?? jd O ֝b?? ja O a? pe O ża٢c?ً?е?ٷŵSŵ ׷ŵ SS SemanticsImplSS s2d_cacheSSexpansion_info_cacheSScacheSSmacro_call_cacheSrE?ę?7jJAipp?ֈ?? pd O ab? pe O db? pd O `b? pd O dc? pe O eb? pڙe O c? pd O `c? ͻpe O aЌc?ĉ5? pd O db?ֈ?? p˺e O ac? ke O b?55? jJAipp? pe O aơc? pd O ab? j7a O a?? pd O b? pd O ab? ?ϊb :? pd O ac? pe O ab?   ? èpÍd O  c?pd O ֝b? pd O db?pa O a? jJAipp? B?Ň Ň? pe O ֝b? pa O  ȳa? pd O db? pȴe O ab?? ׳pd O ab? pd O db?  m? pe O `b? Ѱpd O db? ?55?pe O b???ֈ?? Ӿpd O db? pa O ֝a?66??66? pd O dc? pe O a͂c?p7a O a?? pc O c? pe O Ěc? pܜd O c?55?5955cc?Յ? pߏa O ֝a??? pd O cb? pe O  b? pԘd O ˙dc?66? ? ? pc O cc? pd O ac? pe O żac?66? pd O `b? p` O `? jJţAipp?ļSļ ļp? pe O `b?ϊb :?66?pppG h qp? p۱d O ab? pd O dғc? pd O c? pe O db?? ˭pd O db??Ȳ? pe O eb? pc O ac? pe O ac? ٦pe O `b? ݶpe O c??? pd O ab? ke O  b? pd O db?q e O  b? pd O cb?? pe O db? #CC8fi((( ConstNonNull( ( c\7i (i? pd O db? jJAipp? pd O cb? pe O ab???ֈ??ę? pe O eb? pd O ab?ֈ?? pd O dc? ߩpe O b?ٷ˷? jJţAipp?ݍ  ? B?66?? Ǹpd O db? ? ?5?ٷ?88? ? pe O  c? pd O dc? #CC8fi(((ݏq( ( c\7i (i? pȠe O ab?Ň S?? pe O dc?UUU\U4 4RbbSb Әqbp? pd O ac? pd O db??=?ֈ??Ր??:::: ::: džAKaTMTMdTMʼnTM.}ES ƚq? jJAipp? pҽe O ɾeb??5? pc O ab? pe O żab?S p?մմ?վ ??  ?f?f??Ȅf?ۇf?i?Njf?یf?f?e?f??f?j?f?f?f?e?f?e?f?Љf?f?f? ?f?e?f?f?i?jh?jh>>>?5?6? ??ڈ`?ӯb???55??ݍ  ? ` 9`? ? ?55?5? hq 9h?ҵ  ?? `q 9`?mmm mˤq?  q 9 ? 11R101010101010+qg A955 q?  q 9 >6>f>>ϐq>q>"2"2"2"2 "2"2"2 ѝo$"6>p>q>6>f>f>Ȅf>f>b>f>e>یf>>e> >f>ۇf>e>f>f>f>f>p>f>p>q>f>Njf>f> >f>q>e> >f>q>Љf>>b>ӛ>>״>վ >>"*"*RecordPatField"*"r> >7> >ً>>̷5>>> >? ??'cccc????'cccc?5? "?̷5״5?ѥ==?ݍ ٘ ߲? q955 q?ݍ̷?"!"!b"""Pӻ/  " ֯q?? ?̷5״5??П ?5??״?  ?վ  ?  ? " ?"ٽh? " ?"""""gJw " Dzq??½?5 5?8> > >? ?a?a?6@C hJţ h   JJJJJJ9S坫ţC hJ q   JJJJJJ9S坫C7hJ q7  JJJJJJ9S坫C hJq  JJJJJJ9S坫C hJֵq  JJJJJJ9S坫BB 6Bͬͬ ParseIntErrorάWdC3BB6Ce;;; AccessError !Cl!!BorrowMutErrorDDCeqCeqCeqCeqCeqCeqBCeCaa CapacityErrorabai30qC G G G FstG  G G IoG  }CbCqB bb߇grE3d ډRS9}(((CapacityOverflow(AllocErr(layout$t%(6i ˽qqB #CC8fp AllocError _/G888q8q8q8c%/P  qͿq qBq˽qq(6iӾqBqqͿqPqq̑Î`Ňݍhm"*"*"*"Z>hE)ً")")")";׻EݍS"  b.b/b.b.b.b/b/b/b/b.b.b/b.b.b/b/b/b/b.b/b/b/b/b.b.b/b/b/b/b.b/b/b/b/b.b/b.b/b/b/b/b/b/b/b/b/b/b/b.b/b/b.b/b.b.b.b. ݍݍ  >       (SST#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#T#\i\LL qSSSSSSSSS??ݯ?մ? ?m$lm$lm$m6m6ˉm6Ξmm6emJT׋akm4m4jm4Ξm2{i0} m5m5MaxLenm5Ξmm5miumBmBamBam'mB m'}wy>7aSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTSSSa`aa```a`!SSS(i(im# SUUUUUUUUUUUUUUUS«akak`ka«a`a`«a`«aa`  #CC8fjk  {-Pqqpk«a  #CC8fͽjk  {-Pqqpka  #CC8fkk  {-Pqqpk`a«a`«aa«aa`«a`a""p""""";4c4c4b4b44b4b4b4b4b4c4כc4b4b4c4;4k4c4b4b4b4k4c4b4b4j4b4c4b4c4j4c4c4c4b4c4c4c4c4b4b4c4b4b4c4b4b4c4c4b4b4٢c4b4b4b4b4c4b4c4b4b4b4c4c4b4b4͂c4b4b4Ќc4b4b4b4c4b4Ěc4c4j4ơc4b4b4b4b4b4b4c4b4ғc4b4b4b4b4i4i44m4b4k4464j454ž44 4j4b4j44 4`4b44k44333 4 44`4 4 44q955  qpc  q qq4qq4qq4>4j4j4k4k4j4 46aa6 a6aa6a6a6`a6a6aaʄa6aa·aзa6 aaa6aaǰaհa6`aaa6aaʄa6aaa6 b6f6 f6 6f6 f6f6 b6 f6`(хʒ`4 545m5j5 5k5b5j55b5`5b5j5k5 5 5q55565k5m5j5b55j5b555j5555ž555k5b5;555 a5a5 5`5 4 4 4m4qq4qqqq4 44a4a4 4`444 4 4`4 4 4 4j4 4 4j4k4 4k4`4j5 5 5`5 4 43 a3a3 3ee3bҧb2b2b22b2b2c2b2b2b2c2b2ơc2c2c2٢c2b2c2b2b2b2Ěc2c2b2`2b2b2b2b2b22b2b2c2c2b2b2c2ž2c2b22b2c2b2c2c2כc2b2c2b2c2b2b2b22b2͂c2b2b2b2c2b2ݍ2b2b222b22b2c2b2c2b2ғc2c2b2c2c2b2b2c2c22Ќc2c2b2b252c2c2b2b2b2c2b2b222b222-b-A-A-j-b-a-j-¥A-a-b--C-A.A.j.¥A.C.A.j.a.b.j.b.j.j.j.A.j.b..aΑjmkkkͽjkjkͽjkjkkkkkjkͽjkΑjkmkkjkͽjk )c)c)cf)cf)cf)cp)cf)cc)cp)cc))cc) ) cc)ž(žMkMkMjMjMj7c7b7b7c7b7 7c7b7ơc7b7b7b7;7c7b7b7b7b7c7b7Ěc7b7b7c7b77b7c7b7c7a7b7b77b7b7b7b7b7b7c7b7j7 7c7c7b7b7b7b7b7b7c7c7b7c7b7b7c7k7b7ғc77c77a7٢c7j7c7k7c7c7j7b7b7b7c7b7b7b7b7c7b7͂c7c7Ќc7c7 7c7b7b7c7b7b7b7b7c7כc7b7b<b<<<5<b<i<<i<<<`<j<j<ž<< <<k< <<a<;<<a<k<j<<6< <b<mLLbLkLLLLjLmLL LLbL5LLaLL L LžLbL;LL`LaLjL6LjLLkKbKaK KKKkKK`KmKKaKžKK5K6KbKKkKjK KbKjKKK KjK;KKBmBjBBkBbBBbB6BjBžBBBBB5BbB;BBBjBkEkEjEjEjEkNN P qqPqq?a?`??? ?? ?a? ? 6 m2 m0m/m/ m/m/ m/m/ m/ pm/pm`qmalm«alm lm lm`qm#qa`m$lam$q`m$l«am#i   m#ˤl   m%qm%qmqmqamĴcamcam m`m m m`m m lm lm`qmq`ml ml ml llml llmq` mmγcm mmmmmEz`mmem mmemmemmem^٣s`qm`mq`rrm lm lm m m`m`m m m m`m m m m`mi  mˤl  mc  mc  mf  me  mffmefmeemeemffmeemeemefmffmeemffmeemeeeemeèffmeeeemeèfڀfmffΆffmeffȃfmffΆfۆfmeeeemffÈfЈfmefffmffÈffmeeeeme`ame bme bmiemmfmqemmfmiemqfmbmfmembmemfmflmelmelmelmfɳlmelmqm/pm+a;m+a;aam+am(m)am)am)am)aaam)am)m)m)am)am)aeĊfm)aeĊfm)am)am)aeem)aee# # J-hJ-hJhJhJhJhJhJhJhJhJ J7JJJJJţJJŶqҶqJţqqJqqJֵqqJֵqqJJJJţJJ`J`JaJaJ`J`J`J`J`Jϵ`Jڭ`J`J`J`J`Jް`J`J`J`J`Jٮ`J`J`J`J`JțaJ`J`J`J`JҬ`Jˣ`J`JaJ`JaJ`J`J`JaJJ`J`J`J`J`J`J`JaJ`J`J`JaJ`JaJ`J`J`JţJ`J´`J`J`JaJ`J`JϪ`J`J`J`J`JԷ`J`J`JaJ`J`J`JaJaJ`JaJ`Jڱ`J`J`J`J`JJ`JJ`JaJ˫`J`JaJaJ`J`J`JaJ˔aJaJ`J`JaJֶ`JJ`J`J`J`J`JJJJJţJ`J`J`J`J`J`J˫`J`J`J`JԷ`J`J`JJ`J`J`J`J`J`J`J`JţJֶ`J`J`J`J`J`J`J`J`J`JJ`Jڭ`Jˣ`J`J`J`J`J`J`J`J`J`J`J`Jٮ`J`J`J´`J`J`J`J`Jް`J`J`J`J`J`J`J`J`J`J`J`J`J`J`J`J`J`Jϵ`J`J`Jڱ`J`JϪ`J`J`J`JҬ`J`JJJJJJţJJJJbJbJbJފcJbJbJbJcJbJbJbJbJcJbJbJcJbJcJbJˉcJbJcJbJbJcJcJbJcJbJcJbJbJbJcJcJbJbJbJbJbJcJbJbJbJcJcJbJbJbJbJcJcJbJۀcJbJbJԟcJcJbJcJbJbJbJbJcJcJbJbJbJbJbJbJcJbJbJbJƦcJcJ͐cJcJbJbJcJҘcJbJcJbJcJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJbJcJbJcJbJcJbJފcJԟcJbJcJbJbJƦcJbJbJbJbJbJbJbJcJbJbJcJcJ͐cJbJbJbJbJcJbJbJbJcJbJbJbJbJbJۀcJbJbJcJbJcJcJcJcJbJbJbJcJҘcJbJcJbJcJcJbJcJbJbJbJbJbJbJcJˉcJbJbJbJcJcJcJbJcJcJcJbJbJbJbJbJbJbJbJbJbJbJbJbJbJ J7JddJcJża՚eJżaeJ՚eJadJ``JżacJ JddJ dJddJaaJ  J JddJadJaeJ aJa8JddJ֝7JccJ`eJaaJJdeJ``JadJdJםdJa8J >JdҊeJddJadJaֲdJaaJ֝eJacJ``JaJaaJaaJaaJażaJadJ`cJeJaeJ`cJeJacJɾeeJadJddJeeJ֝ J``JeeJddJaaJaaJeӕeJaaJcdJadJccJddJeJ`eJa J˙ddJadJcdJddJacJd`JaaJaeJ`eJcdJadJ``JddJaƻeJdeJ`dJddJaaJddJaeJ`dJaǚaJadJacJ֝JddJddJ eJadJJccJ`dJ`aJdeJaaJddJaaJaeJddJJJJJAJţAJAJA b ЯaJA b ЯaJţA b  ЯaJ J7JJJţJAJţAJAJţA  faJA 7fܶaJAsfaJ`AJ`AJ`AJ`AJް`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJҬ`AJ`AJ`AJϪ`AJ`AJ`AJ´`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJAJڱ`AJ`AJ`AJ`AJ`AJAJ`AJ`AJ˫`AJڭ`AJ`AJţAJֶ`AJ`AJ`AJٮ`AJˣ`AJ`AJ`AJ`AJ`AJϵ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJԷ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJ`AJAJţAJAJAJAJţAJAeeJţAffJAffJţAeeJApJAeeJAffJApJţApJAJţAJAJţAJAJAJţAJAJAJAJţAJAJţAJAJAJţAiJAiJAiJAiJAiJţAiJAippJAipJAippJţAippJAipJAippJAippJţAipJţAippJAippJAippJţAippJAippJţAippJAipJAippJAipJţAipJţJJJAJAJţAJAJţAJAJAJţAJAJAJAJţAJ  JAsυsJ77JAssJ  JţAssJJJJJJJJJţJJJJţJJJJJJJţJ/b/b/b(8g8a8g8a8`8g8`8g8f8 8 8`8g8b8 8`8a8g8`8f8f8g8g8g8g8i88ڲg8g8g8f8a8`8i8a8g8a8g8g8g8k8g8g8i8g8g8f8a8a8 k8c8él8a8g8g8g8`8a8a8b8g8a8g8a8g8Ҳ8`8g8`8g8g8a8f8ła8f8j8ߤg8`8`8 k8`8g8a8g8`8g8a8b8g8g8l8a8a8h8a8a8˔g8g8g8g8g8g8j8`8g8g8`8g8a8g8j8f88a8`8g8ȋg8g8a8f8f8 ҁb8g8a8f8i8`8 8a8؅g8g8g8b8g8f8g8e8a8g8g8b8Јg8g8h8a8ˉ/8Xa8`8b8b8g8a8g8g8 » )`L ,!.e8g8q8l8a8g8g8g8g8g8a8`8g8g8b8e8g8g8`8g858a8`8͌a88g8g8a8g8h8a8×g8a8a8`8j))məA3f8g8g8NJa8ʹl8fO .b.a.C.A.A.j..b.b.A.j.a.¥A:JJ> 66a6ž6a                 95ԂΚݯݯ:  >p7>pͦ>p .j.b.a.A.j.j.C.b.j.A.¥A.j.j.A.b.j.a.566 6`6 6666žG hG hhG hq  /j//j/b/a/j/j/a/j/j//A/j/j/b/A/¥A/C/b/A/j?d?d?d?՚e?e?e?c?d?d?d?7?d?d?d?d?c?d?d?6?c?d?d?d?e?d?e?d?e?d?ƻe?םd?d?d?e?8?e?e?c?d?e?? ?Ҋe?d?e?e?e?d?c?c?e?e?c?e?d?d?d?c?c?d?d?e?ֲd?>?d?d?d?ӕe? ?e?c?e?e  m/m/ >7>ͦ.a.C.a..j.b.¥A.A.A.j.b.A.bc  J(i(i(b(i(i>ͦ>7> :3:-aq a:-:0q q:0::ll6b6i6i6 6m66ž666b6i6 6k6j6 666a6j66666b66;6656a6j6`66k ? ???մ?ݯ       JbJbJb(i(i> >a>m+m N6>t7>t >tͦ;h;k;5;k;l;l;ҁb;h;5;l;l4mރlkmjkkkΑjkkͽjkkkk 5̲a55 5k555m5 5j5565j5 5j5k55;??ߪ?Uϊb    LbbLLLmLbbmLm GhGhp  m/ m/-`-`- -- "c" J J7(i(i555 5b5b55b@Ӭh@UUU\U4 4R@<@@ @@j@  @SSS،Saנ^@SSS،SNzL`@@@@@@@@Dzq@@@ۣ8@ļ@ϊb@@@ @Ӭh@@@@@Әq@@@@UUU\U4 4Rϊb@@@߇m@½@@j@ŵ@ًMMjMjMkMMkMjMbMjMbMMjMbMmMbMjMbMjMkMkMjM MmMb   m/m/ J`J`J`JaJaJڱ`J`J`JaJaJϪ`Jֶ`J`J`J`J`J`J`J`J`Jڭ`JaJ`JaJ`J`J`Jϵ`J`J˫`JaJaJ`J`J`J`J`J`J`J`J`J`J`JJ`J`J`J`JaJ`JaJˣ`J`JJ`J`J`J`JJaJ´`JԷ`J`J`J`JaJ`J`J`J`J`JaJ`J`JJ`JaJ`J`J`JțaJ`J`JҬ`JaJţJ`J`JaJ`J`J`J˔aJ`J`J`J`J`J`J`J`J`J`JaJ`J`JaJٮ`J`Jް`J`J`JaJ J7J JXXXX XjX XaXiXaXXžXiXkX`XbXXkX5XjXX6XXiXjXX XXmX;XbXXbaJAJţAJAG hObOaOaO֝bO b*Nii*NiŰi  "5 1 1DbDeDbDeDDDؘDjhDԝDhDjhGhGhp ԝ m j  :  ػm j ލ` ` †j m/ fm/em/em/ fm/ m/*`k*`k)))ߪQ   nfJ!hJ!hJAJţAJA55m5b5b5j5j5p5a5bYc nf`  ԝ j `*ij*ih*ih*iҴj*iŰi*ij*ii JhJh3a3 3 aa;J JJObO֝bO bOaOa m/ ªlm/lm/lm/ lnffenffenffenffnffenffenfЉfenffenfeenfeenfۇfenffenffenffenffenfNjfenfیfenffenfȄfenffnffenffenfeenfee(ip(ip5k5m5j5b5k5j5b5b5 5j@@ @@Ӭh@@@ @վ @@ۣ8@m@@@ @ٷ@ @@s@@@6@Κ@ @@@@6@@Ѫ8@@GhO֝bOaObO bOa*|ih*|ih  mqa`cmqa`Ĵcmqa`a2c2b2b2c2c2b2c22ݍ22b22b2b2b2c2b2c2c252b2b2c22b2Ќc22b2c2c2c2b2b2c2b2c2c2b2b2ž2b2c2c2b2c2b2b2b2b2c2b2٢c2c2b2b2b2b2b22Ěc2b2c2c2b2b2c2b2c2b22b2ғc2c2b2͂c2c2b2b2b2b2b2b2b22ơc2b2b22`2b2c2b2b2b2b2כc2b2c22bKK m)m/m/ m/m/ m/lm/ ªlm/lm/ lm/ m/(i(i(b(`        *ih*ij*ih*ii*iҴj*ij*iŰi  `955*`٠`*`l*`k*`k*``*`k*`k*`k*`Ǣ`  JţAJAJA333 *`٠`*`k*`Ǣ`*``*`k*`l*`k*`k*`k(i(ia8a8a8a8a8a8aaAaHaLawO ֝bO aO aO bO  bO  cO dbO bO cbO `O ża٢cO cbO żabO  ȳaO ebO a͂cO cO abO dכcO acO ebO `bO acO dbO dbO aO `bO abO dbO acO dbO bO ˙dcO abO dbO `bO `bO żacO ccO cbO abO ֝aO cO  bO dbO dcO dcO dcO abO dbO ebO acO dbO abO ɾebO `bO cO dbO aO cbO dcO acO aơcO ĚcO cO `bO dcO ֝bO dbO acO ՓaO ccO abO bO abO abO dcO  bO  cO ֝aO abO `cO abO ֝bO abO abO acO dbO aЌcO abO dғcO cO abO dbO `bO dbOaOaO֝bO bObOaO֝b֝ObO b OaO֝bOaOaO bObO b OaOaO֝b֝ObO֝bOaObO bOaObO֝b֝OaOaO b O֝bO bObOaOaOżabOdcOdcOdbOdbO cOdbOabOccOcO bO`bOdbO`bOa͂cOaOaơcOaЌcOdbOdcObOabOacOĚcOdbOabOabOebO֝bOacO`bOdbOabOabOcbOdbOcOdbOdbOՓaOabObObO˙dcO bOdbOacOcOacO`cOabOdcOabOacOabOacOżacOdbOebO`O֝aOabOebO`bO֝aO`bO cOabOabOcOcbO ȳaOdbOabOdғcOdcOdכcOdcO`bO`bOacOabOdbOcbO֝bOaOża٢cOcOɾebOcbOccOaObO bOaO֝bOaObOaO֝bO bOaObO֝b֝O b OaOa h7 jO b t kO֝b֝t ٯkObt kOat7 jO֝bJAssO bJţAssObJAsŃsO֝bO bObO֝bOaOaObO bObOaO֝bO bOaO b ObOaO֝b֝OaOaOaO bO֝bObObOaO bO֝bOaOaObOaO bO֝bOaOaO֝bObO bOaO bObOaO֝bOoaOoaOraOraOr bOr֝bOrbOs bOsbOs֝bOZ bOZbOZaOZ֝bOZaO b htOattO֝bttObttOatt*2ii*2iŰi*1ij*1ih*1iҴj*1ij*1iŰi*1ii*1ih*@ih*@ih*;iҴj*;ij*;ij*;ih*;ii*;ih*;iŰi*:iҴj*:ij*:ij*:ih*:ih*:ii*:iŰi*cih*cih*`k*`k*`k*`k*`k*`٠`*`Ǣ`*`l*``*`k*`k*``*`k*`k*`l*`k*`٠`*`Ǣ`*`٠`*`Ǣ`*``*`Ǣ`*`٠`*``*`Ǣ`*`k*`k*`k*`l*`k*``*`٠`*`k*`Ǣ`*`k*`k*`k*``*`k*`٠`*`l*`k*`k*`k*`k*``*`Ǣ`*`k*`k*`l*`٠`*``*`Ǣ`*`٠`(7i(7i(i(i(4i(4i(6iӾq(6iӾq(i(i(i(i(i(i(i(i(~i(~i(i(i(i(i(b(i(i(i(i(i(i(i(i(i(i(i(i(i(i(ni(ni(oi(oi(qi(qi(mi(mi(ri(ri(si(si>Dͦ>D >D7>Z7>Z >Zͦ>W7>W >Wͦ>Y7>Yͦ>X >Xͦ>X75b5c55b5b55b5c5Ќc5c5b5b5b55b5b5b55c5b5b5b5c5c5`5b5ž5٢c55c5b55b5c5ғc5b5c5b5b5c5c5c5͂c5ݍ5c5b5c5b5c5b5c5b5c5b5Ěc5b5b55b5b5b5b5b555c5c5כc5c5b5b5b5b5c5b5b5b5c5b5b5b5c5c5b55b55b5b5b5ơc5c5b5b5b5b5c5c5b5b5@@ @ @@ *`k*`k*`Ǣ`*`k*`٠`*`k*`l*`k*`` mqhmqhmqm/ m/m/m/ ׁ֝֝֝? ?? bLqqA eA eA ecAml֝/`pp`lAipppppppèpp Ǹpݶppppp˭ppppppߩpppppp׳ppppkpppppppppppp6ppp ppppӾppɫpppppppappppppjѰppppͻppj٦pppžppppakpppppjppp666 ֝ b  j †j j ԝ ػm m  :  ` ލ` ԝ j `*`k ֝ a` ``   `` a` a` ׁ֝ a` `` a` a` a` `` a` a` a` a` ֝ a` `` a` `` a` a`    mqemqfmqm)m)JJ      66 b6a6`a6a6 b6qO dғcO `bO `bO ֝bO dbO abO aO `cO dcO abO abO dbO abO dbO ֝aO acO  cO abO ża٢cO abO abO cbO ccO cO dbO dכcO bO abO aЌcO dbO ɾebO aơcO ˙dcO abO `bO  cO ebO acO acO ĚcO żabO abO ֝aO dbO `bO ccO acO cbO acO ֝bO ՓaO cbO cO aO dcO cO abO żacO ebO dcO abO  bO cO dbO bO ebO dbO abO  bO abO `bO acO dbO dbO bO dcO `O dbO `bO dbO `bO cbO dbO acO cO dbO  ȳaO dcO a͂cO dcO abm2 fm2 fm2 mbmbmbmb"+`    *`k*`k*``*`k*`k*`k*`l*`٠`*`Ǣ`       mmmmmmmmȤqˤq55a5   5f5f5 5f5 f5j5 f5aa5 a5aa33 3ϻҟ`6ϻ` ϊbΚ  bˆb5b ļbbˆb bb ļ5bϊb Κb\i   ٻ`ڈ`/ /a7QQ  ` m`m m ׁ֝֝֝4 a4a4 f4q4f4aa4`a4 f4 b4 b4 4a4f4a4 f4f4aa222MMiMi\i\   m m`m m m m`m m`m mi   emi   cmˤl   fmˤl   cmi   mˤl   m(mmhm6mmm*13uiKhm(mmhm6mmm*13uiKhm(JţJJJţJJJJJJJaJJJaJ`J˔aJaJaJ``JaaJ˔aaJaJaڏaJaaJJJJJppJppa«a`4f4 f4 f4 f4aa4f4f4aa*``*`Ǣ`*`٠`   aaaa7777ԝ7ԝ777 ԝ j ` ` ԝ :  mqhmqhmqma`jaama`eaama`eama`ja ֝ ׁ֝ ֝ ׁ֝ ׁ֝ ֝ ׁ֝  :ʠ ֝  ԝʠ    †j  ֝      jնu   ػmնu   mնu ״  նu ݍ  ލ`նu ֝ uu   jնu   նu   `նu ׁ֝ ܵuu ֝֝uʠ ״ ʸu   ٹum >  >    öua  um  ui ݍݍ u  u ֝֝ uʠ  u ֝   ֝  ݍ   ״    ֝֝    > ״ ֝֝   ݍݍ p` p: pj pލ` pm pԝ p†j p p pj pػm oj o` oػm oԝ om o o†j o oލ` o: oj ԝ j ` ػm  j ԝ  m j ލ` ` †j : ԝ j `  †j ػm j : ލ` m  ػm ԝ m j †j  : ލ` j `  †j   j ػm ԝ : ` ލ` m j ԝ m j †j  ػm `  ލ` j : ԝ `  : ԝ ލ` ݍuնu : ׁ֝uu m uնu j ӹuնu  ֝uu u uնu ` uնu †j  uնu  ״ĸuնu ԝ ֝uu ػm ߷uնu j uնu †ju   | | RawTableInner ~ bucket_mask  ctrl   growth_left  `   m*]ϦH& u ލ`uu u uu u juu u ԝuu u `uu u muu u uu u juu u ػmuu u uuu u :uu u ԝ ` :  †j   uau j uuu  ״u u ػm uþuu j uuu ލ` ݍݍuȽuu u  u u ԝ ֝֝uʠu  ֝֝uʠu ` uiu m uu juu  u j uuu u Ψj uuuu u  w wj z  { MSKMu `uuu u j †juuu u j muuu u ۿm ػmuuu u m uuu u ţj ԝuuu u цj juuu u j ލ`uuu u m ju ػmu u uu ԝu u >uu ju u mu ލ`u ju uu u : ֵׁ֝uʠ ԝu ލ`u ju mu u ػmu ԝ ֝uʠ uu :uu u j ލ`uuu uuu uuu muuu ԝuuu juuu ػmuuu uuu u  w wj z  { MSKMu uuuu ԝuu uu juuu  ` j  ػm j ލ` †j : m ԝ j ލ` j ػm m ԝ u `  †j  : :u †ju ju ލ`u u mu u uu ԝu ػmu ju `u ԝ : ػm ` j  ލ` m  j †j&&&& "|0 Oatt&uO֝btt&uObtt&uO btt&uOatt&uu  &&u&u& &u& &u& &`& && G$$u u&uuu u&uuu u&uuu u&uuu u&uO b tt&uOatt&uOatt&uObtt&uO֝b֝tt&uu&uu&uu&uu&uu&uuu u &&j&& && bWu&uuu uu&uuu uu&uuu uu&uuu uu&uu&uu&uu&uu&uu&uu&uu&uu&uu&uu955955955955955955q955q955qq9559559559559``9``9h959l9l9hnȲn9lnȲn95nȲn9lnȲn9559f )))ߪ)))ߪ)ߪ k) k) k)r)s)u)s)u)s)ߪu)vu    'whu)vuuu)vuuu)w)vuuuh)w)vuuuh)w)vuuuh)o)m)qSԐ`Sے``S`S    Su TUTUTUTU TUTUTU TUTUTU 6sx% ܁h u  S`S`S   Svu vuS `S S S SbSŵSSļSŵSļSSbSbqpSqpSļqpSŵppShShSSbSèdSShSSSdShShSSSS̷5SSSSSSSSSbSSļSŵSSSSSSSSSSSSSSSϛqSSSļSèdSShShSŵShS̷5SbSSSdSSSSSShShS          -- V4"  #"   *"  11   8"         ..   Z    b      ("     W 66         :" @ q   )"  mAcore_intrinsicsderive_clone_copy&ч_&t7cmk&ч_&8mp\Nvfmt_helpers_for_deriveGG&ч_&u ׳_t  &ч_&W9à@i%%dvv&ч_&i.1gMapjvvGG&ч_&t{#{Y)&ч_&^/Mp vvGG&ч_&E\+ $crate::event'МWWWW&ч_&G?, Y)&ч_&_s9ΩD6  &ч_&p b-Y)&ч_&hii%dvv&ч_&]A)Ygeneric_assert_internals&&ч_&݅P'b˾pvNvvGG&ч_&p{,=matches`Y &ч_&ݼvmL..C.:&ч_&s?YC  &ч_&Aqa`Y&ч_&Z"<|vII&ч_&RFvpp0vvGG&ч_&?uپE)Y)&ч_&wv1  &ч_&ݠk:]$crate::__macro_support::concat(WY&ч_&88E$  &ч_&yJVT^-VK&ч_&&*\t-"bv&ч_&ݕܪ=ґ  &ч_&c8^":?X/Y)&ч_&ae(Eir%dvv&ч_&tg  &ч_&Ne:~ =\v &ч_&h ^J)&ч_&C^5 =\v &ч_&ݮ1,  &ч_&݁v7'pJvvGG&ч_&ejvN?Hr6&ч_&^B\}  &ч_&ݯsQE=saY)&ч_&$J[j  &ч_&݂lc6D`s =\v &ч_&!bv+L..C.:&ч_&l^%+q  &ч_&&6Mj}O \v derive_eq &ч_& EOܹ Y)&ч_&+8P< =\v &ч_&&R[Ŵ82[CY)&ч_&thmڜOpKvvGG&ч_&;s P  &ч_&Tk6 Y)&ч_&b8c?vb-Y)&ч_&'?Cpp>Z[<|vII&ч_&a* zuE \v&ч_&%gۡ,}O \vv &ч_&ݵVrxלpnvvGG&ч_&\Zp,Y)&ч_&݄L y1  &ч_&Ľ0^>/$crate::valueset(<WWW)W&ч_&݁7k#4' Q&ч_&S~>p-vvGG&ч_& 8a[-L}jO \vv &ч_&^S^AJ)Yv&&ч_&Jb'WY)&ч_&Pe+ .Y)&ч_&?,+֍&ч_&Y.Ө#yp0<|vII&ч_&?#)*>XY#&ч_&R7`.f(  &ч_&6_/ep vvGG&ч_&B!1  Y)&ч_&<ĥgms2   &ч_&j0SSC)&ч_&Ofxmvv&ч_&߲>T'I4&ч_&^)&s%Y)&ч_& bdk^iH%dvv&ч_&uxc5  &ч_&݆n.QP Y)&ч_&T@1؊:pX/vvGG&ч_& LZ/;p! vvGG&ч_&w;M>is%dvv&ч_&ݨ.b:Y)&ч_&:[  &ч_&*!y ju&ч_& /؅i%dvv&ч_&<3&ч_&CYXL22Y)&ч_&XYy}JO \vv &ч_&ݍ>tV)   &ч_&7~#&ч_&?m[vv&ч_&T p}uEO \vv &ч_&+JiA%dvv&ч_&tV9&ч_&ݺ]?',i\N%dvv&ч_&3m/p%vvGG&ч_&rX ,pk vvGG&ч_&cQ/Y)&ч_&Hw\i %dvv&ч_&Ђi"C$crate::callsite2(WWW'W&ч_&ݫ] xvtS"bv&ч_&1bܼH@7  &ч_&A?@&ч_&ݴ-mjvv&ч_&}2C)Yv&&ч_&P%9 ΈivO%dvv&ч_&=oc Y)&ч_&{zGL   &ч_&2X)  &ч_&ݤUp)vvGG&ч_&{dlKb9ip0%dvv&ч_&q0cN4Y)&ч_&ݛ L &ч_&<ͩqI: &ч_&~ַrLxp-vvGG&ч_&RMaw,Y)&ч_&5{  &ч_&jeR  &ч_&^LVzK$crate::__export::format_args!(Y fmt_internals&ч_&prvvGG&ч_&ݼTCDh*&ч_&s. } O \vv &ч_&3~Itc8"bv&ч_&BůxW>}O \vv &ч_&ݮHsalsa::database )EKKTK&ч_&.`M~~LY)&ч_&ݗJmJvv&ч_&Gɯs $&ч_&dn   &ч_&Ҿט  &ч_&Roeùhk  &ч_&ݢXR ^}sO \vv &ч_&ݎ |G@  &ч_&ݦoq  &ч_&XJtU"bv&ч_&ݚkpvvGG&ч_&&yItAii%dvv&ч_&.ψYY)&ч_&bu}O \vv &ч_&ݨڸ'i,Y)&ч_&H8  Y)&ч_&5d< vLiLa%dvv&ч_&ݾe8!p!b-Y)&ч_&pe5n[ \v&ч_&j  &ч_&| /tvN =\v &ч_&8lƂfY)&ч_&Ղcmvv&ч_&ݨJ+in%dvv&ч_& =:,Y)&ч_&݊2[>z1  &ч_&/ZUU&&ч_&E1# &ч_&tV\Ct-"bv&ч_&ݠz"vF~ &ч_&W^P= ,Y)&ч_&JEP&%&ч_&LÔpyvvGG&ч_&"O$g  &ч_&;SSVi %dvv&ч_&K_Qsalsa::query_group-"HKKSK&ч_&X =2   &ч_&o+VLi%dvv&ч_&qH7  &ч_&+ZZ?W2Y)&ч_&_0YpI vvGG&ч_&L*o1m ח  &ч_&tB02Y)&ч_&(aNmsvv&ч_&ijKKV*  &ч_&ݥ׫kO  &ч_&[ٖD 5WY &ч_&ݷ;%Tmvv&ч_&ո&Y)&ч_&ݞ;p9p vvGG&ч_&xl  &ч_&ݔ ӕD%J<|vII&ч_&ݦg˗) &ч_&@6)Yc8&ч_&Z8BF[ =\v &ч_&R8 3suE =\v &ч_&ݚAYɣ QL..C.:&ч_&ݎdna)pAvvGG&ч_&ݯj&tracing::trace,ЂWW!W&ч_&Al) &ч_&vy)RpvvGG&ч_&ݝ oRplvvGG&ч_&ݥq+Iq0,Y)&ч_&4m vv&ч_&ŻF[P&ч_&$_O Y)&ч_&H;|cpSvvGG&ч_&ݬt"ZN7  &ч_&dGpjvvGG&ч_&FNomvOvv&ч_&hu]$hJ  &ч_&PAR(L..C.:&ч_&ýzd  &ч_&ݼr PYv&&ч_&;*J:0 &ч_&o(P   &ч_&ǖg5p0 =\v &ч_&JM\  &ч_&"xRZGيfp vvGG&ч_& $C/5t-"bv&ч_&ݓQn9 &ч_&;Y)&ч_&x4)#pHvvGG&ч_&ݐQ(]]ٓ  &ч_&ݿWzxR  &ч_&[͊hi %dvv&ч_&mw)-pt vvGG&ч_&ݹ1D/(v`Y &ч_&ݶf~Hv!(Yv&ч_&ݓ^= t  &ч_&}2ucp vvGG&ч_&JKs$crate::match_astRL-"L"" "&ч_&sikb-Y)&ч_&#povvGG&ч_&0& Y)&ч_&# .41  &ч_&ݜ贚G,$crate::metadata)W8XXX&ч_&mpvvGG&ч_&\?}NY)&ч_&Sj`p-vvGG&ч_&X@fBB# &ч_&ﶝo4 (Y)&ч_&ݺ'1/&ч_& ,%pvvGG&ч_&yBo mrvv&ч_&ř.$crate::identify_callsite*>%X0XXX&ч_&ݤ.ωg"  &ч_&ݨm vv&ч_&^'X 8Y)&ч_&\' 6 &ч_&ŁBZpvvGG&ч_&ƀٙց#  &ч_&E %w)Y)&ч_&/rxxiI %dvv&ч_&ݑEo_%&ч_&hS~UY)&ч_&݄Ov{psvvGG&ч_&H V  &ч_&l  &ч_&'8(Y" =\v &ч_&,"/_;lY)&ч_&PxcpvvGG&ч_&|\GIvX/"HKKSK&ч_& @jk8Ѵ  &ч_&BeiK%dvv&ч_&݋J@.  &ч_&>.pa vvGG&ч_&ݳE~~}[O \vv &ч_&R/uE \v&ч_&ݯlzA =\v &ч_&݁Ke!_ =\v &ч_&ݠDx:qpmvvGG&ч_&|.1]MiP &ч_&. =\v &ч_&ݗO5?yiS%dvv&ч_&BIt 67  &ч_&݅%~V$3t-"bv&ч_&ID a)|j =\v &ч_&c^lU&Yv&&ч_&Ԧd|v).`Y &ч_&ݠ]YRϋ*&ч_&luF_#(Y)&ч_&afN-pLvvGG&ч_&u8P}p0O \vv &ч_&ݨ]V.R   &ч_&ݻ5\  &ч_&j"Խi %dvv&ч_&ݘ|кp-vvGG&ч_&݈mt)7A)&ч_&جQC  &ч_&ݠb V Y)&ч_&pJ'tH"bv&ч_&Z)   &ч_&6u$ Y)&ч_&v'utoVtX/"bv&ч_&ݠ*Ut "bv&ч_&݅{}rO \vv &ч_&ingM/,Y)&ч_&TY[$crate::fieldset3SWWW*W&ч_&ݸdLlTE<i  &ч_&(G*0xYpvvGG&ч_&|y2h%>L..C.:&ч_&k<m  &ч_&WV;yY)&ч_&ݺqJ =\v &ч_&qކِ=)   &ч_&7D(&ч_&Ü荸;i[%dvv&ч_&;2!(ؚ  &ч_&S5Yit %dvv&ч_&Hp邐k  &ч_&OH(3"'"R 5"$crate::__tracing_stringify3%W WW+W&ч_&BF4lv;`Y &ч_&ݣ9>w2#WWW*W&ч_&~v#ƪWWWW&ч_& f8L"" "&ч_&݂Ă'2"w) WWW*W&ч_&9\Xބ ?&Oх*LS}w ;7VWŅ{8izُq V͎m҈؆+Ao,Z?aۋ]I҇](D׉k9cۅ!,Vԍ QdÏR݌ N3  LtËEbt-AŊk/,]Ć̉KƈzȍEY݇݊4^ϋQn9MƇъ!b~NrXbَ"*@4<M{4FpϏguˌE*Ck0Yk8& φ߉"8f=Eb#w +3wވiIԌȵOn/اb65_#40͟S2PœhU2zϳ)p>uۣ[æl1\zƥʸӯ֩.GܛCh_-˹3>  /ǽe+3NbYP`%;ib̢+g5fdG)gƙDeū+c~+Dm`6:f ERjf;_,vͲK)"s͚?֞ĻGZo Ҷ^O2P˷cww>t:'֔ 1Tä9+´ ږCUͰu 4\Ր" `4+ܕ κap×Ҫc5 ˼ٱ 9xi< RapғP$W%V7"4DU*RwS@/|vdJ_¶{ƔРR|OC}EgߝX]E"jʖP7Y&*V5BZy|OfQQ`sSnݾŐU"Sqï̕ȧ.`.eˣKp}e\!uY!L?j3ɱ)Ʃh,Ҭґ7++|c٭yܒ@)RV̛B$LoޤN?״ݿ#ƞ^&p3# .Owј> uI@%}ߗP;%Tª~W$4guODHT d &ч_&-zf0;F&ч_&P_;"F&ч_&UF &ч_&ݯy n>&ч_&^8 &ч_&ݿ.``&ч_&]/&ч_&0R@ &ч_&> T&ч_& ; =&ч_&Dg{*L&ч_&)3hP&ч_& 6eIh&ч_&ޙU*PU&ч_&@ &ч_&8q&ч_&ݘםR&ч_&z0ս&ч_&)C"e &ч_&J Oh&ч_&n#!.L&ч_&]OV& M&ч_&WJ'&ч_&ݻ`&0 )&ч_&p{'*d&ч_&ݿ{&&ч_&T 0&*0[`&ч_&ݵ,N&ч_&F,/&ч_&ݙ\`. :&ч_&ӟw/@Q&ч_&'?3&ч_&0*)b^( &ч_&+p7b &ч_& jQ1p &ч_&8 4pX&ч_&ݠ@{4!&ч_&a"8P &ч_&v:`M&ч_&g;=&ч_&ݕ>>p6;&ч_&'Kh?{&ч_&aP? $r&ч_&V?&ч_&ݡ)?Q2&ч_&AWlBP &ч_&B0 &ч_&k=>ot &ч_&HF@^ &ч_&|-H}3 &ч_&JP&ч_&yL):&ч_&6ZMI9 &ч_&^r0gQ`ElG&ч_&9S7DZ&ч_&׼#T6d0&ч_&,@U0- &ч_&$FR,V + &ч_&)p[&ч_&L"\ps&ч_&9F\eL&ч_&T_0?&ч_&/aa'&ч_&WXiH&ч_&)ljBP&ч_&nl`h!&ч_& l0p&ч_&ݡ}`Ylp2&ч_&mƇ;&ч_&4 %m&ч_&aEl&H&ч_&"XriTP&ч_&l)r~ &ч_&ݸqjs&ч_&ݽn&ч_&Ovi&ч_&Vl`&ч_&g1B5x&ч_&ݚ+nU&ч_&ݤUtsPEh&ч_&ݑ{p/Cp&ч_&Hx{ sd &ч_&|19m0+ &ч_&ݑ9~P#&ч_&-.~e&ч_&]N~A&ч_&E`t&ч_&,` ނK&ч_&݊]+&ч_&00&ч_&ݷ61&ч_&9{}&ч_&󵿄"&ч_&݌ x&ч_&+@_@0 &ч_&qs؊JϮ&ч_&+&Tw^&ч_&:<p&ч_&ݰnyWa&ч_&6R(>&ч_&{JӒ&ч_&+- &ч_&>/XU &ч_&݉(Em &ч_&z&ч_&@ &ч_&ݳW쓠&ч_&֡ &ч_&ʶ0az&ч_&C阗І&ч_&ϬUm{ &ч_&ݢk9 &ч_&_чPK&ч_&~ڟK v&ч_&1L@FR&ч_&{ :s-&ч_&bpu&ч_&N `k&ч_&ݯIpn&ч_&ԳqS&ч_&jPu&ч_&ݬ(&ч_&ݽ֨&ч_&qxKW&ч_&ݲߩp)}&ч_&0 &ч_&ݽx[>&ч_&ݒj]`}&ч_&ݚ:&ч_& -Z&ч_&uHn_&ч_&ݞ^&ч_&&ٲp6&ч_&o۲N&ч_&! ][&ч_&ݰ#`)&ч_&&ч_&Mg%a`Z&ч_&,<鷠j&ч_& #$@. &ч_&(k6&ч_&; n+ &ч_&O~żA&ч_&* `h2 &ч_&4$v+&ч_&ݱ5P &ч_&dϮu &ч_&ݟl, &ч_&mTM &ч_& Pȴ &ч_&Ʊ%(&ч_& |H&ч_&|4(gP7&ч_&ɰ5 &ч_&8!a q &ч_&݊Vepn&ч_&ݯ#XҐ &ч_&݋>A> &ч_&۱*@0ϱ &ч_& &ч_&5 w&ч_& 8p&ч_&H'ypTv+ &ч_&X8M&ч_&ݬU0J#w &ч_&ݍ_PQ^ &ч_&5 o&ч_&|q <&ч_&hYl&ч_&( &ч_&̵bF&ч_&2K-V{ &ч_&x@ʁ&ч_&&ч_&zxp&ч_&݉#>"&ч_&ٕĴ&ч_&dܘ aCz&ч_&ݧ}&ч_&/mЃO &ч_&J &ч_&Дѹ &ч_&[ A&ч_&OAԾ&ч_&hZ,AQ&ч_&tO &ч_&ݴ_@S &ч_&KN&ч_&ea#&ч_&ݪA &ч_&ݷ|&ч_&rL %L&ч_&Pu] &ч_&ݬ1 &ч_&݂;T Q &ч_&ݩ^" z&ч_&و 1|&ч_&wF X{Y&ч_&qgz-&ч_&ݴzAE&ч_&a?#&ч_&.1^&ч_&܀j ^&ч_&@ Q+y&ч_&n ձ &ч_&!'aU'&ч_&֘{ &ч_&ݬҴ? &ч_&{Nj1&ч_&݋a~8&ч_&TCo &ч_&7+6&ч_&A9׆&ч_&Q!A &ч_&ݍ"+&ч_&q(q &ч_& )hj&ч_&݈sf)Nt&ч_& Q&ч_&ݫmUA@&ч_&ݢq%CBk&ч_&ݵ@C8&ч_&T+CG&ч_&ںCתR&ч_&݉K R&ч_&cN1wNQo^ &ч_&$T%P1M&ч_&ݪ)Q!&ч_&GP{ &ч_&ݒxCS_`&ч_&WSUa8&ч_&zVV͡&ч_& U!@&ч_&W\W &ч_&6^S&ч_&݉wF^ gi&ч_&F`F&ч_&v`a=?&ч_&^/v&ч_&ݞ!h`Ԧ&ч_&F^-* &ч_&>cqH܀ &ч_&ق bD &ч_& 4Rgs&ч_&uӧZh[>&ч_&qhgQa' &ч_&Dj &ч_&ݵ}|aFA&ч_&ݞm}1g&ч_&ݒn|ae|&ч_&|+sC &ч_&vK:rzP &ч_& {s1 &ч_&f;{0&ч_&zz5N &ч_&C-l!;&ч_&[mXA4|5&ч_&V2a &ч_&ݓQ!P &ч_&Ϝt&ч_&~q9&ч_& bτ&ч_&p7&ч_&ݽЕ9v:&ч_&݃1&ч_&xqU_` &ч_&9+Gd &ч_& {x%*&ч_&ݾ@៓M &ч_&ݲ*1u#&ч_&9q[&ч_&r賤,&ч_&/b@!l&ч_&݊I陘&ч_&ZڴMK~&ч_&h &ч_&ݷ"Qw&ч_&翓q>&ч_&XS4E&ч_&YOA&ч_&YHaC&ч_&<4!Y&ч_&|Q0:&ч_&lRu&ч_&`2N1&ч_&Hm녲ɲE&ч_&ݍ'9g6&ч_& 51^&ч_&έa4&ч_&115@~&ч_&~%!֗&ч_&ݵָ1 &ч_&ݽ1^ &ч_&ݬϽy&ч_&v?,&ч_&݊Ǻ/&ч_&ݨq;v4&ч_&d̕˫q| &ч_&s˖&ч_&9~$ &ч_&m˱!&ч_&ݣaz-́v9%&ч_&n/̑ &ч_&݆a &ч_&a-V^&ч_&jkYсD&ч_&t%10,&ч_& gWav&ч_&ݍKԁQ&ч_&Q뒖Ig&ч_&(8:בD&ч_&ݲh8`&ч_&݉&*;[p&ч_&a@Odځ䃝&ч_&qQ &ч_&ݔQa &ч_&w ! &ч_&?h&ч_&1, <&ч_&ˠzQ‚_&ч_& &ч_&ݴ&ч_&*IQJ[&ч_&>A!r&ч_& qOL&ч_&ݖCaӋ&ч_&*豹M&ч_&f5c= &ч_&_E&ч_&msq &ч_&\\Hat&ч_&Jl&ч_&ݸROa&ч_&}#a&&ч_&sk&ч_&21ye&ч_&261ʣ&ч_&ݞwyQzC&ч_&ڹN&ч_&zd:3&ч_&O&ч_&&z'&ч_&1=[&ч_&jž &ч_&ݏ6Ⓘ&ч_&lͨiQ&ч_&Uh+&ч_&݇G92 w&ч_&&Ҥi&ч_&-3ЀB@&ч_&݈eH2&ч_&2]"c &ч_&ݱ=™k &ч_&+2xs&ч_&;5Uj &ч_& !b)&ч_&,/!TK &ч_&+x!B> &ч_&e&"-(&ч_&ryK'&ч_&MȂ(R}&ч_&iS)Bf` &ч_&ݪ&K &ч_& ."X&ч_&0RK&ч_&ݿH 1o&ч_&6"xv&ч_&ݾ6s&ч_&W8z&ч_&u8V&ч_&?v%9#lz&ч_&98};A&ч_&ȅ;B\3&ч_&!b=R~J&ч_&ݕ;bG"4 &ч_&ݷT>@ȼ&ч_&7!@7&ч_&żA"v&ч_&Mas@O&ч_&C&ч_&xA/XFBi&ч_&$EFREY&ч_&ݺ^I, &ч_&T&fJT &ч_& KQ&ч_&ݗ6L{&ч_&uMNS&ч_&݉1[N@'&ч_&2j}K½ن&ч_&o2PnL&ч_&ݽQQn&ч_&ݧC!1M2\ &ч_&LcPJ0 &ч_&"7JЖ &ч_&HVve&ч_&wY" &ч_&݄ROY2RC&ч_&ݪQZ"_h&ч_&]M@\Dm&ч_&݁pZB8] &ч_&n@_7&ч_&`2c<&ч_&݁`BY&ч_&Gb"&ч_&S7`r&ч_&tQj{&ч_&`jBo &ч_&ݐmG&ч_&>*nP&ч_&i`->o&ч_&TnR&ч_&4)m2^\&ч_&qrW&ч_&݁m&ч_&ݾ¸t¸U7&ч_&ݝKv&ч_&;A"JvbӪt&ч_&bPsvg &ч_&((y &ч_&+q{rV&ч_&4&|2Y&ч_&ݖ~2Ѻ &ч_&ݩcR]&ч_&x;̂"2I&ч_&%Bv+&ч_&' >ꉲ1&ч_&ݩ0rIݻ &ч_& 365&ч_&p"/b&ч_&ݘ&ч_&ݻ˲ɇ&ч_&0ur}a&ч_&C0묛&ч_&.3&ч_&݄>T&ч_&vhҎl&ч_&ݘCB2v]=&ч_&?Yr&ч_&'-&ч_&kuG &ч_&mӠX&ч_&<¦&ч_&ݧ61&ч_& V/TaZ&ч_& &ч_&݈b K &ч_&R@m&ч_&\imSsw3&ч_&J8S3b&ч_&ݧMSC&ч_&݀W>j&ч_&[x@>YSeY &ч_&UJZ:&ч_&Zm\c0`}&ч_&V `S!,&ч_& B`T&ч_&߆d:&ч_&M0eSڹ9&ч_&yds&ч_&"âh&ч_&#i e&ч_&ݙqoZh&ч_&ݽ_<lcU&ч_&=~OnT-[ &ч_&ILo@&ч_& )pH &ч_&ݎzq.:&ч_&r[&ч_&] .pC_ &ч_&݇9u)&ч_&ݎv㥟&ч_&swc6"&ч_&ݯe!{t2&ч_&+|&ч_&ݼ8};OW &ч_&6&ч_&۰s}Dc&ч_&"hn7&ч_&Ρ8&ч_& pd&ч_&D &ч_&ݠl&&ч_&݃ &ч_&ݑN4';&ч_&3}h#)&ч_&݁(L{&ч_&Cҭ3| &ч_&݌ͫC8&ч_&Nhk+S&ч_&ݲt-F&ч_&G?i&ч_&v>@tW^&ч_&ݩ;?&ч_&ݥTB j&ч_&iyC$1&ч_&/D0&ч_&g@H' &ч_&*kIo4&ч_&ݑ}UJ&ч_&NC&ч_&ݞ3NQ ~&ч_&MTg &ч_&݀MUt`&ч_&ݟU&ч_&5V&ч_&ԟY&ч_&ݏCZm"&ч_&ݛU_YT.&ч_&ՠZϡ1 &ч_&݇[\]&qD&ч_&=B0^ٻ &ч_&ݷZ] &ч_&ݣH`R&ч_&ݏKO`Sk&ч_&hb4 &ч_&b&ч_&LdT@| &ч_& *e`K&ч_&t|f4s&ч_&fsy&ч_&ݶZh{V &ч_&hKeX7 &ч_&kG&ч_&rmB&ч_&B&t4 &ч_&l@uR&ч_&1-v8w&ч_&쑒w$Ia&ч_&!Axu&ч_&݈txty;&ч_&݂z؈&ч_&z}s\ &ч_&Kh~;.&ч_&1(hR&ч_&tu$&ч_&ݸ?8ς*&ч_&xx؃TN&&ч_&,Th&ч_&6g=c&ч_&[ׇ$#&ч_&v;f"&ч_&j@/ &ч_&OBMȍ4-~&ч_&5BfDtO&ч_&ݓOɏt$k&ч_&ݽb4&ч_&fIzT-&ч_&ݗ*ۖ$ق"&ч_& }&ч_&ݩR]T&ч_&Q<ɇ &ч_&݄bo&ч_&Rݛ&ч_&jN&ч_&8؝c&ч_&f<}&ч_&fPBT5&ч_&7K $@ &ч_&݅d?&ч_&ݫp4N&ч_&ݓ1$I2&ч_&pMEMd` &ч_&3$t&ч_&kdߘ&ч_&ruF2&ч_&kn«Tz`&ч_&,|4%&ч_&ʈ$&ч_&ʹڮH;&ч_&mvw&ч_& &ч_&n>4)&ч_&=ld&ч_&E, &ч_&29&ч_&6|aF&ч_&=aKt&ч_&{eZ&ч_&Dև44A &ч_&;i4&ч_&q5tEѹ&ч_&;(0&ч_&2>1, &ч_&k(Dl &ч_&Ժs &ч_&j &ч_&ݮ4; &ч_&TFF&ч_&LDɴ&ч_&R4:&ч_&:KDܛ&ч_&18ԥ~ &ч_&vT &ч_&2(pϤ*9&ч_&ݹ_)W&ч_&KE&ч_&y˛&ч_& ؔ[&ч_&ؤ&ч_&ݲڴSd &ч_&G'm&ч_&O6&ч_&0i 'P&ч_&ݤ(j&ч_&+ը$_$&ч_&mM!w&ч_&О7&ч_&Kt&ч_&'4&ч_&ͼ-dRl&ч_&pj"DE&ч_&Ot&ч_&ݥ3tH&ч_&ݙ5'[c&ч_&ݓ7; R&ч_&~v$T&ч_&b&ч_&ݠcTi(&ч_&*$hpG &ч_&Ü2/k! &ч_&؂EjjMb&ч_&-ġ%e &ч_&%վ&ч_&Q %><&ч_&ղr {&ч_&eS 3&ч_&@uu %h&ч_&.% &ч_&#oeC/&ч_&ݙ\Q%&ч_&ȜH4Q &ч_&~=@ &ч_& &ч_& &ч_&bU &ч_&ݴן+%E&&ч_&'&ч_& 5HQ&ч_&d HE&ч_&-8&ч_&ݫz~#ʯ.&ч_&Ț$C&ч_&Ut!5)&ч_&Zbu'u)W&ч_&>F(d&ч_&Q%)u&ч_&ݥ3*Mp&ч_&$[(&ч_&݄X@,-w6&ч_&l-/&ч_&sFɍ*u&ч_&r)7O &ч_& .5 &ч_&]M.CS5 &ч_&W2uᬽ&ч_&.$I35IM< &ч_&g+g: &ч_&;[7u3&ч_&S8~ &ч_&A=&5&ч_&m$>%&ч_&?LD&ч_&p?E8I&ч_&$@Yk&ч_&LJnB5&ч_&Q%B &ч_&@*=pN &ч_&qEU(&ч_&EF&ч_&ȗxE&ч_&ݵi!Iߡ&ч_&).nIr&ч_&ݠ(KŊ@&ч_&?Is&ч_& JEI &ч_&W_Lu{ &ч_&c~0LM &ч_&!Pu/ &ч_&@nQ%` &ч_&NkR1T&ч_&TU2 &ч_&H2VU&ч_&ݵXOA &ч_&nxYu&ч_&MR;ZՌЬ&ч_&ݓ%4[5]~ &ч_&@`]u/&ч_&jI^H&ч_&݅_5&ч_&XO`&)&ч_&ݧmae&ч_&ɘbʻ&ч_&.1b_7&ч_& .du"o&ч_&̢^Y$ &ч_&Ljnd &ч_& &i\0&ч_&Un '&ч_&[ YZo&ч_&iHo?qs&ч_&ݏarl&ч_&Dlru&ч_&&Mt+&ч_&{"uw&ч_&='un &ч_&٬w5sx&ч_&+x/&ч_&:wծI: &ч_&ˆzK&ч_&8{&ч_&ʰ{H&ч_&EK`}C&ч_&ݓG%a~6Y&ч_&ݝ}B&ч_&OiF&ч_&h &ч_&-R\}E+m &ч_&ݫzh5ZV&ч_&?vՄe X&ч_&[ 7 &ч_&]rW &ч_&݌M fH &ч_&ݢUzU^ &ч_&+ƱP<&ч_&s[U{ &ч_&w4 &ч_&ݢBy%Iʺ&ч_&n@p&ч_&H]lҎ0&ч_&zVU3զ&ч_&z&ч_&/[y» &ч_& Jj}; &ч_&ݢx# &ч_&̣zE &ч_&ci-q&ч_&ݺ2&ч_&W&ч_&ݻwkEŻ&ч_&'uޕ% &ч_&݁|H]&ч_&Eu?&ч_&n 8&ч_&ݷ$sq&ч_&ݪ #;X &ч_&ܟeR|&ч_&{py5(&ч_&ݲ8&ч_&{ja&ч_&ݴYG4Z&ч_&e k&ч_&;1;&ч_&ݡ˭5&ч_&݌kEWR&ч_&݋z "H &ч_&ݹ65 &ч_&4ױ&ч_&[B+E&ч_&fZ]mP&ч_&݅A&ч_&ݟDEHR&ч_&x 5Pe&ч_&yj` &ч_&ke *M&ч_&ݿK&ч_&= %T&ч_&ݞtUFy&ч_&tDEؤ &ч_&P*A+ &ч_&\հ@ &ч_&ݦFֿI&ч_&c.&ч_&Qĵ; &ч_& 4uJ &ч_&نTR˅&ч_&ݦ]5 &ч_&`>NUkW&ч_&.E&&ч_&:#[Tȁ\ &ч_&;23օ!&ч_&o3O&ч_&!Z}م&ч_&Me*_ &ч_&ݎE;us&ч_&J %p&ч_&Q)Ď&ч_&;ൿy&ч_&ݥ5c&ч_&>h}&ч_&]֎E7@&ч_&LǢ 9&ч_&WFI &ч_&q#D$uU&ч_& zG&ч_&% &ч_&ge &ч_&zfe&ч_&wqx&ч_&7OD &ч_&m*/&ч_&)%v &ч_&I-&ч_&x:V5o&ч_&9buܜ&ч_&gk%ҽ&ч_&ݱÐT&ч_&݁kY&ч_&R(]a&ч_&E@H&eÿ &ч_&ݧ$ŧ &ч_&[-%ޔ&ч_&ݚJ?W&ч_&?+ F5j&ч_&Ϻ>&&ч_&0,TRn&ч_&W Vy&ч_&SBz  &ч_&DN t&ч_&ԡ fϫ&ч_&oHKF&ч_&&ч_&kF8&ч_&ݠ{ [}&ч_&H&L&ч_&E64&ч_&mV0&ч_&"@(h /&ч_&m+vOɺ&ч_&ݤq% &ч_&ݽD^V+N &ч_&$|6$VJ&ч_&.j &ч_&݈Ðsd &ч_&nJ ' &ч_& !v &ч_&+,++j&ч_&fź-Vh”&ч_&ݪe' .FAc&ч_&ADe/Q&ч_&#>-bo&ч_&kv&I1G&ч_&um2r&ч_&|7f &ч_&X?8Vʹ&ч_&+g:fC"&ч_&!>;o &ч_&{~fS&ч_&o&ч_&݌:&ч_&ݲH'rv&ч_&$U삆R&ч_&ĕ&;&ч_&ݖ 5&ч_&o3&݄&ч_&ݹ pˬ&ч_&ݍ󇍦 &ч_&Y2v{&ч_&ݺOB/&ч_&Bv&ч_&Iݍ)&ч_&\Ւq&ч_&,uwg&ч_&ݯ 5fe &ч_&݋`j&}(&ч_&we6p&ч_&ݔNvuH&ч_&Sy &ч_&Hk>v &ч_&(F<&ч_&݋T &ч_&̴a<&ч_&u]&ч_&dIb&ч_&*0 Q5Q&ч_&ݢDc0h&ч_&Kީl &ч_&(n) F&ч_&k&ч_& ڨ۞&ч_&ݭ>F&ч_&ݺ!-&ч_& q&ч_&GѰ&kh&ч_&ݏם} &ч_&ϪO&ч_&r[*&ч_&ZݯH*U&ч_&ZjNJ &ч_&*26s&ч_&ݹBT?&ч_&݋v'&ч_&_g|'%G&ч_&oS^FJ&ч_&ʶVwa]&ч_& VVR/&ч_&ݯF&ч_&#!*&ч_&%6-?&ч_&Γ:V}&ч_&82}v /&ч_&&xA|&ч_&]<{&ч_&ݴ'4V(&ч_&ݣ\Φ'=&ч_& E &ч_&5y*Fl&ч_&;2O &ч_&,p6RY[&ч_&YrV#U&ч_&jbb ڹ &ч_&)a٦~ &ч_&).]&ч_&nAs=L&ч_&ݏr4F9&ч_&l&&ч_&ARVG&ч_&#6VI &ч_&3ʦƥ &ч_&ݽ]ve&ч_&;\mL&ч_&fM&ч_&f_*~&ч_&H0 {&ч_&=$&ч_&݅ ]Fs&ч_&Fו&ч_&zj֢J &ч_&iD1&ч_&ݻ_kP˾&ч_& 7uK&ч_&r &ч_&aVϗ&ч_&AB& &ч_&EbJf &ч_&━&8&ч_& $w&ч_&eTVTA &ч_&y4 Y#&ч_&ݴxfMN&ч_&ݧP dD&ч_&ݦ y&ч_&ՌNI&ч_&ݢKq6m&ч_&QKE6p&ч_& (&ч_&ʟ;{\ &ч_&'8P]b &ч_&s,;h&ч_& )%y&ч_&ݗw! &ч_&CWܟ &ч_& &ч_&ݫ`un&ч_&/&ч_&ݕ|U &ч_&9\ &ч_&dc&ч_&'~&ч_&b5Eצ&ч_&ݵy7N&ч_&ݹ!g&ч_&݂!~B&ч_&ݕR2&ч_&A&ч_&ݳ {&ч_&s 8&ч_&8gg!VR&ч_& 5"G&ч_&ݟ"s&ч_&݀d_ &ч_&d &ч_&&́&ч_&d*' &ч_& lD*G(&ч_&GL*7b9&ч_&W/7P/ &ч_&"u[17U&ч_&1{<&ч_& 4x &ч_& 5;&ч_&|:h%&ч_&ݷٛ;5&ч_&PV;P &ч_&ݾ},:C &ч_&-y9>g"F&ч_&ݘtAg<&ч_&ݼ{dBWy&ч_&݇C'I&ч_&d3Bw &ч_&yΥEck&ч_&>xFGVKM&ч_&ݕG &ч_&C=ז &ч_& ӳBMZ &ч_&.JG&ч_&ݴT/L&#}&ч_&a*Ng &ч_&칋O_&ч_&ݟ^~tP7E&&ч_&ϥQs&ч_&:ZQWe&ч_&k%Pb:&ч_&VmQbO{&ч_&ݘ[h?Q-:&ч_&ZVGl&ч_&ݢzW8m>&ч_&X( &ч_&@9VZVWG*&ч_&ێfZlj&ч_& _LYw&ч_&J׷G\L#&ч_&ݓǙ}VWrO&ч_&Wׯ &ч_&^_ &ч_&KM`t &ч_&R5?aת &ч_&M-b'&ч_&׀bWio&ч_&`"gg1&ч_&ھ{?gg&ч_&J+g'T&ч_&6Gg5&ч_&aHWiW{ &ч_&7-hyG &ч_&8m/mg&ч_&ݞdnwn9V&ч_&ݟ׿o&ч_&O*Jp'}p&ч_&7q׉]&ч_&CrW.{K&ч_& kob &ч_&:m4b &ч_&P#u&ч_& u'&ч_&aU w &ч_&ݲZv" &ч_&byOG &ч_&|Sz$&ч_&!3{w&ч_&ݢIUz'o&ч_&ݣ(0&ч_&G7g*H&ч_&]Ʃ&ч_&,7{'ƕ&ч_&넷ս* &ч_&hw N&ч_&>ؑ7۵.&ч_&{06wN&ч_&@h[4&ч_&#翢&ч_&6ʶG@r &ч_&8wԗ &ч_&ݜd2&ч_&旀̽7J&ч_&촏]&ч_&ݡ)W:&ч_&lS g^&ч_&'&&ч_&ݬ?Ç3&ч_&ݞaiq&ч_&ݸƇe&ч_&2=p&ч_&ݷg'm&ч_&?ȧ|K&ч_&(&ч_&> ;G&ч_&݌@#&ч_&ݳS*d&ч_&ʠzm&ч_&ݰ &ч_&݌2x&ч_&U*&ч_&ݥbx&ч_&p&ч_& ̇W; &ч_&1wtA_ &ч_&, xw&ч_&b"A&ч_&TW f &ч_&dC ܄&ч_&ݮ>BrI&ч_&.P.&ч_&/ݴ &ч_&uG8 &ч_&[(Ux\ &ч_&mI7}&ч_&ݻX1&ч_&#Ȅ &ч_&rHs &ч_&? ' &ч_&ԡR"(3&ч_&ݺ$-#oiH&ч_&Y7$&ч_&/*J$cyi&ч_&ݿF &ч_&*4'&ч_&ɏ(Տf&ч_&ݎPu(=W^ &ч_&'+XDlA&ч_&Ϭ-/&ч_&Z91 &ч_&4H&ч_&1w 6xb &ч_&!]7&ч_&Hf8&ч_&wa6HL' &ч_&ݳ:X&ч_&`Ah1 &ч_&XB(t'&ч_&ݻ=CZq &ч_&5AD &ч_&ݡBE8J&ч_&zAF>&ч_&]FX> &ч_&?Hl&ч_&ݾxIHؠ"&ч_&u)IF0 &ч_&lL&ч_&_AO( &ч_&K?Qhī&ч_&QHQ &ч_&`EUx&ч_&cVx?, &ч_&de[x1&ч_&ݼl\x[U'&ч_&'{]Ȗ &ч_&݇'^xRs&ч_&7,h` &ч_&4 bx·&ч_&CcHK &ч_& ,dߒ&ч_&9 hhn&ч_&^k&ч_&ݲlH}&ч_&ݲ;mh&ч_&u"2m8 &ч_&ADp8.&ч_&ݩ.qO &ч_&r&ч_&`` uxG8&ч_&1jvx&ч_&pBy8?/&ч_&q}^hvfR &ч_&5ֽ炸{g&ч_&9yX &ч_&yH% &ч_&ݱa. &ч_&l^y&ч_&<"pL&ч_&6x_&ч_&h &ч_&+xt%&ч_&ݲNౖXh+&ч_&n`&ч_&L&ч_&ݨOxJ&ч_&NV-zx&ч_&ݑ]P'h|B&ч_&X &ч_&O==bi &ч_&v05So&ч_&'hDL&ч_&ݒeǕX9 &ч_&\hU&ч_&_Ѥx&ч_&݈6gچ&ч_&7b[(|&ч_&קz &ч_& ިh14&ч_&n񅻨p&ч_&ݺȳ&ч_&o3> &ч_&vGkh &ч_&,Eӯ@&ч_&U^7&ч_&!`c&ч_&}gG &ч_&c8¢J&ч_&[&ч_&øɼ@&ч_&T4h%r&ч_&Ւ83/ &ч_&ѸӒ-C&ч_&`,86&ч_&ܙNrˈHC&ч_&ݼb|z&ч_&tn/h}C&ч_&ݮu;шc& &ч_&׿Ә%c- &ч_&1C&ч_&3,{S&ч_&oNXG&ч_&ݪ(&ч_&3 ޘʁ)&ч_&ݐ㔝M&ч_& a&ч_&4SB&ч_&y,x%&ч_&tc~鸴Ө&ч_&ݕ,(4?&ч_&ݷ=(_&ч_&8"ꈐ"&ч_&ݠ_[&ч_& =}&ч_&JXE/&ч_&EZHq&ч_&VYX6&ч_&N ⯇&ч_&V'3&ч_&K0  &ч_&>7yDIY&ч_&5h8&ч_&rZ9X&ч_&ݮY:Y:#&ч_&iH:IN&ч_&M>-iA &ч_&ݥ{{=&ч_&ݔ:G/ 4 &ч_&ݺC5wf&ч_&ݣrx[Cz&ч_&b'dE J&ч_&ƖE9,&ч_&NojF M &ч_&#JD)6i &ч_&VclJSƐd&ч_&z, &ч_&00 D&ч_&ݎwQ( &ч_&|j9.&ч_&U"&ч_&P / &ч_&}s&ч_&Ɗ٧L&ч_&1XX~4T &ч_&ݞ&&ч_&9,&ч_&-LTo.&ч_&ݢ듭8 &ч_&f,&ч_&ݯ&ч_&mB!Vu&ч_&ז -&ч_&]Te9w-&ч_&$/{צ \8&ч_&ݔ` ,I<&ч_&?v>&ч_&ݝ ?&ч_&JȪ|&ч_&I&ч_&J.FMYL$&ч_&ߴWH&ч_& x !&ч_&݋ ՞ &ч_&ݫKiOy &ч_&CR 9K&ч_&+6߯O &ч_&A &ч_&JӫI)&ч_&ݘڴ~X&ч_&b ݰ&ч_&TжI>b&ч_&Ms) &ч_&Ջ^iy&ч_&rfȺ6&ч_&ݡ`8/҇&ч_&f9 &ч_&A90k&ч_&ݮ,ܑS6 &ч_&[@ʿI`&ч_& ?xsioH&ч_&bU_sf&ч_&ݑ6l%&ч_&>_éN1c&ч_&*oy &ч_&O̸v &ч_&a'iy&ч_&FǹՆB&ч_&ݮ:YE&ч_&lZI&ч_&:Yyp&ч_&}9ƙi.m&ч_&pi&ч_&ݹ:xI&ч_&ݖ I&ч_&݌ ]f &ч_&sJIXӧ &ч_&ݓIkO &ч_&I{GA1 &ч_&݆VM)t> &ч_&ݬ&ч_&Q:LO&ч_&>YdM &ч_&D8ީ &ч_&ݡ m &ч_&܀ &ч_&wEU &ч_&̮/&ч_&8>IU&ч_&۫n&ч_&݉Yޠ&ч_&݆)hx&ч_&hf}䩷r) &ч_&7Q'"&ч_&i9}&ч_&C!y`$*&ч_&Aq)&ч_&V5N&ч_&KY&ч_&5i|9+ze&ч_&<2GIW}&ч_& ׈ 3m&ч_&D*I4&ч_&.,R &ч_&8@" &ч_&žC &ч_&ˋY&ч_&ݰ%ZY&ч_&6<rJ&ч_&ݴE&ч_&ƺP&ч_&ݺ+~|_;&ч_&t h&ч_&uӯ(yg<&ч_&Qj)&ч_&ܬ]ʢ&ч_&X?7 &ч_&H8)$ &ч_&,p&ч_&{ĸ*t7&ч_&Td.&ч_&ݹf7&ч_&ݒ0z &ч_&mqY&ч_&ďd:r&ч_&ݢ\a &ч_&:  &ч_&NEʣ!&ч_&\DZ&ч_&@uZg&&ч_&P`"(&ч_&*S#Z&ч_&i6#&ч_&:[%J&ч_&1"%U&ч_&ɵ&m&ч_&)j &ч_&)E#+/&ч_&ݏ`a-*r&ч_&0 {o07&ч_&&|1`z&ч_&:2; &ч_&fU 4z&ч_&'8$ &ч_&FO9*&ч_&:I8 &ч_&_};!D&ч_&݌}; Sw&ч_& <$=Z8&ч_&׹%>l\&ч_&ݻ <:W&ч_&+>H&ч_&2&ч_&k ~Q9(&ч_&Q= 6&ч_& '{eY &ч_&TwM&ч_&ZƄn^&ч_&EX K&ч_&zt t&ч_&ݕn K'b&ч_&GVh &ч_&ݡϢ,&ч_&l[+{ &ч_&A k`&ч_&݉; 1 &ч_&݋2&ч_&(!D.1&ч_&f{n[+Y&ч_&|p&ч_&VAKS;&ч_&3 OJ&ч_&3Z!VA&ч_&ݕ'C3C &ч_&*S'#&ч_&9b$&ч_&>{ &ч_&''&c&ч_&B62 V &ч_&({V&ч_&ݾG)&ч_&h'b[/H &ч_&B$+6&ч_&ݷS- y&ч_&ݲ.%&ч_&ݎ#2o &ч_& e3 X&ч_& =O4[cx&ч_&'2[X &ч_&ݓȁ6kq&ч_&!"}6ǩ&ч_&ݚo?8Sg&ч_&@F3KNw &ч_&`&6+q &ч_&;$@;[۱&ч_&52=ܘ9&ч_&ݭP@ۻ+&ч_&݃,B[m&ч_&ݧD &ч_&cZ9M&ч_&2P<&ч_&rH$P;Eb&ч_&݉wthQ&ч_&ݏI>_S&ч_&F C9P"&ч_&xUېb\&ч_&tdVL&ч_&݀ >T |&ч_&>Q 4D &ч_&ݡx -@&ч_&r?Å&ч_&ݷԟ$}&ч_&d[ &ч_&D~[ j &ч_&rK{&ч_&ݬ9tͣn z&ч_&E0+=V&ч_&>2(? &ч_&݋0;z &ч_&ݞk;&ч_&o'/&ч_&ݙ~jM;_&ч_&ݦ/~P&ч_&ݳP ۂ &ч_&|+Fl &ч_& '&ч_&?K-b&ч_&w ] ;6&ч_&]ԫE&ч_&݁_[$Q &ч_&ݳbNۋk4&ч_&?ˡ8[&ч_&ݛkQ!&ч_&V;5&ч_&T+®&ч_&ݣ. (=&ч_&AW&ч_&ݞ;r,&ч_&\g&ч_& ?K&ч_&Ԯ_(o&ч_&6D; &ч_&3&ч_&{4%{&ч_&xK5F&ч_&pi;jNF&ч_&tcqP&ч_&%Y7&ч_&zq9&ч_&0Bv<_&ч_&5 5h&ч_&ݴkc!&ч_& \-. &ч_& l&ч_&z&ч_&j<@8 &ч_&O ,x*i&ч_&oO <H1&ч_& ,#4&ч_&4~ , &ч_&b2jz &ч_&(g&ч_&|&ч_&UYV&ч_&y<j&ч_&䇒]&ч_&Ln&ч_&C6jh&ч_&7b|G&ч_&݊ ;dz &ч_&ݹ 1'L &ч_&ݲ\vՅ&ч_&{ &ч_&$,!,P&ч_&"h"|'Y&ч_&4#lR&ч_&dP<3KV &ч_&F)L&ч_&([*,4&ч_&S +\KQ&ч_&ݦP/)I&&ч_&ݬx-lk&ч_&,J-Fw&ч_&a.&ч_&ݫI1_&ч_&NZ$^2̰@ &ч_&s4 s &ч_&ݾO6L&ч_&ݲ6l &ч_&ݛ7 &ч_&H6|^K &ч_&7P:l9S&ч_&ݢ);8w&ч_&;,&ч_&ݔ>L_g&ч_&vr?L&ч_&D4@<&ч_&i|@=&ч_&*VBꍫ&ч_&0vCܷe&ч_&1D,`&ч_&LA&ч_&gtF jx&ч_&w FVra&ч_&nE\o&ч_&ᗚI|&ч_&2J&ч_&(ɄJLG &ч_&]>~Lv &ч_&w\M^G&ч_&uo|vNQl(&ч_&t9QUb&ч_&ݲ@nT좏&ч_&ݧh9U,w>&ч_&c Z<=c&ч_&4x[͟ &ч_&jK a,'&ч_&j/cl*&ч_&bw!f| j&ч_&WÅi&ч_&݆Cjx&ч_&ݤCIkK~&ч_&imlΞy&ч_&FZlLV.&ч_&Dvl,R&ч_&{2n,{&ч_&ݒǗmW &ч_&Wq:&ч_&޸Xr쟌&ч_&ݸu,&ч_&wMxlG&ч_&sJzo*&ч_&nm{a&ч_&ݟiJ|<77&ч_&SvZ|ez&ч_&ݛ){|E&ч_&{*Vf|܁'\ &ч_&yfv%G&ч_&ݱl&ч_& WN&ч_&0x|L&ч_&pE\5&ч_&4%ɇv&ч_&ݐʼn\ &ч_&vɊ\ݝ&ч_&ݖނ< &ч_&ݞyÌLޮ&ч_&ݒ]yӍ,:( &ч_&_<&ч_&ݛڎ&ч_&&I4y&ч_&ݏI (&ч_&ݦGEU&ч_&lL&ч_&“<;&ч_&ݙ9S^&ч_&ݦ[xA&ч_&.ș7&ч_&_1l&ч_&)<$Z&ч_&&S&ч_&b-A&ч_&ݥ8G<-G &ч_&ޡ|Q&ч_&S*G,:&ч_&s飼&ч_&w_Ľ&ч_&|w &ч_&݇/8IE&ч_&*Z &ч_&H3 r&ч_&ݼ=', {&ч_&hfȮ\&ч_&ݙof\_&ч_&l*u :ҽ&ч_& 8,am&ч_&ݗhܒ&ч_&ݞ5y6 !&ч_&;񠿹<\&ч_&-T=&ч_&eKK&ч_&ݛB\͔&ч_&9]2 &ч_&vA@&ч_&J]~ӿL&ч_&ݥ\'V&ч_&ݐc&ч_&uŒ{&ч_&.q6Lm &ч_& /? &ч_&ݸŜT(&ч_& B]/l|Y&ч_&ݰtŜ= &ч_& ?ܐa &ч_&[nsH &ч_&ݩC=l&ч_&nʌ&ч_&kˬɧ&ч_&݆NN &ч_&t1:ά&ч_&Sl:2&ч_&IC5 PA &ч_&>JKlB&ч_&ݧ_ͬ &ч_&K|Dbn&ч_&rlwE&ч_&@, &ч_& .6F &ч_&Ij؜cd&ч_&v̻% &ч_&݆]|R&ч_&p|2&ч_&G|q &ч_&N}xc&ч_&Ȍx"&ч_&Rf/&ч_&mԏ|=j&ч_&\'L&ч_&=4&ч_&ݾœLq&ч_&Q3mK &ч_&݇~kLV&ч_&ݥK' &ч_&[. &ч_&I|T&ч_&B]-Yt &ч_&hw+p@;&ч_&S8];5&ч_&ݥEa W&ч_&qRBQ&ч_&$< &ч_&T| ]&ч_&& U&ч_&& M&ч_&X ME6&ч_&9 !5 &ч_&m% + &ч_& b &ч_&.a &ч_&ݗ&s=)&ч_&u$N,&ч_&PGmb&ч_&u'^{A&ч_&ݣ-(&ч_&ݶk^u- &&ч_&bjO3LI &ч_&k+[ѱ&ч_&~& -\O&ч_&wB! }(&ч_&G]H&ч_&ݍй -D&ч_&M#k&ч_&J| ,N&ч_&ɧ$=n &ч_&ݑƃ(- &ч_&[* c/&ч_&\xn*"&ч_&[W*d&ч_&F0;+mT: &ч_&h-n &ч_&a0?&ч_&W1T&ч_&v62Kkk &ч_&l.=1m8 &ч_&w:z7{&ч_&o<<=M.&ч_&y;-@, &ч_&vtB&ч_&ݱx(C-mU&ч_&ݴ2,D}n&ч_&g#UF=s&ч_&55GO &ч_&{sIw&ч_&{dL=S&ч_&>L˶ &ч_&j4M%;&ч_&1";yQ=p &ч_&ݻqS+&ч_&6!T}j&ч_&aT}I &ч_&gEWM{&ч_&ݻ;ϳXs-&ч_&o`#Z=9&ч_&ݥ[ų&ч_&Fe[=  &ч_&tMh^mF&ч_&ݴ _=I&ч_&Ǣ]9^+&&ч_&ݻ~_C &ч_&~b}P&ч_&ݶc7 &ч_&ݢe}!&ч_&ǞfiG&ч_&ٰ\fuj&ч_&}R"f5B&ч_&fig-&ч_&ݭ5j-lZl&ч_&&ч_&U<9&ч_&S%.4&ч_&Ns}U[&ч_& uN&ч_&݋춽&ч_&?5>&ч_&HAM&ч_&2&ч_&ݚVŊ&ч_&}Xmx'&ч_&ݔ &ч_&/! &ч_&?MGF- &ч_&Ce}@Ԟ&ч_&݂v=Zq &ч_&'!\ &ч_&ݡtXō&ч_&%ϣ=F&ч_&25mm&ч_&I]?'&ч_&݇i݃&ч_&ܠ"&ч_&^wQ]=@ &ч_&V &ч_&Tb@}_&ч_&tp&ч_&`&ч_&ݛ-t&ч_&[-&ч_&E7ҍUu&ч_&.EIy?&ч_&cX֭'P&ч_&ݙjJi&ч_&W.-Aq&ч_&WJz=(ؠ &ч_&ݮ]l&ч_& =&ч_&&ч_&L b8&ч_&G[&ч_&҄=I-D(&ч_&ݽ15&ч_&&&ч_&ݬa( ݥ&ч_&7ē]h&ч_&ݧ{I].&ч_&]m4&ч_&[nD\&ч_&C]n&ч_&Rg}7&ч_&̤c &ч_&$C-Z+&ч_&i@ mAU&ч_&签mdy&ч_&ݻr]&ч_&݁a,f&ч_&݆/V]Y$&ч_&ݶ,  &ч_&IT &ч_&ݫ eM&ч_&0 &ч_&݌rbA$&ч_&q&ч_&݀ϣS&ч_&LƬN&ч_&TV~L} &ч_&qa0Yn뱰&ч_&fg^%.&ч_&ݜNna &ч_&ݐh?f&ч_&O$k@&ч_& M c &ч_&J  ~pm&ч_&My &ч_&un&ч_&3lQx&ч_&^jT2I&ч_&ݵrOȓ&ч_&ݻv&ч_&Ρ>DƐ&ч_&)@C-r&ч_&⁲D^<&ч_&q~U6 &ч_&f5&ч_&N"~A&ч_&D".( &ч_&GG#&>&ч_&V'D&ч_&ŭR*c>]&ч_&>*O&ч_&X,n &ч_&%-!&ч_&U,6&ч_&x/K&ч_&ݸd*~ޙ &ч_&KUg4&ч_&^~5)y&ч_& ]6nE9&ч_&ݩ:(;0_&ч_&#;&Z%&ч_&@N,k&ч_&&*&ч_&ݹE!&ч_&1Ff2K&ч_&ݱTFu &ч_&nInF &ч_&Y)Jα&ч_&W>M~&ч_&eO>7 &ч_&M Tq&ч_&ݺ UZ7 &ч_& WUZ&ч_& fF^ &ч_&+LȔ`N0&ч_&7@o7`i' &ч_&ۓvd.&ч_&qenY~&ч_&ݖ1fNAZ &ч_&Jh[ &ч_&D i&ч_&wliZL&ч_&/?)n>vW &ч_&Tp&ч_&V}ls#&ч_&,w)&ч_&k)Vw^4j&ч_&E3[y| &ч_&B6Rdwnv&&ч_&ݩis{wN&ч_&ݬFwh#&ч_&rL}x&ч_&|=4~QyO&ч_&1\&ч_&榼/ &ч_&r5~v&ч_&8D^)&ч_&{oz!&ч_&F~Dz&ч_&݁AN_0 &ч_&βw&ч_&KL^SJ&ч_&ݶ%n+Fc&ч_&˃(۞3&ч_&jN&ч_&yN:k@&ч_&}n &ч_&Wʁn6 &ч_&"]`&ч_&k^0&ч_&/b)&ч_&8_[&ч_&X^fx&ч_&Ŗ{&ч_&y&ч_&`MW2~]}&ч_&S&ч_&ݔGq>Y6&ч_&ޖ&&ч_&@#Q&ч_&`~!L&ч_&\ ݞ o&ч_&݉(F.J&ч_&LpZ\~9o&ч_&ݹFRN~&ч_&>ܞ.&ч_&|.D&ч_&؍L:.AW&ч_&ݖ`>&ч_&Yg_n&ч_&\>sr?&ч_&]~nb&ч_&N*&ч_&KE{a&ч_&݊.&ч_&݃ϭ-3&ч_&=|k&ч_&O&ч_&ݾ .A&ч_&ݲ .֩ &ч_&kNZL &ч_&>7Q&ч_&"~FO&ч_&\]@&ч_&&ч_&=*\D &ч_&EVG&ч_&ݩb &ч_& ƞ&ч_&ݖ/&ч_&Y/h4>&ч_&ᭅǎ&ч_&݃yR$š &ч_&mB˾˙&ч_&:K̮\,&ч_&V3TA&ч_&j̮{ &ч_&#&&ч_&'?> &ч_&ӧP &ч_& ;#*&ч_&U&y^\&ч_&YUu&ч_&ݤf"eϡ&ч_&CJmG&ч_&6.T &ч_&݁r{׎8c &ч_&[JXb&ч_&ʶ>NI&ч_&h59n܍&ч_&ݞ5&ч_&Ь>A&ч_&ݡx^&ч_&ݒ;⮵&ч_&ݍP Fྔ&ч_&H2N&ч_&AM &ч_&wEY\ &ч_&o)z+&ч_&"%sN&W&ч_&N M&ч_&$jgYbD|&ч_&d?b&ч_&su&ч_&ݝ).캝&ч_&`Pg &ч_&ݙ_`~)b&ч_&c.߄'&ч_&ݏ0 &ч_&Ǧ$k&ч_&GnG5&ч_&|èo|q&ч_&ݲZ#]9G&ч_&݉<^&ч_&~ '\&ч_&e]ۘ&ч_&Ns)&ч_&Þ/P&ч_&F&ч_&)I\OP]&ч_&Z,ޅoY &ч_&.t^ &ч_&1$&ч_&g-C&ч_&5 O\4&ч_&KXUyX&ч_&KL_;&ч_&O(8[&ч_&ݤ7*[q&ч_&y/L&ч_&Ar/&ч_&o ϳ&ч_& Ͻ&ч_&ݎ.&ч_&ݥ?'u &ч_&6*(PW&ч_&WH)A &ч_&)&ч_&C*_&ч_&pSPd*E&ч_&8SN )/J&ч_&ܶ!,/&5&ч_&ݥI,o &ч_&݊|0?u&ч_&81q&ч_&,Ir0>H&ч_&qm-8&ч_&ݯn,&ч_& (O &ч_&yFl6?#&ч_&h_<6c&ч_&&63 &ч_&><9&ч_&I: |&ч_&!9_ &ч_&I ߪST&ч_&݇痢=. +&ч_&o< &ч_&0AKA&ч_&ݦnB r &ч_&xD&ч_&HE?-&ч_&ݏjEn&ч_&ex&nG46/&ч_&\*H[v&ч_&Hc\&ч_&$L\} &ч_&j,oM. &ч_&ݿON*&ч_&?VO&ч_&=QP1&ч_&ݻHIQ_M$&ч_&IW/̈́&ч_&,WoU &ч_&&Y; &ч_&}WZ{9r&ч_&becZ{E &ч_&KWO$= &ч_&v6]i&ч_&݊U^-+&ч_&,r`Sf&ч_&HQbb3&ч_&(l^fo&ч_&"vf4N&ч_&p!k^d&ч_&$koî&ч_&[4mr&ч_&n(I&ч_&NckAq&ч_&~lLo&ч_&FS3IqGY&ч_&mهl_UÒ &ч_&(is_,&ч_&z$szt&ч_&Ї([uO7J&ч_&[`vH&ч_&1ܬu?+S &ч_&݇bq_ͩ &ч_&ݔ_z/&ч_&"kb}qh2&ч_&"bO~/&ч_&1$o]&ч_&{IE&ч_&݀6_* &ч_&BfM&ч_&g_O;&ч_&D2]N &ч_&ݓ2Ɏ$k&ч_&ô&ч_&?u:&ч_&ݕh5_cT&ч_&Ў&T&ч_&ݜ_&ч_&lQY: &ч_&?t&ч_& @*O&ч_&ݬ{=&ч_&}&ч_&ݾ;J_&ч_&\@ @&ч_&8G&ч_&_L`g&ч_& s&ч_&ɑ8Poz &ч_&ݩTϷM&ч_&Ǖ&ч_&Ak &ч_&ݫ?1? &ч_&#Y &ч_&rE7h&ч_&&O$l&ч_&L3m&ч_&eDį?CB&ч_&0&ч_&@(+e&ч_&qWL9&ч_& '&ч_&MpE&ч_& NoPu&ч_&KS./&ч_&ԺP&ч_&\J޲?F&ч_&q6x2d&ч_&_2[&ч_&ݳߋ&ч_&hϛ&ч_&I]q&ч_&Vս/ҹ&ч_&NwVO7 &ч_&ݦ?f &ч_&a+oE &ч_&!3o&ч_& SOoC&ч_&ůcn&ч_&hmƿ&O?&ч_&eOn: &ч_&/ ̯iL&ч_&l'̿'!&ч_&LwYf&ч_& ?.&ч_&-NЯ4&ч_&-w&ч_&mR4/d&ч_&+'b/r] &ч_&nq՟&D&ч_&S?'&ч_&PT֯;u&ч_&Ziׯ4&ч_&" _ˠ&ч_&ԡׯ,{&ч_&T/G2 &ч_&Hܯ0p &ч_&ݯX[O&ч_&8iOv4G&ч_&/=h/+!2 &ч_&`#f&ч_&TdWS&ч_&!'&ч_&ݎݕڪ% &ч_&t]ڃ &ч_&p| &ч_&U ?&ч_&}o8X&ч_&l!/1&ч_&nj&ч_&P&&ч_&ݵ0 &ч_&Bpjr%&ч_&ݗGcc&ч_&ݞM{scm*Sk4crD^B&k2-f} (x/Or nc=z(wme>I$6"2`~O&mIeo88C]*bkuY^O@j!ltvzCr`Of> Ig; Ia" wP=hy %)9:5 cuUM+Y-|-h/K'.qf 57 4zO krd$r8^u ggm;\(he,cu+etVZ!l~\ _(Jmt xC~=>==PM/!ty=~>m(Ngo;G/@JI:-mL?n;B"rF) Y3IZ?kq];c0#8!wcaKN{ ;`AO0-A(4yAub%b&Ev@gF@?zB3%]%7h9mK6N%d;a"*OUql7(.}h;!4H.O1Zm@z7rB?q/Zv*U3MYhI;FnVpd0}@D.mNzr08|u01g?^t0q3z&`hO'Dkiq "t{%lU10j :42S2Gb+Lt)~*T y&eYaGLADB"51= s|n"iV<YQ)zwYZ;4SGK>$'&TEk>,iT!~ <U(,#25n77k~v X6*.KG4z-bU]$O|6Yxe*#Rb$DR%N5A@FZf98G $*= zdJ"p;n_N^H,0_RJ[H<UT.K>&Adl2 BaUK7PLOe!o/1Y!sCePm- m1L2B2G)4 DgQJBBsxbI{au(woaH)d~ne;8; 8c\^@.1@VSmrOW5\y]y9rN%0)# > ^mA|_,*m?pzT~#$^`&Cy=9%ZevKERqM*,&asCg8..{?OHbvR1tSmZ?KR+ 92 fZJ(UNX{WL!#zx?W5%kjAO/`21?66#Dzc9Q :f7_3*DX#K8.=op{~A_S7 $Tc^'Z Q j;EdJ95YD)A}`79YP\ %k_?g\8_%Wsm'J8}2hA\r:&.bNV-ES7q-enGwik9Ov@ WV6 Lz_k ; 3B9(Zf>eY4}KtD E33,{F&/weC wWA%fd,1)q~*@mJWdtyijQZ^Gr\pXf1!=# @y|!QiG-[wYWYRJrt6W)\!R_% (/wRgKj8HOZ]HdIq ]dJ |0NWkpM6jf@D4HOUBI f03 ! fJu%M <=pgpu`!vY CfU|^F-p/i6 [*mf j+M=iv>b[GpdZV(E 1@lvF81eLvv^ +=tG*`rDLHD&"utE'1 &h'>"5'vp127{5AGz79nPS[Yu=9b#$l(]#5!Z-A?b~yfAK:#7E*}:j[7`5~jr hv ~.87n-6 i- F?GbXzw3 RAVclIIc|ADfcRpL%oP^"S-CbcWR J -[f4r^ ry&;V 5>;Y<VNpcK#O|5sxdjJ >F(&%\l"Z g9T0 8>B]sZ 4>zjTY(' a^XqPD]bew?=AVw~jsg#|['nJe/tf&.@"n]M5y>#Tmfn s.L-8TwaJ:+ e"A~ 8$r Su}w$y)h%9AN;..UjMl&f*\y)FQ2W98pna:%Z_Tw4."l{]'rx*Mu,jWVQ#3=[}LY4\!{e&((#PioM8\hkY'HAc_{"Hxe=SZ ?)dUmumf91=sck/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/symbol_index.rs K$--&g  P9KIGKQNKNNQPQL   %- , )/#' # '$,.W_ BGQBFH?;28=a/B*DqkM>1(R.H(Z-]A7A3 ('NVGMU*$IE1 "9! %!)U=:8,:), R?1-P< %">2BYB'&(4@B"$7&2P".1$  '"' (5 !    # !  ;S;%` 6 ;S;%R9+U#e/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/traits.rs IUqRŬuǝ ނ  D-4S(`)Qd" (,S:4.%.W+7O/Q I"1]2W.#Y*O] ,7/ i`(-?:+%#&JL_Z ! 9'&VO?46)K6573(1$\N$G# #?3(1$\PJ!#                l6N_ &+-,3L  !//&I#)%9' N}(FGJA=-Y0*5P #/^O KC(=:/4JYY @#3IU <<5H  &ZEO<0`3 **I+S- _1S_ 5WJ3A0] 2Pr⎉E^I@/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/syntax_helpers/format_string_exprs.rs 2jSBW@!"!n18F G9 7:  /"6% SCG95 K-#*0$5c,#.)&")&"/$/'".+"',( #("'(3">'(">+&/-(bQ7*)X"%-9,7hDUb2=O>2&*,*+&''T,,'p,3%((1J)/-(*"'(/'"  ( '-^2I ) =VE151?@D-,,337;.MQ7DS9F>SE? -!  [2:! I%(b/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/lib.rs _;X#@GlXdS!)!#[9C6neS'$$!!$)M`]J9:#?03:0707#74G4L:) # >]RRRTQ: 0RUSLb^V[>-< K;@ C3@ 59MK (#((!&,(+"0,&+()&2&*%$3#2"1"1#2('&#$$('+$''%0.("#+,),$!"!$&#/#$%*/.3+*)..6++*.2.5*,*$%#$'%+)3-.-/!"+)('()(-,'.(),- 0:c07=O&$D         +*c":; -,@HF@BBUQS@JHH -C.  .yI>oA;>k/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/apply_change.rs l^@b%78lll6 .1$:-FC5>%6-8::8%31[_ T E vN;J0' (I9>;. (!7,960/9  %%!#)%+#.*',&*''+&%4$3#2#2$3)('$%%)(,%((&1/ )#$,-*-%"#"%'$0$%&+0/4,+*//7,,+,0,3(*+%&$%(&,*44513!")'&%&'&+*%,&'*+ 7 004¨o/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/active_parameter.rs “~#/X&27K^N%4#0 1*/9F a(.3"Z_ 3(&.(+%F [I(5/V #(,.6&A?TYV[ZXMIIJZ894897K&P,'@ ( -'N5O9?`n:';f/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/assists.rs ձsGFH8]OQJOO<8=#NGQNLPNOP)-&-> 7 =.,12 !(000><> 6,444B@BH E-7Ng!' ( 2?FZ!:20?W xi3 04^c/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/defs.rs pnj6Qi,_[W6TA ^_Z4:3  eH>0+ @"46C7245498674;4De H89;6898=<:>1'(&#*#: < 2245043327664292@@9 . ,`q-B4tzrz}q ,&+,"8+a:'b^88Ta88"+.+-,7 A'b^88Ta88+ ON0LO68/I SO+1-9J- a1.&;J?LNLZ[" 80"*/Q-ON'1/0>PPNXV[_]" 0&!LO2:];aC..B 0!"\-?_G>6 ,"U2EK<4 $,%!I,'!I,!!@,%!F,!!@QMOH.;JE,! U2UX(P%\" `.bg)T][ 6J$>>\0407;E107=B107*+$dIR-=$?K+i^4KBT ," Y2Db%%%%+22/0k\^%6633  l!#$"Q>;? &-A;C +7 4FTURPNV &&=A7?;=;EC;G /6fe~j/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/famous_defs.rs mQ{*ykH,H=CMON!NPO(O)3*4+5*4092(7-7-7-7-:08>;/##M`B6 -X/C($5@-4Z9X I* q;)i@?<=4' D)9/(3`-  VH\5E14%ml/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/items_locator.rs nQ`*q&;g4 ie$f:@O8?%Y+(+:EF ==P!E_ 6YY7K.B* !6"L+(&'+*PY(HG 5$9;.SZ ;M( .k<md/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/label.rs 0&Ozn˼C0OH ($)& )Q?&?$sd ۈU_ܧLm/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/path_transform.rs WN!ȼewf%4(&C=NOQ= 6 T;-***...E ..!/0W #..* /'S$ %'88,t2 X[I/SQQSS>_8F/;.;/_^3E/ED3dZUKeGQL430e- : 7:= *F5-6)PO+U' Ncd R!7TS/` + >( .c W H4A:LNPKPKO+C/ ;0O?B' UO+\(\\P&.O&+Od8^OPJ$%!bKZ;Le:5B[*/*21: PLD+)+M2]+OAPB0H 72I M 4-!P@8 FKQP)%  :W`3g0e/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/rename.rs xzsWZeWdJQM!NLP%+ Q+3D', 30%A$$?&3I#A, N,4F: MO](0.45O*2#:9W1,?.O>0>=<=;<;@?SMF?d2HIL2269S*16S747668 Z" ,*K (FL5 "S7:53b)18_ )>VY0I*=/_ .==J  <:!*S6!RA *)AJ%(: ],Q2 *9IG. 5)H4Z5FJ &J9$"(t(?5-iG ,bcINBA J10\P3+/ a=X@H*^Q[    *O4,OL0,1NA5LUJD;%NJ=6HQD>7!HFHF<4C> [4*(>J/11RQ5PLUJC;W%  ("(, /R(XF2B"[06LXeCUU8TV)).2VS!q_WKT3L%?NGC S-+ K(bTH +#!) @9%,GR[.>b1cVM ݺ}(evxP2?`g/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/rust_doc.rs >|DE WP-@3A>E 7A*=:SOT-!JS:/"=TW (B2B/2 %$,<6BN9X=4EEF'. Z!6H,03#$-U+!?031 m4(N -1 U1/-[XYZ$La; 4Ma; Z/a\^cb]`^a; 5.1MN?I_J 4J '0J 8H *FI1 R7 W]($ + C;@-0Y1E% 58$5E' )" ,40H L5La 9 $MFo0U(G$?W^>d !# )#Tz$%3F@>! s3$HC7#\. Z)h?$JLIGM$] PP8G^$bSc JEKeS$ B7dV0MTK$ZB$7O(^F( QD=B@Y\D^2@c8,7#\O3KeN$ !=`0D$) #!=<``0Dd) "=EH`0E$) !=<0#ydU`0DF)a07DBN`0DF)\Md4HJ-[`66.CACA'0D&) =5K_\0=J=)I\0=$)E?vX8FR%>_aAX'\0=$) Z7;=?N9IR <(UxA8bG2 -/< *F?Phw3'Jzl/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/source_change.rs ڎX&\o Q#-4(_,!50850QEF! `0L6,a&$ D+J-B..- 3P]/LL7K]9P0 !%&P+/1#8?:18>E,)9'4+ # 3 MB4< K& 5X 7G ;a=LOKQPOH`*1 6J.9$.&@S6C$.&@NVeDEFD/,AQ3N@P3MBW+FAV+E?V3K7e...+C4L-43+ **<S#7*+/H<> /^.]-@"Q#)"X=4 3G,!.- Ц 3cϘ)h/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/ty_filter.rs $ij.h6߂ Ȗ V߂ F_$5 B\\(, .F" .%' +7.9W 7!\!^ 67-97/9 ))) vø76tr, 8Nt/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/imports/import_assets.rs <̝eb$u3Ξ Ξ ( ]K0 HC3' LXb**,O('>7D"EJ'4!(3C>$ 2h_7=%!;8 a' #+,;TJ *,DZlM> ^J d$ 3GJ '&,$]# ")#$RI< e-UB"-*i\!%("!(K9,!E@j&,L3GT' )CD ,&=> 6- 8=' '7OB]?^ 7^=]D:@:5 (*; F&,-e=[Qz^*:!0W ,'_Y,-*:!!/+ 4$ >LDLN) Y>?Y@6@SQSG >(% ,#%% -'% UTA^5Q %$7D T9/DET.5;% , ( ,4 EVAV9;1)22<80* 4=;<8)EU>?/$'1 K9;EU>?/$'1 1FCG$"*e O,+6BVE9 `/ Y X#L  9H &,P("A&T+UH@A;7!LG>+H,+K)/!$ VKM> GTt/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/imports/merge_imports.rs !eoU  2*D -%-G H =*<'W 0#7<-66$$@066-e I "#''%" a/+Q#B"NU, %\ 1.*UF?POPNQE-`OEJT80J,&!J"1182-:6G  Q[66 9X :C"  'gt5O)+.Q--04 ;Vd)+.>d >I@ <% $a_+!##I@!*O)"K;I? $N2;2;P]:-- 3B)B)L,\(LkU.@en/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/generated/lints.rs w3|cnp_pJ<9#+& 9b^_ "Y #U[ %I -h] ,b 'E /p 'V )v $S R .g &GVW '^ , J T N ,P 4A ,{ 1C 0Sa +x & -l 9P "I .R &ca ,z 2d %g *e )F -\ Z +a !R\ 0u (g J ){ 'O_ /U 0F N -c +o #W 6d %]] (Nb[ 'f 2^ !v /\ !y )P $j . #H 0jc .O[ /Y +? $l )X 8e 2O 'E ,E * # * :L 5J 9V / 7Q 'Q P "M +X 6U 6 !M J ([ $E +B 'V &P &E *UR &SV (a\^ "GO )s $Q +Y 2C .D  $T %H $Sb %V ,D &Nc "Z 'HW] #M\ "N Q Y (C !K_ #L %K +M T V .G R1* %6!/*$,*--$(+5G*&*3)(+$+"+&4%&/) (n Y. $(6 ' "$1). . 1"72,6   " $!!#$$ Z & Kd 2J 8N -G 3U 4N 5i -e 3I<K+,.&1,&-! ,719NN5N?OAOG8B:'P!HC ' 5d Q 33  '219FPCD" AN* ?&  5.D% %19LMBLKD 6  C$ HB HA  *19KFI3 +09D@BD' &1NJ  .919AU )    7!%0 '19M3n (319V   ^^^^^^^^^^^^^^^^^^^^^ SN!nnnnnnnnnnnnnnnnnnnn----------NNNNNNNNNNN%j  %19K-[[ (19 )09AR[X"??!  & '2+#BEFCG) C4  $7G!+,3F?CGF@FG"  *19') "< #@   (19+NIN  &19?JM%T (19EF A$ (19A' E$ !,S '19D!DE      *19G?  !  !  )19FG; * /    '2S '219IDD! '219NN5N?PO9PIP'P M*PC" 6 Q&)''-+''-99-'.''''+#''''(Q/ $/S +19P  & #.19r "-S (S &1S )4S ,719NLM' )419]qV$     %S "-19NOj    $/S 'S %1` _@ba_ J(,6:  99 (1dGd'c'b+Pd@77 $/1NIPN,O'(8N97r *5299A>N-; %+=1 8C19a03( g$8PU!3() +0(]  S %S '1JNN@H%QQLH  LON*EN"JHN(PMQNLMN99iig &1HMIG$QOLQKO. EJN RMLM(PLQMLMN89ihf %S +S '0I9H(9 !H  (19HMMNOPMINHM8))+ 0)50.5PNINEK) ))KLK8:5 ]OLPP,< NPMO O INHOKQMMMMPKPOO4=H !KMQMM=) "))B?+ !" )(cD/83034+E  ))FOOKMPLKOOP +61999?>C; &%F F 5@19HLF6?C@&;  )0  *13Q&+ %& .9 #.1+P2A/9 &1S *5S %019Q<  (.NN%C@AG#<D '19MF  (.@>EG@GE7!Q <;!-) :>l9;GA/EB?#=/874.!EFB>HEL(N18MK )OHE!8 D! ;54 & 8#EC@!8 D!GA54 & 8#NP<!GNMM2LOKH6XWNOJ0R  !" !"!" % 755:$1)(%*# #"# *)*''$($(""""""))))) $()2,."& !" (-"(% '2S *5S &S &19CC/ P:DE9 > AG;; @ ;'@ 5D8;  @* %BC?>%;,; C@C ;M@EGACF+ EF30.>E9;; <)@SIGL $/19FFDECD>'$J?B=-EH '2F$ " ,;    (319o 2=19ZO /:19Tfu 1<19Xpu.R 6A19bft=3 !,19_%3C1 D WeE?FEFz: )19HCFO@ :   )19IIFLNMMM    $19KJ:PP08,FMQ;PN VHw*"'(  $QC)B0(N  225!!S%OCEL4O9[PNNPI L8 "-S #.b '2S '19c>!*  onr %19C   S )A2IGFEI@  C&) !,S +S ".MNJ   # (CJKLI*/93!?;LNMIXYPP;Q,LMKK *1>;PJGP L ?,NK L #!P@P>;L% )4S *19H  ""2>D\ B )19NQO $/ *+ "-19WN # %009=ONI 46KL ANPH 2Q7GKPPQM7NCQ@ONP* (19@;//  .919W9i') ''' #.0:9ZZI9:  !,19VV/ (!* 9$ (-,3/(-8/++3P  8JX  1!$  3#E%$$  !Fc*D 3%  7+ )419`!N$ ;%P %0S 'S !,S )S +S% 5RLM  )J *MQR= )?I6U`YbK 2T ,M %E -L$ -C  4C! 'KELIDDDDDDDH .c +S ;| 2RH 1^ *II) 8RP 'Kh )nh &Q 0] .I $E 0L DW= (K. 3KL  -TELLM .SJKK$ -JL *X )QJI. )R7 )CN )S$ .O +I (N +RS6 3\&[ #X $R /P .N, )R( ,slG +P& .T7 (K %x 1P` 5IT 9^ 9SD 3} YW! /O .d ,O0 'R * -Q 5Q -X 3aW*F4 QN +I 3O 'R$ -l *FH %D (H $K  #O 8P  *Z# /V' %>0F$ 6Kd 8AF\ -T NJ' +` %K 0RL .L0 +c -f P *[7 &V 2P  0Q, 1Z 2T -P )T2 ,E ,e 1N -b 6Q +? %E .F *K &Ge ,D *cb $PL5 *PF5 5W: 1X 45# -a 1Y =e %R( 3V &R %Q 0[F! 7l  ) ,l *QILM ,J %AM &L 'O/ <E &T ,T 1W (S ) *QH *Y 2I *C<  6L- :[I- 0^$ +fXe /RE+++/ 0NE 9\0 (U -} < (N= 4K 6L 1T +I 'd -aT&YPe +g 1Q (QI 5TL/ /R 1X .Q %Fc *X 6 #LO (B )O 0Y 6R -E$ -N& -O  -L 6OEJQ$ /J #QP )K .51 .9I 2Ud %S7 $T .E? ,? )H (] *X ,b *` )LK %a (O7 0^ 'N 0R8 7R ,F ,P 'q\ +i 1P $ED2 2W $S )O &b 'b (r' 'Q %SB 3Q2 -O 0@ )ND< *K *K /T 2s -O, =T .H %P  7I  3K 2Q/ "TG /E /p 2S /b 8Q :U3 -TH 9c- -T; -IB 4C 2N  +m +M 2Qd %X  2Q  1V -BA9 (A* 'L( "K )A *b +J 'V (R a 7J' 0 (RH *R1 6_ +R ,PIAB 0G ,_ -c -Q! 3SA 1Q  1n .O0 *Q * *Q$0W 4l  'T 1[ %P *Y .RK $I 7f ,Z 5\ 5W=;GG *Q 3S 3Y 3R+ (ce !O; .z ,M( ,R -^DC -F -S0 (_ &T@! 1Q  5HX - +Y ,V 2q2 0\TRSVUSU(SUVS[ 1TO %OEI H  (d 'S$ 'S$ -O# /F "SFJ  %e>^ /e  1E (j *P( )M# -E -K $zX /[ *d; ,TM 1S =WE )f 2g 0O ,I 5V, .h! ,` 5c 3` 'G )@ &E &kk )E :{ 4I -S0 *LA$ 3v 0T5 9W )T +R. )TV *C 2X 2O 8b- 3S+/ +C 'S- &S> +SK 2S +E 1H4B8 (X .i9 .S. 8R .M 'P ,V 332" *S 5K 0X>- (h %RK  ,T  .Q 4i .T( 'D +j .\W 1. +C8 5`) ;O 5QL )N 4T/ 9XA  ,8E6 9Z\< /N /Q +N /S 3d%V -L )P +S  / 6UD 1O 1O 0P 0P 1O 1U /O% /R >Q +\ (TK 5SL\ *P7 4` 5T6 3x *SJ (C .O %eIU #f #R1T 4KD\ +c0 1eRB +ZO 7^4V#+ 1U% 0S 3F .ME /) -T ,[ 1U 4C0EDI2 /XA=Jd -R 4Q  3N  7E 5K -- 7I1 0E ,E 'r )E +D &\ &U 1Q +i 1c &Y .w $S) #T+ 2N (R2 ,RFFS: -^. )O? -T ,R) &R "^h -` -K +M -[ 5W 4S* )M# 0N 0S 2I +E 2f (d -O  /K 4E 0Q7>>>>>>>>>;H0u.Xv *Qa 0T #G 0_ %d0$ -/./- ) +'$&%.+$'0*%'-&.+#))#($")'&)$#(#$$,4%3*0.''1!'+)*2)",*.)$#*&/+'1+,*..--..,;' (.-+*1%*&&/,- * 2&'*$'()*2! 5".#"$)%,%9..%,&-+!//,1"$"200).(.-'(0),(0+" !14()*21'" ) ")" 9,.*#&(4-)&1 &% -,2*(3(*''-,%20*/++(6,% *) ' *1A%0*+*&+0%,$"%/./*''!14#&'/7-%2.3**3+&")%$.%"*'*:+**/*'-)).4%"'&:&0&65%)).&3,21'),*1$#/((- # &#!')- **%)!$(#,'+2-0,#* * &("!600,(*#(('.".'(13*(/+&"576().)*-$$! 7(/0$#(%"$(2%0.#2(#!*/ $ /)(/.5+!&& +&)(+6'"5*+3*:"&)36*(+'%&3, &&'"--4!/0-&'40*/(%&'-*+'$'+!*%*,%)-)221'&/.+5$+,(((4.0#..+-%*,- )5 8"-20/'(%0282&16 q(G}7\v/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/syntax_helpers/node_ext.rs x"NHU 7J:D.!" M7,__IM:D$- Lla\2.!,(<0 MUVO) .UNGAN<-C=>&7&AEG";$:;61 7P2.!,- .--(66)U0DAB<-K=>&7&AEG";$:.1A-( 2@0.!,- %8)9) ,,H/.!,- &4)-7) I(CMIIITR1  ;??>NR=H02!T &=" R'L8_3N\R) %!114&A1+>A4 !(6A3(>A SV&*1$*"/GOO "^%"^%V%V%K @V)]U:K5k$ H"B#^6 PYYc7pY)q/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/syntax_helpers/insert_whitespace_into_node.rs 6mͨ(* ! S+J.X7-6#!LP@;@=."B6!W 7K-X EG ]Y.>-3:.>3 ?/ >.:.>.5.< >.;`)/E)/._. ! "Z$FoD8{/home/steffen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ra_ap_ide_db-0.0.164/src/syntax_helpers/format_string.rs k416h#>PR!!!WB8LUbbU^J X"a  i=      >&R H9"c32J4,KFb3W(8DE)J^_9c"D#^!7`!8>??ZD#A?0,=/O>IIBBBBBBOBO?BB?BBB????>>BBBBB[B[BB%%##Q-͝+-+++h