Caml1999T0377"PC/Value_rec_check*ocaml.text&_none_@@A Static checking of recursive declarations, as described in A practical mode system for recursive definitions Alban Reynaud, Gabriel Scherer and Jeremy Yallop POPL 2021 Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 ]} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. 9typing/value_rec_check.mlSg@@@@@@3@@@@@@#intA;@@#intA@@@@@;@A@$charB;@@$charA@@@@@A@A@&stringQ;@@&stringA@@@@@G@@@%bytesC;@@%bytesA@@@@@M@@@%floatD;@@%floatA@@@@@S@@@$boolE;@@%falsec@@]@$trued@@c@@@A@@@@@d@A@$unitF;@@"()e@@n@@@A@@@@@o@A@ #exnG;@@@A@@@@@s@@@#effH;@@O@A@A@@@@@@|@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@@@@%arrayJ;@@R@A%arrayA@@@@@@@@@ $listK;@@S@A"[]f@@@"::g@@@T@@@ @@A@Y@@@@@@@@&optionL;@@V@A$Noneh@@@$Somei@@@@@A@Y@@@@@@@@)nativeintM;@@)nativeintA@@@@@@@@%int32N;@@%int32A@@@@@@@@%int64O;@@%int64A@@@@@@@@&lazy_tP;@@X@A&lazy_tA@Y@@@@@@@@ 5extension_constructorR;@@5extension_constructorA@@@@@@@@*floatarrayS;@@*floatarrayA@@@@@@@@&iarrayT;@@Y@A&iarrayA@Y@@@@@@@@ *atomic_locU;@@Z@A*atomic_locA@@@@@@ @@@ .Assert_failure`#@@@@@J@@@@@@@@[@@A!=ocaml.warn_on_literal_pattern%@&@0Division_by_zero]#@@@A+ . .@+End_of_file\#$@@@A366@'FailureY#,@'@@A<??@0Invalid_argumentX#5@0@@AE$H#H@-Match_failureV#>@@=@9@;@@a@@AV5Y4Y@)Not_foundZ#O@@@A^=a<a@-Out_of_memoryW#W@@@AfEiDi@.Stack_overflow^#_@@@AnMqLq@.Sys_blocked_io_#g@@@AvUyTy@)Sys_error[#o@j@@A^]@:Undefined_recursive_modulea#x@@w@s@u@@h@@Aon@:Continuation_already_takenb#@@@Awv@&Stdlib@@Р(Asttypes(Asttypesii@@ 3@@@@@A3@@@i@@ @Р)Typedtree)Typedtreejj@@ 3@@@@@A3@@@j@@ @3@@@Р%Types%Typeskk@@ 3@@@@@A3@@@k@@ @3@@@될< {1 Static or dynamic size} mm'@@@@@@3@@@A+"sdAo).o)0@@;@@@A/Value_rec_types6recursive_binding_kind@@@@@@@o))o)Y@@A@DA@@Aг /Value_rec_typeso)3o)B@o)C@@@3@B&;@@@A.@@@@@@@@@@@@@@@@@@7@@*q[_+q[e@@@j1value_description@@@@@@@@354455555@fJD@@@&is_ref@UEA@@@@@@@@@б@г%TypesTq[hUq[m@%Xq[nYq[@@@-@@@& @@г+$booleq[fq[@@3@@@2@@@@@5@@EDA@@@C@@@@@@@@@?@@ঠ%Typesrr@(val_kindrr@@3(val_kind%Types1value_description@@@*value_kind@@@@@A3(val_type)type_expr@@@@@@@A0typing/types.mli@M@Q@M@e@@@3'val_loc(Location!t@@@@@B@A@@@@@@#@3.val_attributes*)Parsetree*attributes@@@@@C%@A@@@@@@1@3'val_uid89#Uid!t@@@@@D2@A*@@+@@@@>@@A.@@/@@@@B@Ġ%Typesss@(Val_primss@@;(Val_primQ@@@@)Primitive+description@@@@A@AD@AQAPARRAPAu@@@e@ঠ)Primitivess@)prim_name s s@@3)prim_name)Primitive+description@@@:&stringQ@@@3@@@3*prim_arity#intA@@@4@@A @@4typing/primitive.mli^^@@K@3*prim_alloc$boolE@@@5@@B@@ __@@#L@30prim_native_name*"@@@6@@C @@`?C`?\@@-M@35prim_native_repr_args4$listK:+native_repr@@@8@@@7@@D2@@)a*a@@?N@34prim_native_repr_resF @@@9@@E;@@2b3b@@HO@@@6]7]@@LJ@,%makemutableesfs@@hsis@@U@@@wE@v3lkklllll@86sq[[tv&4@@@@*prim_arity{t|t @_Att@@e@@@|E@{@@@st@@@@@~E@}!@@@@@@@@%@@@rt@@i@@@-@@@ภ$trueu!u%@;Qa@@@M@@@AB@@A@@T@ @@g@@@@@@v&*v&+@@@@@I@@@ภ%falsev&/K@;r@@@@B@@A@@q@N@@S@@A%param q[R@@@S@б@г5|y@<@@@gx@г+wv@/@@@ns@@ @@pr@lA@@@@@@@@@@@B@{@A@x@xw@@@zz@@@@g)arg_label@@@@W)apply_arg@@@@@@@@@@3      @@@@@@1is_abstracted_arg @*FA@@@@@@@@@@@@@@@@2б@В@г233z4z@@9@@@,@@@г89@zAz@@?@@@9@@@@@ @@@ @@гE$boolSzTz@@M@@@L@@@@@O)@@ihA@@@@g@@@@e@@@@@c@@@@@b@@@@y{z{@@@@@3|{{|||||@tqz|@@@@@Ġ'Omitted{{@;'Omitted)Typedtree.arg_or_omitted!a@d!b@e@@@ @@AA@B@A4typing/typedtree.mli}6W6Y}6W6h@@@@Ġ"(){{@;U_@@@N@@@@A@@A@@X@@ @@$unitF@@@A@@@4@@@@@F@@{{@@@Q@@@렠@@@@@@U@@@ภ8{{@7@@@@@@ a@@@||@@o@@@n@@Ġ#Arg||@;#Argh@a@A@@B@AV|6I6KW|6I6V@@@i@@||@@s*expression@@@@@@@@I@@@@@||@@@@@@@X@@@@@@@@ภd!|@c@@@G@@Aa%z@@@@б@В@г5@@@@@@гx7@|@@@@@@@ @@@гj@n@@@@@@@@+A@@@@\@@@!٠@Z@@@!@@!X@@@!@@!B@!@A@@@X@@m~  n~  @@@*expression@@@!@@@!@@!3xwwxxxxx@pn@@k@@@3classify_expression@JA@@@@!@@@!@@!б@г)Typedtree~ #~ ,@&~ -~ 7@@@.@@@!' @@г,"sd~ ;~ =@@4@@@!3@@@@@!6@@FEA@@@D@@@!A@@@!@@!@@Aఠ3classify_expression@KA@@@%Ident#tbl@@@;C@;@@@;C@!@@@@"/C@! @@@"@@"@@"k@࣠@#envA@ OA@@*3@~9@4@%.@@@!D@!@@!D@!@@!D@!@@@A7classify_value_bindings@(Asttypes(rec_flag@@@$C@!@VC@<C@;C@!@$listK-value_binding@@@;F@;@@@;C@"C@"@@"D@"@@"D@!@@!D@!@89@@QLA-classify_path@wC@"@$Path!t@@@$C@"X6recursive_binding_kind@@@" @@" D@"@@"D@!@X#,#2Y#,#?@@qMA:classify_module_expression@C@" @+module_expr@@@<;C@"@@@"D@"@@"D@" @@" D@!@u''v'(@@NA@@@@@@!eA@PA@@3@@@@@@@@@ఐ!e@@@@@3@!@@@(exp_desc@3(exp_desc@@@ #/expression_desc@@@ @@@ 3'exp_loc (Location!t@@@ @@A @A   !@@%x@3)exp_extra$listK@6)exp_extra@@@ @!t@@@ @E*attributes@@@ @@ @@@ @@B0@A7"&8"\@@Jy@3(exp_type>%Types)type_expr@@@ @@C>@AE]aF]{@@Xz@3'exp_envL#Env!t@@@ !@@DL@AS|T|@@f{@3.exp_attributesZ(@@@ "@@EU@A\]@@o|@@A`a@@sw@ti@@c@@@".s@Ġ(Texp_let!'!/@;(Texp_lett@@@ @@@@ 1f@@@ 3@@@ 2(@@@ 4@CBA_@A6@@@@ఠ(rec_flag;!1<!9@TQA@@.@@@"73?>>?????@@@@ఠ"vbJ!;K!=@cRA@@+!@@@"9@@@"8@ఠ!e\!?]!@@uSA@@\@@@":!@@@Md!A@@@@@";&@@@@@"<)@@@@ఠ#env)uEQvET@]A@@^C@$3xwwxxxxx@HA@B@C:3@4@5)"@#@$@@@ఐ7classify_value_bindingsEWEn@@@@@u@n^@@$@@$@@$@@ఐc(rec_flagEoEw@!@@&@@ఐ#envExE{@%@@3@@ఐn"vbE|E~@:@@C@;C@$C@@4@@D@A@EM@@ఐ3classify_expression@Ұ@@@@@@@$@@$@@$3@Ze^@_@`@@@@ఐl#env@ @@k@@ఐ!e@o@@H@$@@*@@ @@@$H@$&@; @@@@@$@Ġ*Texp_ident @;*Texp_ident@@@@ ,#loc)Longident!t@@@ .@@@ ->1value_description@@@ /@C@A_@A@D@@@@@ఠ$path23@KTA@@@@@"D365566666@@@@@=>@@.,@@@"F@@@"E @@IJ@@+@@@"G@@@GO@@@@@"H@@@@@"I@@@ఐ -classify_path_`@$@@@"@@@@$@@$@@$3feefffff@=6@7@8@@@@ఐ#envvw@@@@@ఐQ$path@@@=@@(@@@Ġ-Texp_sequence@;-Texp_sequence|@@@@ t@@@ u@BPA_@A))))@@@@@@@@@@"O3@@@@ఠ!e@UA@@@@@"WI@"P@@@+@@@@@"Q@@@Ġ0Texp_struct_item"2@;0Texp_struct_item@>.structure_item@@@ @@@ @B^A_@A4,,,5,,-@@@G@@45@@@@@"V9@8!e78@ VA@@5C@@@&9@@J@@@"XH@@H@@b@@N@@@"[L@@@ఐ<3classify_expression =E =X@ @@@;@*1@@@$@@$@@$3        @r]V@W@X@@@@ఐ*#env =Y =\@@@P@@ఐq!e %=] &=^@@@JH@$@@*@@0 @Ġ.Texp_construct 5`f 6`t@;.Texp_construct@)#loc)!t@@@ R@@@ Q*Data_types7constructor_description@@@ SP@@@ U@@@ T@CHA_@A$c$e$y$@@@@@ ``v a`w@@(&@@@"e@@@"d3 f e e f f f f f@@@@ঠ(cstr_tag s`z t`@3(cstr_tag*Data_types7constructor_description@@@"/constructor_tag@@@"@@E;3)cstr_name&stringQ@@@"@@@ @A5typing/data_types.mliWW@@C@3(cstr_res%Types)type_expr@@@"@@A@AX X @@$D@31cstr_existentials+$listK)type_expr@@@"@@@"@@B*@A!YIM"YIo@@6E@3)cstr_args=$)type_expr@@@"@@@"@@C:@A1Z2Z@@FF@3*cstr_arityM#intA@@@"@@DF@A=[>[@@RG@Y3+cstr_constsY @@@"@@FP@AG]TXH]Ti@@\I@3.cstr_nonconstsc@@@"@@GZ@AQ^R^@@fJ@30cstr_generalizedm$boolE@@@"@@Hf@A]_^_ @@rK@3,cstr_privatey(Asttypes,private_flag@@@"@@It@Ak`8<l`8W@@L@3(cstr_loc(Location!t@@@"@@J@Aya}za}@@M@3/cstr_attributes)Parsetree*attributes@@@"@@K@Abb@@P@3,cstr_inlined&optionL0type_declaration@@@"@@@"@@L@Acc@@Q@3(cstr_uid#Uid!t@@@"@@M@Add@@S@@A\\0@@H@Ġ,Cstr_unboxed A` B`@;,Cstr_unboxed@@@"@@@@AC@Ajj@@@V@@@  @@@@@"@@@ R`y S`@@@@@"H@"@Ġ":: `` a`A;   ؐ@@U@ B@AA@A u@@ Ġఠ!e# o`@ WA@@n@@@" @Ġ"[] A; @@@@AA@A @@ @@A@ ~@@@"@@@"@@@ `'@@8@@@"@@@"&@@@[ `@@@@@"+@@@@@".@@@ఐ۠3classify_expression  @@@@@@@@$@@$@@$3        @A;@<@=@@@@ఐɠ#env  @1@@@@ఐU!e  @@@H@$@@*@@ @Ġ.Texp_construct  @@  @@@@@"@@@"y@@ @@@@"~@@@@@@"@@@"@@@@@J@@@"@@M@@@"@@@ภ&Static  @;&Static/Value_rec_types6recursive_binding_kind@@@@@@@B@@A:typing/value_rec_types.mliUU@@@ A@@@@@Ġ+Texp_record  @;+Texp_record@y@@@ @AJA_@A%j%l&3&8@@;@@&fields@@%arrayJ@1label_description@@@ [@7record_label_definition@@@ \@@ Z@@@ Y%%%%@@@.representation@@m5record_representation@@@ ]%%%&@@@3extended_expression@@&optionL_@@@ _@@@ ^&& &&2@@@@JA@@@@@ y@@@ AA@ঠ&fields w3 x9@3L[@@@"N@@@310@@AA*@'3$#@@BA@A9@6A@@ ? @@@R@@@#3        @@@@@Ġ*Overridden B L@;*OverriddenZ@@@ @#loc!t@@@ @@@ Ԡ@@@ @BA@B@A m44 m44@@@@@ N O@@@@@#@@@#2@ఠ!e$ P Q@ XA@@@@@#@@@@8 R@@@@@#E@@K@@@M@ @@#L@@ < U@@@@@@#@@@@#@@#@@@#_@.representation   @3@@@"@@A3@@@A@3@@BA@A@Ġ.Record_unboxed   @;.Record_unboxed v5record_representation@@@@$boolE@@@@A@BC@A nESS oESS@@@ @@  @@@@@#&@@@@@@@@#'@@@ $ %W@@ @@@#)H@#(@@@@@@@@#*@@@@@#+@@@ఐv3classify_expression ;[c <[v@C@@@u@dk@@@$@@$@@$3 B A A B B B B B@}@~@@@@@ఐd#env R[w S[z@̰@@@@ఐ!e _[{ `[|@@@H@%@@*@@j @Ġ+Texp_record o} p}@U@ t} u}@@W@@@#0@@@ @@@@@#1@@@@@#2@@@ภ&Static  @@@@@Ġ,Texp_variant  @;,Texp_variant@%label@@@ VI@@@ X@@@ W@BIA_@A %<%> %<%i@@@@@  @@@@@#9-@@@@@@#;@@@#:6@@@*@@@@@#<:@@:@Ġ*Texp_tuple  @;*Texp_tuple@@&stringQ@@@ O@@@ N@@@@ P@@ M@@@ L@AGA_@AJ""K"# @@@]@@  @@#@"!@@@#G@@@#F@@@@#H@@#E@@@#D~@@@=@@f@@@#I@@@@v@@j@@@#J@Ġ/Texp_atomic_loc  @;/Texp_atomic_loc@@@@ `#loc!t@@@ b@@@ a1label_description@@@ c@CKA_@A ''((R@@@@@ @ A@@>@@@#Q@@@" @@@#S@@@#R@@@@@@#T@@@8@@@@@#U@@@@@@@@@#V@Ġ:Texp_extension_constructor c d@;:Texp_extension_constructorL@W#locW!t@@@ @@@ ,!t@@@ @B]A_@A+,,+,,@@@@@  @@@@@#]@@@#\@@ @@@@#^@@@/@@@@@#_@@@@@@@@@#` @Ġ-Texp_constant   @;-Texp_constant@(constant@@@ 0@AAA_@A  @@@ @@  @@@@@#d*@@@@@@@@#e.@@.@@" @@@@@#g2@@@ภ&Static  (  .@@@@;@Ġ(Texp_for 06 0>@;(Texp_for@%Ident!t@@@ x)Parsetree'pattern@@@ y@@@ z@@@ {.direction_flag@@@ |@@@ }@FRA_@A ])) ^*5*G@@@ p@@ 0? 0@@@-@@@#q@@@)@@@#r@@ @ @@@#s@@@ @@@#t@@@'@@@#u@@@ @@@#v@@@O@@@@@#w@@@Ġ-Texp_setfield3AG4AT@;-Texp_setfield@ 4@@@ h+#loc+!t@@@ j@@@ i1label_description@@@ k L@@@ l@DMA_@A (( () @@@ @@[AU\AV@@ Y@@@#@@@&$@@@#@@@#@@@"@@@#@@@ l@@@#@@@A@@@@@#@@@@@@@@@#@Ġ*Texp_whileW]Wg@;*Texp_whilel@ @@@ v @@@ w@BQA_@A )) ))@@@ @@WhWi@@ @@@#@@@ @@@#@@@ @@@@@#@@@@@@@@@#@Ġ/Texp_setinstvarjpj@;/Texp_setinstvar@m!t@@@ t!t@@@ #loc@@@ @@@  @@@ @DVA_@A .** /*+@@@ A@@jj@@&@@@#Q@@@$@@@#V@@ @" @@@#@@@#_@@@ @@@#d@@@B@@L@@@#h@@h@@@@P@@@#l@@@ภ&Static@@@@u@Ġ0Texp_unreachable @;0Texp_unreachable@@@@A_@A m*,, n*,,@@@ @@@  @@p@@@#@@s@@@#@@@ภ&Static#$@&@@@+@Ġ*Texp_apply01@;*Texp_apply@ 1@@@ 8|@ 0)arg_label@@@ ;@ )apply_arg@@@ <@@ :@@@ 9@BDA_@A ?A ?z@@@ @ঠ(exp_desc\]@Ġ*Texp_identde@\@ij@@ "@@@#3kjjkkkkk@@@@@rs@@ca@@@#@@@# @ఠ"vd%@YA@@f@@@#@@@&@@@@@# @@@@@ @@@#H@#(@@@@b@a@@@#@_@@@#@@#@@@#=@@@| @@ @@@#B@@ @@@#E@@ఐ &is_ref!,!2@ @@@ @@@%% @@@%$@@%#3@ /LE@F@G@@@@ఐS"vd!3!5@ @@ @@@%,H@%.H@%-@@# @@@@@%/H@%+@ภ&Static9A9G@@@@'@Ġ*Texp_applyHNHX@ɠ@HZH[@@ @@@#3@ i@@@ఠ$args& H\ H`@$ZA@@֠@@@@#̠@@@@#@@#@@@#@@@' Ha@@ z@@@#!@@ }@@@#$@@డ$List&exists5bm6bq@ 9br:bx@@@@!a@&A$boolE@@@(@@(@ %@@@( @@@(@@(@@(@(list.mli$$$$@@,Stdlib__Liste@(#@@@@@ k@@@(@ i@@@)@@(G@(*@@@(@@(@'@@@(&@@@(@@(@@(3xwwxxxxx@ vo@p@q@@@@ఐ u1is_abstracted_argbyb@ @@@@ @@@(@ @@@(@@( @@@(@@(!@@ఐ$argsbb@+@@`O@@@(H@)H@)6@@} @@@@@)H@(<@ภ&Static@@@@E@Ġ*Texp_apply@@@@ @@@#@@@@@@@#۠@@@@#@@#@@@#@@@@@ @@@@#@@ C@@@#@@@ภ'Dynamic@;'Dynamic@@@AB@@AYY@@@B@@  @@ @Ġ*Texp_array@;*Texp_array @ ,mutable_flag@@@ m U @@@ o@@@ n@BNA_@A v) )  w) );@@@ @@"#@@@@@#$@@@ (@@@#@@@#-@@@*@@ @@@#1@@ @@@#4@@@ภ&Static=>@@@@@ E=@Ġ)Texp_packJK@;)Texp_pack 3@ @@@ @A[A_@A "++ "++@@@ @ఠ$mexp'^_@w[A@@ @@@#3baabbbbb@ @@@@@@@ @@@#@@ @@@#@@@ఐ :classify_module_expressionvw(@ @@@ @  @@@)@@)@@)3}||}}}}}@ (!@"@#@@@@ఐ #env),@ @@ @@ఐ<$mexp-1@@@ 6C@))@@)@@ @Ġ-Texp_function282E@;-Texp_function @  !.function_param@@@ 6@@@ 5 (-function_body@@@ 7@BCA_@A  @@@ -@@2F2G@@@@@#@@@#j@@ @@@@#o@@@,@@ .@@@#s@@ 1@@@#v@@@ภ&StaticKSKY@@@@ @Ġ)Texp_lazyZ`Zi@;)Texp_lazy @ @@@ @AYA_@A R ++ S ++@@@ e@ఠ!e(ZjZk@\A@@ @@@$ o@@@@@ c@@@$ s@@ f@@@$ v@@@డ'Typeopt6classify_lazy_argument'Typeopt!"@ %&@@@)Typedtree*expression@@@)Р%Other@4Constant_or_function@=Float_that_cannot_be_shortcut@*IdentifierР%Other@-Forward_value@@@@)A@@@)@@@)A@@@)@@)@2typing/typeopt.mlia++eA@@'TypeoptR@:5@@@2@@@)Р-@,@+@*Р)@(@@@@)A@@@)@@@)A@@@)@@)3xwwxxxxx@ x@y@z@@@@ఐ!e@ @@d@@@)I@)I@)@@r @@Р`@_@^@]Р\@[@@@@)A@@@)@@@)A@@@)3@4Constant_or_function@Р@@@~Р}@|@@@@)A@@@)@@@)A@@@@@)Y@@Р@@@Р@@@@@)A@@@)@@@)A@@@)t@@@ఐ 33classify_expression@ @@@ 2@ ! (@@@*^@@*]@@*\@@ఐ #env  @ @@ D@@ఐ!e@@@ >I@*k@@'@@ )@@@*Z@=Float_that_cannot_be_shortcut@Р@@@Р@@@@@)A@@@)@@@)A@@FG@@@)@@@*Identifier-Forward_value@Р @ @@@@)A@@]^@@ @)@Р-@,@+@*Р)@(@@@@)A@@@)@@@)A@@|@@@)@@@@:"@@РM@L@K@JРI@H@@@@*A@@@*@@@*A@@@* @@@ภ&Static%@@@@)@*Identifier%Other@Рg@f@@@@*$A@@&:&@@@ @*#B@Р@@@Р@@@@@*A@@@*@@@*A@@&.@@@*`@@Р@@@Р@@@@@*)A@@@*(@@@*'A@@@*&{@@@ఐ:3classify_expressionDNDa@@@@9@(/@@@*v@@*u@@*t@@ఐ%#envDbDe@ @@K@@ఐ!e Df!Dg@@@EI@*@@'@@@%Other@Р@@@Р@@@@@*;A@@@*:@@@*9A@@HhpIhv@@@*8@@Р@@@Р@@@@@*@A@@@*?@@@*>A@@@*=@@@ภ&Staticmn@ p@@@Q@@@Aqr@@ x@Ġ(Texp_new@;(Texp_new z@M!t@@@ #loc !t@@@ @@@  1class_declaration@@@ @CTA_@A *k*m *k*@@@@@@@$@@@$ #@@@" @@@$ @@@$ ,@@@@@@$ 1@@@;@@%@@@$5@@5@Ġ,Texp_instvar@;,Texp_instvar @!t@@@ !t@@@ #loc@@@ @@@ @CUA_@AP**Q**@@@c@@@@"@@@$g@@@ @@@$l@@ @@@@$@@@$u@@@9@@i@@@$y@@y@@@@m@@@$}@Ġ+Texp_object  @;+Texp_object@/class_structure@@@ mM@@@ @@@ @BZA_@A!++!++@@@@@;<@@@@@$ @@@@@@$"@@@$!@@@+@@@@@$#@@@@@@@@@$$@Ġ*Texp_matchYZ'@;*Texp_matchB@Z@@@ =$case+computation@@@ @@@@ ?@@@ >%value@@@ C@@@ B@@@ A'partial@@@ D@DEA_@A    @@@@@()@@@@@$/@@@431@@@$2@@@$1@@@$0@@@0@/@@@$5@@@$4@@@$3@@"@.@@@$6@@@[$@@ @@@$7@@@@'(@@@@@$8!@Ġ/Texp_ifthenelse*0*?@;/Texp_ifthenelse@@@@ p@@@ q s@@@ s@@@ r@COA_@A4)<)>5)<)~@@@G@@*@*A@@@@@$?K@@@@@@$@P@@ @@@@$B@@@$AY@@@1@@M@@@$C]@@]@@g@@Q@@@$Da@Ġ)Texp_sendBHBQ@;)Texp_send@@@@ ~{$meth@@@ @BSA_@Am*H*Jn*H*j@@@@@BRBS@@@@@$I@@@@@@$J@@@! @@}@@@$K@@@@@@@@@$L@Ġ*Texp_field3TZ4Td@;*Texp_field@4@@@ d+#loc+!t@@@ f@@@ e 1label_description@@@ g@CLA_@A(S(U(e(@@@@@WTeXTf@@U@@@$S@@@" @@@$U@@@$T@@@@@@$V@@@8@@@@@$W@@@@@@@@@$X@Ġ+Texp_assertzgm{gx@;+Texp_assertc@{@@@ !t@@@ @BXA_@A+g+i+g+@@@@@gygz@@@@@$]@@@@@@$^@@@" @@@@@$_@@@@@@@@@$` @Ġ(Texp_try{{@;(Texp_try@@@@ ERA@@@ H@@@ G@@@ F_N@@@ K@@@ J@@@ I@CFA_@A)" " *" "G@@@<@@{{@@@@@$j@@@@(yh@@@$m@@@$l@@@$kM@@@(u@@@$p@@@$o@@@$nZ@@@J@@N@@@$q^@@^@@h#@@R@@@$rb@Ġ-Texp_override@;-Texp_override@!t@@@ S@ :!t@@@ @#loc D@@@ @@@ @(@@@ @@ @@@ @BWA_@A+ +"+ +f@@@@@89@@1@@@$|@@@/@.@@@$@+)@@@$@@@$@P@@@$@@$~@@@$}@@@U @@@@@$@@@@$@@@@@$@Ġ*Texp_letophi@;*Texp_letopQ@ǐ@@@ @A\A_@A#++),,@@;@@$let_@@*binding_op@@@ $,,$,,(@@@$ands@@͠@@@ @@@ %,),/%,),F@@@%param@@ !t@@@ &,G,M&,G,]@@@$body@@B1@@@ @@@  ',^,d ',^,v@@@'partial@@5@@@ (,w,}(,w,@@(@@\A@@@@@@@@@A+@@@@Y@@@$/@@@b@@#@@@$3@@3@@= @@'@@@$7@@@ภ'Dynamic@@@@@@@@A@г預"sd@@@@@:@"*3@R@@ @@@@@A@@(@@@@;@@:@@:C@:@@@"@@@@@@@@"@@"@@"3@@@@࣠@(rec_flag3A@+aA@@3@!@@@@@@#env4A!"@:bA@@3"!!"""""@1@@@@@@@@(bindings5A23@KcA@@332233333@@@@@@@@@ డ&ignoreF!!G!!@@!a@$unitF@@@\@@['%ignoreAA @@@*stdlib.mli````@@&Stdlibt@@@@TG@;@@@;@@;3eddeeeee@3?E@6@7@@@@ఐf(rec_flagu!!v!!@P@@i@@3@@&@@@;G@;@@ఠ'old_env6!!!!@dA@@pC@;3@&@@@ఐx#env!!!!@`@@| @A@!!@@@ఠ1add_value_binding7!!!!@eA@@@@@@;K@;p@@@;G@;@@@@;jG@;$G@;%@@;&G@; @@;!G@;3@\@9@:@;@@@࣠@#env9A!!!!@fA@@(3@5!!""@@@@@  @@"vb:A!!!!@gA@@-3@!?@@@@@@@@ఐ"vb!!!!@B@@@@C3@#@@@&vb_pat!!!!@3&vb_pat@@@ {'pattern@@@ @@@ 3'vb_expr @@@ @@A@ArEFsEF@@@3+vb_rec_kind/Value_rec_types6recursive_binding_kind@@@ @@B@AFFFFP@@@3-vb_attributes"U@@@ @@C@AFQFUFQFo@@@3&vb_loc+!t@@@ @@D)@AFpFtFpF@@@@AEEEE@@@H=@@7@@@;,G@(pat_descJ!!K!"@3(pat_desc,pattern_data!a@ |@@@ @@@ 3'pat_loc !t@@@ @@A @Arr @@\@3)pat_extra@)pat_extra@@@ @!t@@@ @@@@ @@ @@@ @@B*@As s G@@]@3(pat_type:)type_expr@@@ @@C6@AtHLtHf@@_@3'pat_envF!t@@@ @@DB@Augkugz@@c@3.pat_attributesR@@@ @@EK@Av{v{@@d@@Aqq@@[@a@@,pattern_desc;@t@;0@;2@@@;4J@;5@Ġ(Tpat_var""""@;(Tpat_varS@@@ @@@ @ !t@@@ #loc @@@ @@@ T#Uid!t@@@ @C@ALAAGQ & (HQ & g@@@Zk@ఠ"id;""""@hA@@)@@@;E@ఠ$_loc<"""""@iA@@0.@@@;G@@@;F@ఠ$_uid=""$""(@0jA@@7@@@;H@@@Y"")@@r@@@;J@@@;I(@ @y@@@;L@@@;K/@@@@ఠ$size>8"-";9"-"?@QkA@@g@@@;gL@;W3>==>>>>>@ERK@L@ME>@?@@4-@.@/@@@ఐ3classify_expressionQ"-"BR"-"U@Y@@@@z@@@;[@@;Z@@;Y@@ఐܠ'old_enve"-"Vf"-"]@@@'@@ఐ"vbt"-"^u"-"`@y@@6@'vb_expr{"-"a|"-"h@k @@M@;i?@@0@@C@@A@"-"7@@డ%Ident#add%Ident"l"v"l"{@ "l"|"l"@@@!t@@@6@!a@5@ܠ @@@6 @@@6@@6@@6@@6@0typing/ident.mligg@@X@% @@@@@@;r@ @@@@;q@@@;o@@;n@@;m@@;l3@@@@@@@ఐޠ"id"l""l"@@@@@@@;L@;L@;@@ఐ$size"l""l"@!@@8$@@ఐ(#env"l""l"@ @@L1@@h@@K2@y@@:@@""""@@U@@@;P@@@;O @ @\@@@;R@@@;Q@@@ఐJ#env""?@.@@@Y@@@A!!B@@[3@@@@MDA@uG@;K@A@H@డ$List)fold_left-""."#@ 1"#2"# @@@@#acc@&@!a@& @@'@@'@ @ @@@'@@'@@'@@'@ 33 3r@@ ]@#@@@@7F@;@*@@;@@;@@41@@@; @@;@@;@@;3]\\]]]]]@@@@@@@ఐȠ1add_value_bindingm"# n"#@ @@@@@@;@@@;@K@@@; @@;@@;@@ఐj#env"#"#"@R@@n+@@ఐf(bindings"##"#+@-@@r8@@l@@E9@@@F@@@G @V@@H@A@@@@o@@;@@;@@;C@;@@@@ppUT@SV@@m@j`@@@"@@"@@"3@9@@@࣠@#env?A#,#@#,#C@lA@@3@@@@@@@Ġ$Path#}##}#@&Pident#}##}#@@;&Pident$Path!t@@@*@%Ident!t@@@*@A@@D@A/typing/path.mliSTVSTi@@@B@ఠ!x@#}##}#@mA@@@@@;3@ I@@@A@@@@@3 @@D@;D@;@@@డ)find_same%Ident####@ ####@@@@@@6@Y!a@5@@@6@@6@@6@}h~h@@`Y@@@@@@@;@mh@@@;i@@;@@;3;::;;;;;@?KD@E@F@@@@ఐR!xK##L##@ @@@@@;G@;G@;@@ఐ#env_##`##@_@@ $@@L@@%@Ġ)Not_foundk##l##@;)Not_found#exnG@@@@@@ A@A&_none_@@A@@I@@@@@@@@<C@@@ภ'Dynamic&&&&@ @@@9@@@< Q@@@##&&@@@@@;W@Ġ$Path'''' @$Pdot'' ''@@;$Pdot@@@@*&stringQ@@@*@BA@D@AUU@@@C@@''''@@@@@;@@@@@@;@@@( @@@Ġ$Path''''@&Papply''''@@;&Papply@@@@*@@@*@BB@D@AWW@@@ D@@'' ''!@@@@@;@@@@@@;@@@% @@@@V @@@Ġ$Path''$''(@)Pextra_ty'')''2@@;)Pextra_ty0@1@@@*5(extra_ty@@@*@BC@D@A)Y*Y5@@@:E@@''3''4@@D@@@;"@@@@@@;'@@@' @@$(@@ @@%)@@@ภ'Dynamic/''0''@ <@@@2@@ApA4#,#t@б@@6:;#,#F<#,#G@@г/Value_rec_typesE#,#KF#,#Z@I#,#[J#,#q@@@@@@<"D@;Q @@@@@@@D*@A:==;==@@M@@A>=`=d?=`=@@Q@I>@@8@@@<:H@Ġ*Tmod_ident(B(H(B(R@;*Tmod_identI@@@ Y@!t@@@ I#loc!t@@@ K@@@ J@B@@G@Al?m?qm?m?@@@@ఠ$pathD(B(T(B(X@5pA@@#@@@@@)@@@@?@@' @@@Ġ,Tcoerce_none*)h)r*)h)~@;,Tcoerce_none@@@ @@@@AD@A* FF+ FF@@@=@@@  @@@@@<@@@@@<!@@@ఐ:classify_module_expression+))+))@@@@@z@@@<@@<@@<4@@ఐ~#env+))+))@h@@A@@ఐ$mexp +)) +))@J@@J@<P@@'@@@@@<T@Ġ1Tcoerce_structure ,)) ,))@;1Tcoerce_structureP@_@#intA@@@ @;@@@ @@ @@@ t@[!t@@@ @@@@ @V@@@ @@ @@@ @B@AD@A FFFG+@@@@@ S,)) T,))@@9@8@@@<Ġ@p@@@<@@<@@@<@@@6@5@@@<Ƞ@2@@@<ɠ@@@@<@@<@@@<@@@f)@@@@@<@@@@@<@@@ภ&Static -)) -))@@@@@Ġ/Tcoerce_functor .)) .))@;/Tcoerce_functor@@@@ @@@ @BAAD@AG,G.G,Gd@@@@@ .)* .)*@@@@@<@@@@@@<@@@ @@@@@<@@@@@<@@@ภ&Static /** /**@@@@ @Ġ1Tcoerce_primitive 0**" 0**3@;1Tcoerce_primitive@B2primitive_coercion@@@ @ABAD@A4GeGg5GeG@@@G@@ 0**4 0**5@@@@@<,@@@@@@@@<0@@@@@<3@@@డ$Misc+fatal_error$Misc 1*9*E 1*9*I@  1*9*J!1*9*U@@@&stringQ@@@>!a@>@@>@.utils/misc.mliYY@@$Misc@@@@@@@@@@@@@ J@@@@?g@@ &letrec: primitive coercion on a module!(1*9*W!)1*9*}@@!+1*9*V!,1*9*~@@,@@@@J@@J@@{@@: @@+|@Ġ-Tcoerce_alias!?2**!@2**@;-Tcoerce_aliasx@T!t@@@ !t@@@ a@@@ @CCAD@AHHHH@@@@@!]2**!^2**@@@@@<@@@@@@<@@ @x@@@<@@@.@@|@@@<@@@@@<@@@డ+fatal_error$Misc!3**!3**@ !3**!3**@@@@@@@@@ $@@@@J@@ @@@ @@ "letrec: alias coercion on a module!3**!3**@@!3**!3**@@@@@@J@@J@@@@' @@@@@A!))K)S!4**@@?@Ġ+Tmod_unpack!5**!5**@;+Tmod_unpack@@@@ W+module_type@@@ X@BF@G@AA*A, A*A[@@@2@ఠ!eG!5**!5**@!sA@@@@@<{3@@!5*+!5*+@@@@@<|;@@@+!5*+@@0@@@<}@@@3@@@<~C@@@ఐ*3classify_expression!6++!6++!@@@@)@@@@@@@@@@@3!!!!!!!!@W0)@*@+@@@@ఐ#env"6++""6++%@w@@@@ఐD!e"6++&"6++'@@@8H@@@@*@@ @@@A"(%()@г"sd"$'( "%'("@@@@@B@<63"("'"'"("("("("(@@@ @@@@@A@@@@@@B@@B@@BC@B@@@"8''%@@ఐ}3classify_expression"B7+(+-"C7+(+@@J@@@zs@@@B@@@B@L@@@B|@@@B@@B@@B3"S"R"R"S"S"S"S"S@a@@@@డ%empty%Ident"e7+(+A"f7+(+F@ "i7+(+G"j7+(+L@@!a@5@@@6@fqqfq@@W@@@@@@B@@@BC@BC@B/@@D@@@ @@@! @@@!@@!B@BC@B?@ ,@б@г  -@@@@!*@г@@@@!1@@ @@!3@ EA@@@B@@@B?@@@B@@BB@B>@A@"~  Q@@R@A""ΐ " {1 Usage of recursive variables} ":+O+O":+O+v@@@@@@3""""""""@SQa@d@N@@$ModeB"<+x+"<+x+@"DA@БA+!tC"@,G,N"@,G,O@@;@@&Ignore@@"A,R,V"A,R,^@)ocaml.doc# [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur. #B,_,c#D,-'@@@@@@@#uA%Delay@@# F-)--# F-)-4@ A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. #G-5-9#I-.@@@@@@@#3vA%Guard@@##K..#$K..$@0  A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. #1L.%.)#2Z1=1C@@@@@@@#JwA&Return@@#:\1E1I#;\1E1Q@G  A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context. #H]1R1V#I`222w@@@@@@@#axA+Dereference@@#Qb2y2}#Rb2y2@^ A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context. #_c22#`e33l@@@@@@@#xyA@@A@@@@@#c@,G,I@o For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it. #p=++#q?,,F@@@@@@@A@#tA@##xA,R,X@t@@@#@@@@@@##F-)-/}@n@@@#~}@}}@@@}@}@#yy#K..w@h@@@z#xw@ww@@@w@w@#ss#\1E1Kq@b@@@t#rq@qq@@@q@q@#mm#b2y2k@\@@@n#ΐlk@kk@@@k@k@@A@g#ِfe@ee@@@e@e@@r@3########@@@@@#g3n3t#g3n3y@@@@@@B@@@@B#@@@B@@B@@B3########@%@@@%equal@$zA@@@@B@@@@B@@@B@@B@@B'б@г'!t$g3n3$g3n3@@/@@@B$@@б@г/!t$g3n3$g3n3@@7@@@B2@@г7$bool$*g3n3$+g3n3@@?@@@B>@@@@@BA@@@#@@BD& @@XWA@@@V@@@B@U@@@BT@@@B@@B@@BS@డ"!=$Kg3n3}$Lg3n3@@!a@@$boolE@@@'@@&@@%&%equalBA @@@@ y y@@ Q@@б@гba@@@@B^@б@г^]@@@@BZ@г$9ZY@@@@BV@@ @@BU@@@@BT@$g3n3|$g3n3@@@@@@@C@@@@C@@@C@@C@@CD@C @A@$g3n3p@@@@ఠ$rank$n4O4U$n4O4Y@${A@@@@@@CD@C#@@@C!D@C@@CD@C3$$$$$$$$@@@@@@@Ġ&Ignore$o4e4k$o4e4q@;@@@B@@@@E@@A@@@@@!3$$$$$$$$@.$n4O4Q$s44@@@@@@@$o4e4u$o4e4v@@' @Ġ%Delay$p4w4}$p4w4@;@@@AE@@A@@@@@:@@@A$p4w4$p4w4@@:@Ġ%Guard$q44$q44@;/@@@BE@@A@@@@@M,@@@B%q44%q44@@M2@Ġ&Return% r44% r44@;B@@@CE@@A@@@@@`?@@@C%r44%r44@@`E@Ġ+Dereference%s44% s44@;U@@@DE@@A@@@@@sR@@@D%(s44R@@rW@@A!g%+n4O4\U@@@V@@D@C4]@A@Z@ZY@t@ఠ$join%;z5S5Y%<z5S5]@%T|A@@@@@@CWD@C6@ D@C; D@C<@@C=D@C7@@C8D@C53%M%L%L%M%M%M%M%M@@@@@@࣠@!mA%^z5S5^%_z5S5_@%w}A@@3%_%^%^%_%_%_%_%_@,%fz5S5U%g{5e5@@@@@  @@"m'A%rz5S5`%sz5S5b@%~A@@*3%s%r%r%s%s%s%s%s@!6@@@@@@@@డ#">=%{5e5s%{5e5u@@!a@@;@@@6@@5@@4-%greaterequalBA @@@@@ @ A@@ ?V@@@@$@@@CVF@CD@@@@CC@@CB@@CA3%%%%%%%%@6Bb@9@:@@@@ఐ$rank%{5e5l%{5e5p@j@@@ @@@CP$@@@CO@@CN@@ఐt!m%{5e5q%{5e5r@Y@@'@@@@0(@@ఐ6$rank%{5e5v%{5e5z@@@@1@@@C\$@@@C[@@CZ?@@ఐ"m'%{5e5{%{5e5}@I@@L@@@@WH@CbO@@A@@@@@CeG@CLU@ఐ!m&{5e5&{5e5@@@_@ఐ"m'&{5e5@f@@i@&{5e5i@@k@A@D@Ci@A@@@ʠ@ఠ'compose&%77&&77@&>A@@@|@@@CD@Ck@@@@CD@Cp@@@CD@Cq@@CrD@Cl@@CmD@Cj3&=&<&<&=&=&=&=&=@ @@@@@࣠@"m'A&N77&O77@&g@A@@%3&O&N&N&O&O&O&O&O@2&V77&W8 8A@@@@@  @@!mA&b77 &c77!@&{AA@@03&c&b&b&c&c&c&c&c@!<@@@@@@@@@ఐ-"m'&x77*&y77,@@@N3&x&w&w&x&x&x&x&x@"H@@@@@@ఐ(!m&77.&77/@ @@T@@@@@b@[@@Cy@@Ġ&Ignore&757;&757A@@@@@w@C{3&&&&&&&&@*@@@@@&757C&757D@@xD@Cw@C| @@@@@@ @@C@@@@@&757G&757H@@@C@@Ġ&Ignore&757J&757P@@@@@@C)@@@@@@@@C0@@0@@5 @@@@@@C7@@@ภ&Ignore&757T&757Z@@@@@@@Ġ+Dereference&7[7a&7[7l@@@@@@CS@@@&7[7n&7[7o@@@C[@@@@@@ @@Cb@@@@@@Ch@@@ภ+Dereference'7[7s'7[7~@@@@q@@Ġ%Delay'$77'%77@>@@@@@C@@@'-77'.77@@@C@@@@@@ @@C@@@@@@C@@@ภ%Delay'D77'E77@^@@@ @@Ġ%Guard'U77'V77@\@@@@+@C@@Ġ&Return'b77'c77@V@@@@/@C@@@@@@ @@C@@@@@@C@@@ภ%Guard'z77'{77@@@@B@@Ġ%Guard'77'77@@@@@a@C3''''''''@@@@@Ġ+Dereference'77'77@@@@@l@C@Ġ%Guard'77'77@@@@@ @@@@ @Ġ%Delay'77'77@@@@@'@@'77'77@@*@!m'77'77@'BA@@@C'77'77@@%7@@=@@@>@,@@C>@@@D@2@@CD@@@ఐ!m'77'77@@!@@@3''''''''@e'@@@@Ġ&Return'77'77@@@@@@Cd@@Ġ&Return'77'77@@@@@@Cq@@@@@@ @@Cx@@@@@@C~@@@ภ&Return(78(78 @@@@@@Ġ&Return(%8 8(&8 8@@@@@@C@@Ġ+Dereference(88 8(98 8%@@@@@@C@Ġ%Guard(C8 8((D8 8-@J@@@@ @@@@ @Ġ%Delay(M8 80(N8 85@g@@@@@@(Q8 8(R8 86@@@!m(W8 8:(X8 8;@(pCA@@@C°(^8 8(_8 8<@@%@@<@@@=@,@@C@@@C@2@@C@@@ఐ!m(t8 8@@@ @ @@<3(t(s(s(t(t(t(t(t@&@@@@@A(z77$$@@@@.%A@SD@D-,@A@)@)(@?@A@@3@PE@ha@b@c@@3((((((((@Kk@@(<+x+(8B8E@@@(<+x+x@@ƠA+$modeD(8G8L(8G8P@@;@@&Ignore@@(8G8\(8G8b@@(FA%Delay@@(8G8c(8G8j@@(GA%Guard@@(8G8k(8G8r@@(HA&Return@@(8G8s(8G8{@@(IA+Dereference@@(8G8|(8G8@@(JA@@A!t@@@D@@@@@(8G8G @@A@(EA@#8865@4@@@8@#44(8G8e2@1@@@5@#11(8G8m/@.@@@2@#..(8G8u,@+@@@/@#++(8G8~)@(@@@,@@Aг($Mode(8G8S(8G8W@/)8G8X)8G8Y@@@73))))))))@:3@'!A@P@k@@@@@8|;@@@A@@@DF@D.@@@@I@@@G@@ @@J@@JT@3))))))))@@@#EnvE)*88)+88@)CA@Б!M?F)<==)===@)UKA@гР'#Map$Make)N==)O==@ )R==)S==@@@3)T)S)S)T)T)T)T)T@R@@@#Ord␡+Stdlib__Map+OrderedType#key@;@@@A!t@@@F9@@@@'map.mlin::n::@@@@r@A@!t@;!a@F8@A@A+Stdlib__Map$Make1@@F:I@B@@@I V ZI V e@@@@2D@A@%empty#!a@F7@@@F6@0L  1L  @@DE@@#add@I@@@F5@!a@F3@  @@@F4$ @@@F2@@F1@@F0@@F/@OO  PO  @@cF@@+add_to_list@@@@F.@!a@F+@>$listK@@@F-@@@F,I @@@F*@@@F)@@F(@@F'@@F&@yX  zX  @@G@@&update@I@@@F%@@&optionL!a@F @@@F$  @@@F#@@F"@v@@@F!z@@@F@@F@@F@@F@^^@@H@@)singleton@u@@@F@!a@F@@@F@@F@@F@jW[jW{@@I@@&remove@@@@F@!a@F@@@F@@@F@@F@@F@oo@@J@@%merge@@@@@F@`!a@F @@@F@k!b@F@@@Ft!c@F@@@F @@F @@F @@F @@@@F@@@@F@@@F@@F@@F@@F@vY]x@@,K@@%union@@@@@F@!a@E@ @@@E@@E@@E@@E@@@@E@@@@E@@@E@@E@@E@@E@EfjFf@@YL@@(cardinal@)!a@E@@@E#intA@@@E@@E@^_@@rM@@(bindings@B!a@E@@@E @>@@@E@@@E@@@E@@E@8<8a@@N@@+min_binding@c!a@E@@@E@[@@@E蠠@@@E@@E@bfb@@O@@/min_binding_opt@!a@E@@@E#@{@@@E㠠@@@E@@@E@@E@JNJ|@@P@@+max_binding@!a@E@@@E@@@@Eݠ@@@E@@E@484[@@Q@@/max_binding_opt@!a@E@@@E`@@@@Eؠ@@@E@@@E@@E@ @@ R@@&choose@ݠ!a@E@@@E@@@@EҠ@@@E@@E@@@)S@@*choose_opt@!a@E@@@E@@@@E͠@@@E@@@E@@E@67@@JT@@$find@@@@E@!a@E@@@E@@E@@E@NO@@bU@@(find_opt@@@@E@7!a@E@@@E۠ @@@E@@E@@E@kIMlIs@@V@@*find_first@@=@@@E$boolE@@@E@@E@\!a@E@@@E@T@@@E@@@E@@E@@E@    D@@W@@.find_first_opt@@f@@@E)@@@E@@E@!a@E@@@E'@@@@E@@@E@@@E@@E@@E@"*"."*"l@@X@@)find_last@@@@@EU@@@E@@E@!a@E@@@E@@@@E@@@E@@E@@E@#_#c#_#@@Y@@-find_last_opt@@@@@E|@@@E@@E@֠!a@E@@@Ez@@@@E@@@E@@@E@@E@@E@$y$}$y$@@'Z@@$iter@@@@@E@!a@E$unitF@@@E@@E@@E@ @@@E @@@E@@E@@E@9%%:%& @@M[@@$fold@@ @@@E@!a@E@#acc@E@@E@@E@@E@0@@@E@  @@E@@E@@E@]'%')^'3'l@@q\@@#map@@!a@E!b@E@@E@M @@@EQ @@@E@@E@@E@|(e(i}(e(@@]@@$mapi@@N@@@E~@!a@E{!b@Ey@@E}@@E|@q @@@Ezu @@@Ex@@Ew@@Ev@))))@@^@@&filter@@r@@@Eu@!a@Ep;@@@Et@@Es@@Er@ @@@Eq@@@Eo@@En@@Em@****@@_@@*filter_map@@@@@El@!a@EhO!b@Ef@@@Ek@@Ej@@Ei@@@@Eg @@@Ee@@Ed@@Ec@ ,, ,,?@@`@@)partition@@@@@Eb@!a@E\@@@Ea@@E`@@E_@ @@@E^@@@@E[@@@@E]@@EZ@@EY@@EX@.../%@@/a@@%split@@@@EW@!a@ES@@@EV@ @@@ER@@@@ET@@@@EU@@EQ@@EP@@EO@H$0'0+I$0'0\@@\b@@(is_empty@,!a@EN@@@EM@@@EL@@EK@_022!`022;@@sc@@#mem@/@@@EJ@H!a@EI@@@EH@@@EG@@EF@@EE@{32l2p|32l2@@d@@%equal@@!a@E@@@@@ED@@EC@@EB@m@@@EA@s@@@E?#@@@E>@@E=@@E<@@E;@722723-@@e@@'compare@@!a@E6@]@@@E:@@E9@@E8@@@@E7@@@@E5m@@@E4@@E3@@E2@@E1@=4(4,=4(4a@@f@@'for_all@@@@@E0@!a@E,d@@@E/@@E.@@E-@ @@@E+n@@@E*@@E)@@E(@A45A450@@g@@&exists@@@@@E'@!a@E#@@@E&@@E%@@E$@ @@@E"@@@E!@@E @@E@F55F55@@%h@@'to_list @!a@E@@@E@@@@E@@@E@@@E@@E@2M6~63M6~6@@Fi@@'of_list @ՠ@ @@@E@!a@E@@E@@@E(@@@E@@E@SQ66TQ67@@gj@@&to_seq @7!a@E@@@E&Stdlib#Seq!t@9@@@E@@@E@@@E@@E @zW77{W77@@k@@*to_rev_seq @^!a@E @@@E '#Seq!t@]@@@E @@@E @@@E@@E@[8A8E[8A8n@@l@@+to_seq_from @n@@@E@!a@E@@@EP#Seq!t@@@@E@@@E@@@E@@E@@D@_88_88@@m@@'add_seq@l#Seq!t@@@@D@!a@D@@D@@@D@  @@@DƠ@@@D@@D@@D@d99d99@@n@@&of_seq@#Seq!t@@@@D@!a@D@@D@@@D@@@D@@D@h::h::>@@)o@@@@5G@735@Р%Ident/==/==@@;@@@A@@@D@@@@RYYRY_@@@@)@@A@Ӡ!T@@TaiTa@,Identifiables@@@%equal@!t@@@D@@@@D$boolE@@@D@@D@@D@@/Stdlib__Hashtbl`@@$hash@@@@D#intA@@@D@@D@1@a@@&output@&Stdlib+out_channel@@@D@76@@@D$unitF@@@D@@D@@D@M@JC@@%print@&Format)formatter@@@D@RQ@@@D@@@D@@D@@D@f@cD@@Ӡ#Set@@nku@@@Ӡ#Map@@vsv@@@Ӡ#Tbl@@~{w@@@)doc_print*Format_doc'printer@@@D@@@D@[(([(K@@*oB@@0print_with_scope'printer@@@D@@@D@\LL\Lw@@*C@@-create_scoped%scope#intA@@@D@&stringQ@@@D3@@@D@@D@@D@aa"@@*D@@,create_local@@@@DE@@@D@@D@b##b#@@@*E@@1create_persistent@&@@@DW@@@D@@D@cAAcAc@@*F@@-create_predef@8@@@Di@@@D@@D@ddddd@@*G@@&rename@w@@@Dz@@@D@@D@ff@@*H@@$name@@@@D^@@@D@@D@kRRkRg@@*I@@+unique_name@@@@Dp@@@D@@D@(lhh)lh@@+ J@@4unique_toplevel_name@@@@D@@@D@@D@:m;m@@+K@@*persistent@@@@D$boolE@@@D@@D@NnOn@@+1L@@$same@@@@D@@@@D@@@D@@D@@D@eofo@@+HM@@-compare_stamp@@@@D@@@@D@@@D@@D@@D@|v}v @@+_N@@'compare@@@@D@@@@D@@@D@@D@@D@y W Wy W q@@+vO@@&global@@@@DY@@@D@@D@|  |  @@+P@@)is_predef@)@@@Dk@@@D@@D@}  }  @@+Q@@%scope@;@@@D@@@D@@D@    @@+R@@,lowest_scope&@@@D@A  A  @@+S@@-highest_scope3@@@D@B  B  )@@+T@@&reinit@$unitF@@@D@@@D@@D@D + +D + C@@+U@@+;!a@D@A@A-+ @@DG@B@@@ F E EF E P@@@@+V@A@%empty[@D@@@D@X@U@#add@@@@D@6@D@@@@D @@@D@@D@@D@@D@3@/@)find_same@@@@D@)@D@@@D@@D@@D@@@)find_name@@@@D@;!a@D@@@D@@@@D@@@D@@D@@D@bici@@,EZ@@(find_all@@@@D@]!a@D@@@D$listK@@@@D@@@D@@@D@@D@@D@jj"@@,n[@@,find_all_seq@@@@D@!a@D~@@@D&Stdlib#Seq!t@+@@@D}@@@D|@@@D{@@Dz@@Dy@k##k#W@@,\@@)fold_name@@>@@@Dx@!a@Dt@!b@Dr@@Dw@@Dv@@Du@@@@Ds@  @@Dq@@Dp@@Do@lXXlX@@,]@@(fold_all@@b@@@Dn@!a@Dj@!b@Dh@@Dm@@Dl@@Dk@@@@Di@  @@Dg@@Df@@De@mm@@,^@@$iter@@@@@Dd@!a@D`(@@@Dc@@Db@@Da@ @@@D_2@@@D^@@D]@@D\@$n%n@@-_@@&remove@@@@D[@!a@DY@@@DZ&@@@DX@@DW@@DV@@oAo@@-#`@@2make_key_generator@]@@@DU@@@@DT@@@DS@@DR@@DQ@Ws==Xs=f@@-:a@@@ @U@@G@F@E@p@@@ 3==@ G;@@@A @@@Gk@@@@ @@@ A@ G; @A@A    @@@Gj  @@ @@@ A@  @@@Gi@ @ @ @(@@@Gh@ @ @@@Gg @@@Gf@@Ge@@Gd@@Gc@ @ @ @@@@Gb@ @(  @@@Ga@@@G`0  @@@G_@@@G^@@G]@@G\@@G[@ @ @ @3@@@GZ@@ ~ {@@@GY w @@@GX@@GW@O @@@GVS @@@GU@@GT@@GS@@GR@ v@ s@ r@R@@@GQ@ qb t@@@GP@@GO@@GN@ m@ j@ i@a@@@GM@q h@@@GLu l@@@GK@@GJ@@GI@ d@ a@ `@@v@@@GH@ _ ^@@@GG@ Z Y@@@GF U T@@@GE@@GD@@GC@@GB@ n@@@GA@ i@@@G@ d@@@G?@@G>@@G=@@G<@ P@ M@ L@@@@@G;@ K@ M G P@@@G:@@G9@@G8@@G7@ V@@@G6@ \@@@G5à `@@@G4@@G3@@G2@@G1@ F@ C@ B@͠ A@@@G0 =@@@G/@@G.@ :@ 7@ 6@ڠ 5@@@G- 1@@@@G,@ B@@G+@@@G*@@G)@ 0@ -@ ,@ +@@@G(@@@@G'@ 5@@G&@@G%@ '@ $@ #@ "@@@G$ @@@@G#@ /@@G"@@@G!@@G @ @ @  @ @@@G@@@@G@ "@@G@@G@ @ @ !@. @@@G @.@@@G@ @@G@@@G@@G@ @ @ "@E @@@G@B@@@G@ @@G@@G@ @@#@X@@@G@X@@@G@ @@G@@@G@@G@@@$@d@@@G @t@@@G @@G @@G @@@%@s@@@G @@@@G@@@G@@G@@G@@@&@@@@@G@@@G@@G@@@@G@@@@G@@@F@@F@@F@@@'@@@@@F@@@F@@F@@@@FΠ@@@@F@@@F@@@F@@F@@F@@@(@@@@@F@@@F@@F@٠@@@F@@@@F@@@F@@F@@F@@@)@@@@@F@@@F@@F@@@@F@@@@F砠@@@F@@@F@@F@@F@@@*@@@@@F@@@@F@@F@@F@@@@F@@@F@@F@@F@@@+@@@@@F@@@@F@@F@@F@1@@@F@@@F@@F@@F@@@,@@@@F@A@@@FE@@@F@@F@@F@@@-@@F@@@F@@@F@@F@X@@@F\@@@F@@F@@F@@@.@@]@@@F@{@@@F@@F@@F@r@@@Fv@@@F@@F@@F@z@w@v/@@w@@@F@uqp@@@F@@F@@F@~@@@Fz@@@F@@F@@F@l@i@h0@@@@@F@gc@@@F@@F@@F@o@@@F@w@@@F@}@@@F@@F@@F@@F@b@_@^1@@@@F@Ġ]@@@F@̠e@@@F@Yk@@@F@ؠq@@@F@@F@@F@@F@X@U@T2@S@@@FO@@@F@@F@N@K@J3@@@@F@I@@@FE@@@F@@F@@F@D@A@@4@@?@A;@@@F@@F@@F@ I@@@F@O@@@F:@@@F@@F@@F@@F@9@6@55@@4@60@@@F@@F@@F@&>@@@F@,D@@@F/@@@F@@F@@F@@F@.@+@*6@@0@@@F@)%@@@F@@F@@F@E1@@@F$@@@F@@F@@F@#@ @7@@I@@@F@@@@F@@F@@F@^&@@@F~@@@F}@@F|@@F{@@@8@k@@@Fz@k@@@Fy@ @@Fx@@@Fw@@Fv@@ @ 9@ @~@@@Fu@@@Ft@@@Fs @@@Fr@@Fq@@@:@@@@Fp@@@@Fo@@@Fn@@@Fm@@Fl@@@;@@@@Fk@@@@Fj@@@Fi@@@Fh@@Fg@@@<@@@@Ff@Р@@@Fe2@@@@Fd@@@Fc@@@Fb@@Fa@@F`@@@=@Gڠ@@@@F_@@@F^@@@F]@@@@F\@@@F[@@FZ@@FY@@@>@fϠ@@@@FX@@@FW@@@FV@@@FU@@FT@@@@ @@7R==;@<@ A+!t@H7]==7^==@@;@@5iA.!t!t@@@H@@@H@@@@7o==7p=> @| 8 A "t" maps each rec-bound variable to an access status 7}==7~==@@@@@@@@@7LA@@Aг !M7=>7=>@'7=>@@г)$Mode7==7=>@07=>7=>@@@8377777777@Jk@A@A@vu@on@[Z@@?@#"@@@@@@@@ut@dc@ON@>=@)(@@  @@@@@@kj@[Z@FE@.-@@@@@@@@lk@UT@@?@+*@@@@@@@;@@@A@@@L @Gl@@@@@@@@pk@@@iq@@8@@@@@@@@388888888@u@@@ఠ%equal8!> >8"> >@8:MA@@@_N@@@LEI@L@@@L2@ @@@L1 ,@@@L0@@L/@@L.I@L38<8;8;8<8<8<8<8<@@@@డ%equal!M8N> >8O> >@ 8R> >8S> > @@@@ `@ b \@@@HD@@HC@@HB@8 j@@@HA@> p@@@H@ [@@@H?@@H>@@H=@@H<@ Z@ W!@@@@E@G u@@@L @@L@@L@QO@@@L@WU@@@L t@@@L@@L@@L@@LH@@డ%equal$Mode8> >!8> >%@ 8> >&8> >+@@@o@@@D4@t@@@D3@@@D2@@D1@@D0@@@@@}@@@L@@@@@L?@@@L>@@L=@@L<y@@k@@z@A@8> > !@@"@}@ఠ$find8>->38>->7@8NA@@@L!t@@@LRI@LM@@@@L[I@LVN@@@LI@LW@@LXI@LN@@LOI@LL388888888@@@@@@࣠@"idA@8>->98>->;@@&@@@LS388888888@88>->/8>Q>@@@@  @9OA2г5%Ident9>->=9>->B@<9>->C9>->D@@@D@@@LP @@9>->89>->E@@@K"@@@@#tblA@9&>->G9'>->J@@K@@@L\39(9'9'9(9(9(9(9(@2?7@:@,@@@  @9GPAT гW!t9:>->L9;>->M@@_@@@LY@@9A>->F9B>->N@@@f@@@@డ$find!M9T>Q>Y9U>Q>Z@ 9X>Q>[9Y>Q>_@@@5@@@G@; @@@G @@G@@G@ @ @@@ @@@Ld@GI@L~K@Lb@@@Lc@@La@@L`39t9s9s9t9t9t9t9t@MZR@U@J@@@@ఐ"id9>Q>`9>Q>b@Y@@+@@@LrL@Lq@@ఐs#tbl9>Q>c9>Q>f@@@@@@Lz%@@I@@*&@Ġ)Not_found9>Q>l9>Q>u@:@@@@8@@@L4@@@ภ&Ignore9>Q>y@;@@@DL@@@@E@@A@@@@@A@@@9>Q>U@@GC@A@I@L@A@@@נ@ఠ%empty9>>9>>@9QA@@@@L@@@LI@L399999999@ @@@@@డ%empty!M9>>9>>@ 9>>9>>@@ Q@@@Go@M@J @@!@A@9>> @@ @@ఠ$join9>>9>>@:RA@@@@@@LI@L@@@@LI@L@@@LI@L@@LI@L@@LI@L3::::::::@HYR@S@T@@@࣠@!xA@:*>>:+>>@@$@@@L3:,:+:+:,:,:,:,:,@6:3>>:4?8?A@@@@  @:NSA0г3!t:A>>:B>>@@;@@@L@@:H>>:I>>@@@B@@@@!yA@:T>>:U>>@@D@@@L3:V:U:U:V:V:V:V:V@+80@3@%@@@  @:uTAM гP!t:h>>:i>>@@X@@@L@@:o>>:p>>@@@_@@@@డB$fold!M:>>:>>@ :>>:>>@@@@.@@@H@ @  @@H@@H@@H@l @@@H@  @@H@@G@@G@ @ ɰ@@@@B@@@L@!t@@@LK@L@K@L@@L@@L@@L@@@@L@  @@L@@L@@L3::::::::@anf@i@^@@@@࣠@"idA@:>>:>>@@ G!t@@@L3::::::::@@@@  @:UAz@@@LN@Lг%Ident:>>:>>@:>>:>>@@@!@@@L @@:>>:>>@@@@@@L%@@@@!vA@;>>;>>@@\@@@L3;;;;;;;;@NE=@@@4@@@  @;"VAe гh$Mode;>>;>>@o;>>;>>@@@w@@@L @@;#>>;$>>@@@~@@@@#tblA@;/>>;0>>@@@@@L3;1;0;0;1;1;1;1;1@/<4@7@,@@@  @;PWA" г%!t;C>>;D>>@@-@@@L@@;J>>;K>>@@@4@@@@@ఠ"v';X>>;Y>>@;qXA@@{@@@MP@L3;^;];];^;^;^;^;^@.;3@6@+@@@ఐ$find;m>?;n>?@@@@@@@L@@@@L@@@L@@L@@L@@ఐ"id;>?;>?@@@@@@MQ@MQ@M0@@ఐo#tbl;>? ;>? @:@@@@@MQ@M Q@M D@@9 @@HE@A@;>> @@డw#add!M;??;??@ ;??;??@@@a@@@Gu@@@@@Gt@@@Gs@@Gr@@Gq@@Gp@ @ @@@s@@@M@@@@MAO@M@ @@@M@@@M@@M@@M@@M3;;;;;;;;@@@@@@@ఐ+"id;??;??!@@@@@@M.P@M-@@డ.$join$Mode< ??#< ??'@ <??(<??,@@@@@@D:@@@D9@@D8@@ܰ @@@@@@M6@@@M5@@M4<@@ఐ-!v<+??-<,??.@@@\Q@M>Q@M@Q@M?O@@ఐ栐"v'<>??/><\??7@@@@@@L@@@@L@@L@@LL@MlL@Mh@@ఐM!x=}?v?x=~??@@@@@  @@#envA=?v?=?v?@=]A@@<3========@!H@@@@@@@@డa#map!M=??=??@ =??=??@@@@@@H @@@@H @@@H@@H@@H@@İ@@@@dY@@M@i@@@Mb@@@M@@M@@M3========@8Dv@;@<@@@@డ'compose$Mode=??=??@ =??=??@@@@@@D?@@@@D>@@@D=@@D<@@D;@@Ű@@@@@@M@@@@M@@@M@@M@@M6@@ఐ!m>??>??@w@@C@@>??> ??@@@@@@N @@@N@@NN@@ఐ#env>??@W@@Z@@@@[@A@I@N@A@@@@ఠ&single>.??>/??@>G^A@@@@@@NBI@N@o@N+I@N!@@@N@I@N"@@N#I@N@@NI@N3>E>D>D>E>E>E>E>E@@@ @@@࣠@"idA>V??>W??@>o_A@@$3>W>V>V>W>W>W>W>W@1>^??>_??@@@@@  @@$modeA>j??>k??@>`A@@/3>k>j>j>k>k>k>k>k@!;@@@@@@@@డB#add!M>??>??@ >??>??@@˰@@@,@@@N-@N@hS@@@N,lW@@@N*@@N)@@N(@@N'3>>>>>>>>@,8]@/@0@@@@ఐS"id>??>??@8@@s@@ఐL$mode>??>??@@@w@@ఐ%empty>??b@c@@L@NJ@@@NI/@@Ij@@0@tkA@I@NXr@A@o@on@@ఠ)unguarded>??>??@>aA@@@@@@NI@NZ@8à @@@NK@Nh@@@NwI@N_8Ϡ @@@NvI@N`@@NaI@N[@@N\I@NY3>>>>>>>>@@@@@@࣠@#envA? ??? ??@?#bA@@.3? ? ? ? ? ? ? ? @;?????@9@@@@@  @@"liA??????@?7cA@@93????????@!E@@@@@@@@డ=$List&filter?4???5??@ ?8???9?@@@@@!a@%.@@@(H@@(G@_ @@@(FW@@@(E@@(D@@(C@.^-)-).^-)-X@@.o@#@@@@l@@@Nk@@Nj@ut@@@Nimx@@@Ng@@Nf@@Ne3?e?d?d?e?e?e?e?e@GS@J@K@@@@࣠@"idA?y?@?z?@@?dA@@3?z?y?y?z?z?z?z?z@@@@@@@డ=!>??@$??@%@@!a@@>@@@0@@/@@.,%greaterthanBA'C@@@@'C'D@@'BT@@@@>@@@NM@N@@@@N@@N@@N3????????@G>@5@6@@@@డ$rank$Mode??@ ??@@ ??@??@@@@@@@D7>@@@D6@@D5@%@& @@@@@@N>@@@N@@N,@@ఐ$find??@??@@@@@@@@N@@@@N@@@N@@N@@NH@@ఐ"id@?@@?@@R@@U@@ఐ#env@ ?@@?@"@@@0b@@@?@@?@#@@0@@@Nh@@V@@qi@@డK$rank$Mode@'?@&@(?@*@ @+?@+@,?@/@@f@@@@@@N?&@@@N@@N@@ภ%Guard@@?@0@A?@5@;@@@BE@@A@@@@@b@@@N@@"@@O@N@@ @@ @@@NN@N@@R?@@S?@6@@@k@@@Ny@@NxL@NL@N@@ఐL"li@g?@7U@V@@@@6W@@s@aXA@I@N_@A@\@\[@r@ఠ)dependent@y@;@A@z@;@J@@eA@@@@@@O(I@N@@@@O)K@N@@@NI@N @@@NI@N@@NI@N@@NI@N3@@@@@@@@@@@@@@࣠@#envA@@;@K@@;@N@@fA@@,3@@@@@@@@@9@@;@=@@T@@@@@@  @@"liA@@;@O@@;@Q@@gA@@73@@@@@@@@@!C@@@@@@@@డ?=$List&filter@@T@X@@T@\@ @@T@]@@T@c@@@@@@P@@@N@@N@X@@@N\@@@N@@N@@N3@@@@@@@@@,8e@/@0@@@@࣠@"idA@@T@i@@T@k@AhA@@r3@@@@@@@@@@@@@@@డ?zA @T@A @T@@@@@@@@@OM@O@@@@N@@N@@N3AAAAAAAA@0'@@@@@@డR$rank$ModeA.@T@oA/@T@s@ A2@T@tA3@T@x@@m@@@ @@@O @-@@@O @@O #@@ఐ$findAJ@T@zAK@T@~@u@@@~@@@O@w@@@Ot@@@O@@O@@O?@@ఐj"idAd@T@Ae@T@@I@@L@@ఐˠ#envAq@T@Ar@T@@@@Y@@Au@T@yAv@T@@@@@@O'_@@M@@h`@@డ$rank$ModeA@T@A@T@@ A@T@A@T@@@ʰ@@@ e@@@O8@@@@O7@@O6@@ภ&IgnoreA@T@A@T@@@@@@@@OE@@ @@O@O>@@ @@l@@@OHN@O@A@T@dA@T@@@@-x@@@N@@NL@OLL@OJ@@ఐ"liA@T@@ܰ@@A@@@@5@$A@PI@OR"@A@@@5@ఠ&removeA@@A@@@AiA@@@@@@OY@ @OW@@@OX Ġ@@@OV@@OU@@OTI@OS3AAAAAAAA@W~w@x@y@@@డ&remove!MA@@B@@@ B@@B@@@@@@@@G@ @@@G @@@G@@G@@G@@Ȱ@@6&@A@B@@@@@)@ఠ$takeB%@@B&@@@B>jA@@@@@@OI@O[@ [@@@O|I@O`@ `@@@O{I@Oe@ ! @@OI@O@@@OI@Of@@OgI@Oa@@ObI@O\@@O]I@OZ3BQBPBPBQBQBQBQBQ@dx@y@z@@@࣠@"idABb@@Bc@@@B{kA@@93BcBbBbBcBcBcBcBc@FBj@@Bk@@@@@@@  @@#envABv@@Bw@@@BlA@@D3BwBvBvBwBwBwBwBw@!P@@@@@@@@@ఐ Š$findB@@B@@@@@@ @@@Om@ @@@Ol @@@Ok@@Oj@@Oi3BBBBBBBB@#/i@&@'@@@@ఐJ"idB@@B@@@/@@@@ఐC#envB@@B@@@@@@@.@@w@@ఐꠐ&removeB@@B@@@q@@@ l@@@O@ @@@O @@@O@@O@@O;@@ఐ"idB@@B@@@g@@H@@ఐ{#envB@@B@@@R@@U@@-@@V@@B@@@@@@@@O^@A@I@O@A@@@@ఠ+remove_listàC @@C @@@C"mA@@@< @@@OK@O@@@OI@O@  S@O@@@PI@OI@O@@OI@O@@OI@O3C&C%C%C&C&C&C&C&@ @@@@@࣠@!lAC7@@C8@@@CPnA@@*3C8C7C7C8C8C8C8C8@7C?@@C@AA<@@@@@  @@#envACK@@CL@A@CdoA@@/3CLCKCKCLCLCLCLCL@!A@@@@@@@@డA$List)fold_leftCaAACbAA @ CeAA CfAA@@(4@@@@MK@O@[@@O@@O@@=Mb@@@O @@O@@O@@O3CvCuCuCvCvCvCvCv@+7\@.@/@@@@࣠@#envACAACAA@CpA@@!3CCCCCCCC@@@@@@@"idACAA CAA"@CqA@@3CCCCCCCC@%3@@@@@@@@డq&remove!MCAA&CAA'@ CAA(CAA.@@@@@ [@@@O@ @@@O @@@O@@O@@O3CCCCCCCC@*6@-@.@@@@ఐ="idCAA/CAA1@ @@@@ఐY#envCAA2CAA5@C@@v@@5@@ @@@O"@CAACAA6@@@@@@O@@OL@PL@Pe@@ఐ#envCAA7CAA:@@@@@ఐ֠!lD AA;@@@@@@@@A@I@P@A@@@@@@ @@  A@  /@ W C@ W @ $k@@@&@R@5@S@ @)"@#@$@@3D,D+D+D,D,D,D,D,@,@@D2==D3A=A@@$3D2D1D1D2D2D2D2D2@@@@!tI;@@BEA@@@@@D=88D>88@@@@DVrAA@&single@)!t@@@P@!~!t@@@P@@@P@@P@@P @DZ88D[88@!g J Create an environment with a single identifier used with a given mode. Dh88Di99@@@@@@@DsA@%empty:@@@P!@Du99!Dv99.@! * An environment with no used identifiers. D9/91D9/9`@@@@@@@DtA@$find@*!t@@@P"@_@@@P#!!t@@@P$@@P%@@P&@D9b9dD9b9@! V Find the mode of an identifier in an environment. The default mode is Ignore. D99D99@@@@@@@DuA@)unguarded@@@@P'@D6*=!t@@@P(@@@P*DA*H!t@@@P+@@@P-@@P.@@P/@D99D9:@!␠ o unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e. D::D:h:@@@@@@@DvA@)dependent@@@@P0@Dk*r!t@@@P1@@@P3Dv*}!t@@@P4@@@P6@@P7@@P8@E ::E ::@" Y dependent e l: the list of all identifiers in l that are used in e (not ignored). E::E;;%@@@@@@@E1wA@$join@@@@P9@@@@P:@@@P;@@P<@@P=@E1;';)E2;';?@@EJxA@)join_list@D @@@P>@@@P@@@@PA@@PB@EI;@;BEJ;@;]@"V > Environments can be joined pointwise (variable per variable) EW;^;`EX;^;@@@@@@@EpyA@'compose@"!t@@@PC@3@@@PD7@@@PE@@PF@@PG@Er;;Es;;@" j Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise E;;E< <7@@@@@@@EzA@&remove@+!t@@@PH@\@@@PI`@@@PJ@@PK@@PL@E<9<;E<9@@@@ @@@@@@@G;@;FG;@;O@б@г$listG;@;TG;@;X@г!tG;@;RG;@;S@@3GGGGGGGG@5@A@@@@@г!tG;@;\@@ @@ @@@@$G𐠠@@@@@@G;;G;;@б@г$ModeG;;G;;@H;;H;;@@@3HHHHHHHH@3@A @@б@г!tH;;H;;@@ @@г!tH;;@@@@ @@@@@@%(H-@@@@@@$H.<9<9H=H=H>H>H>H>H>@>@A @@б@г!tHL<9@A @@б@гȠ!tH<<H<<@@ @@В@г͠$ModeH<<H<<@԰H<<H<<@@@!@@@гנ!tH<<@@+@@@,@@-#@@.6@@@@%H@@@@@@;꠰ڠڰH<=H<=@б@г۠$listH<=H<=@гࠡ%IdentH<=H<=@H<=H<=@@@3HHHHHHHH@^/-@A @@@ @@б@г점!tH<=!H<="@@@@г!tH<=&@@@@ @@  @@@@&I@@@@@@%I=l=rI=l=w@б@г!tI=l=zI=l={@@3IIIIIIII@81/@A@@б@г!tI=l=I=l=@@ @@г$boolI&=l=@@@@ @@@@@@@@3I(I'I'I(I(I(I(I(@@A3I*I)I)I*I*I*I*I*@@@I/88I0==@@G@C@B@H@I@D@E@F@J@K@L@A@@ @@@IM88@!@@IO88@@$@ఠ*remove_patנI\ABAFI]ABAP@IuA@@@D/general_pattern@SC@@@SQJ@R@ R=@@@S;J@R@@@S:J@R@@RJ@R@@RJ@R3IzIyIyIzIzIzIzIz@ ' Z@JHA@CA@@@@@rp@[Y@75@@@@@@@M o@@@࣠@#patAIABAQIABAT@IA@@F3IIIIIIII@.SIABABIA[A@@@@@  @@#envAIABAUIABAX@IA@@M3IIIIIIII@!]@@@@@@@@డ +remove_list#EnvIA[A]IA[A`@ IA[AaIA[Al@@@@@@S$@@@S#@q@@@S"t@@@S!@@S @@S@ܰ@@@@@@S/@@@S.@@@@S-@@@S,@@S+@@S*3IIIIIIII@?K@B@C@@@@డHX0pat_bound_identsJ A[AnJ A[A~@@!k@@@@ C[<>!t@@@ @@@ @@ ~@E~ttEtt>@@E@@@@Ġ@@@SB@@@SA@@@S@@@S?9@@ఐ#patJ?A[AJ@A[A@@@F@@JCA[AmJDA[A@@ao@@@S=@@@SG)G7@@;@@IIA@(r!t@@@S"(!t@@@S@@S@@@@KPG)G)KQG)GI@@@@KiA@@Aб@г$ModeK^G)G:K_G)G>@KbG)G?KcG)G@@@@"3KbKaKaKbKbKbKbKb@@@0;@@@A8@@@S@S@@@@#@@@ @@@@г*#EnvK{G)GDK|G)GG@1KG)GH/@0@@81@@A%2@@4@@43@3KKKKKKKK@@@A+)bind_judgKKGJGOKGJGX@@;@@IA@(!t@@@S@"{!t@@@S"!t@@@S@@S@@S@@@@KGJGJKGJGs@@@@KA@@Aб@г$ModeKGJG[KGJG_@"KGJG`KGJGa@@@*3KKKKKKKK@Z7;@@@A?@@@S@S@@@@"@@@@@@@б@г1#EnvKGJGeKGJGh@8KGJGiKGJGj@@@@@@г;#EnvKGJGnKGJGq@BKGJGr@@A@@I-B@@R.C@@[/7D@@F@@FE@3KKKKKKKK@0@@@ఠ&optionKGuGyKGuG@LA@Ш!a@б@б@А!a @S3L L L L L L L L @R@@LGuGLGuG@@гߠ)term_judgLGuGLGuG@@ @@@S@@@@@S@@б@гK&optionL.GuGL/GuG@А!a'$L5GuGL6GuG@@@-@@@S+ @@г)term_judgLCGuGLDGuG@@ @@@S8@@@@@S;@@@,@@S>LOGuG @@F@@SCLTGuGA@[ZA@@@@O@SH@@@S@@S@; @@@S*@@@S@@S@@S٠@@SZ@࣠@!fALuGGLvGG@LA@@@n@Sh@@@S@@S3L}L|L|L}L}L}L}L}@qLGuGuLGG@@@@@@@!oALGGLGG@LA@@m@@@S3LLLLLLLL@,@"@@@S@@S@(@)@@@@@@!mALGGLGG@LA@@k@@@T 3LLLLLLLL@*<@@@S@%@&@@@@@@ఐ6!oLGGLGG@@@N@@@T3LLLLLLLL@)@@@T@#@$@@@Ġ$NoneLGGLGG@;L+L8L5@@W@@@@AA@AL@@L.@@ @@k@@@T3LLLLLLLL@@@@@p@@@T@@@డ#%empty#EnvLGGLGG@ LGGLGG@@@@@R@} @@@@@T@Ġ$SomeMGGMGG@;L[6@LYA@AA@AM!@@LYఠ!vMGGMGG@M4A@@S@TW@@@@@@@@T\@@@@@T`@@@ఐ!fM3GGM4GG@@@@#@@@T"@@T!3M8M7M7M8M8M8M8M8@r&@ @!@@@@ఐ-!vMHGGMIGG@ @@,@@ఐ!mMUGG@@@@@@T4R@T6R@T5%@@.@@^&@@@AMbGG@@@@@T?@MgGG@@@@Y@@@T\@@T[@L@@@TZ;@@@TY@@TX@@TWL@TQ@A@@@k@ఠ$listMGHMGH@MA@Ш!a@б@б@А!a @Tx3MMMMMMMM@@@@S@@@S@@S@ @@@Sq@@@S@@S@@S@@@@MGHMGH@@г})term_judgMGHMGH@@ @@@Ty$@@@*@@Tz'@@б@гM=$listMGH%MGH)@А!a:7MGH"MGH$@@@@@@@T|> @@г)term_judgMGH-MGH6@@ @@@T}K@@@@@T~N@@@,@@TQMGH  @@Y@@TVMGH A@nmA@@@@b@TH@@@T@@T@; @@@T*@@@T@@T@@T@@Tm@࣠@!fANH9H?NH9H@@N,A@@@@Th@@@T@@T3NNNNNNNN@N"GGN#HIH@@@@@@@"liAN.H9HAN/H9HC@NGA@@m@@@T3N3N2N2N3N3N3N3N3@,@"@@@T@@T@(@)@@@@@@!mANHH9HDNIH9HE@NaA@@ @@@T3NLNKNKNLNLNLNLNL@*<@@@T@%@&@@@@@@డL$List)fold_leftNeHIHMNfHIHQ@ NiHIHRNjHIH[@@38@@@@,@@@UO@TO@T@cO@T @@T@@T@ @HX @@@T@@T@@T@@T3NNNNNNNN@6ED@@@T@?@@@@@@࣠@#envANHIHaNHIHd@NA@@+3NNNNNNNN@@@@@@@$itemANHIHeNHIHi@NA@@13NNNNNNNN@(=@@@@@@@@డ%$join#EnvNHIHmNHIHp@ NHIHqNHIHu@@@T@@@S @Y@@@S\@@@S@@S@@S@ @ @@@b@@@T@g@@@Tj@@@T@@T@@T3NNNNNNNN@6Bi@9@:@@@@ఐX#envNHIHvNHIHy@B@@@@ఐ점!fNHIH{NHIH|@ư@@@N@@@T@@T$@@ఐj$itemOHIH}OHIH@.@@1@@ఐ֠!mOHIHOHIH@@@@@@U T@UT@U G@@O(HIHzO)HIH@@@@@T@UT@U Q@@u @@S@TT@O5HIH\O6HIH@@@@@@T@@TP@UP@U@@డ&!%empty#EnvOMHIHONHIH@ OQHIHORHIH@@V@@P@U@@ఐ6"liOaHIH?@@@@I?@@@TP@UP@U@@I@@@OmH9H;K@@@@[@@@U8@@U7@c@@@U6@@@U5@@U4@@U3L@U-b@A@_@_^@栰@ఠ%arrayOHHOHH@OA@Ш!a@б@б@А!a @UT3OOOOOOOO@!@@@T@@@T@@T@ @@@T@@@T@@T@@T@-@.@@OHHOHH@@г)term_judgOHHOHH@@ @@@UU$@@@*@@UV'@@б@гON%arrayOHHOHH@А!a:7OHHOHH@@@@@@@UX> @@г)term_judgOHHOHH@@ @@@UYK@@@@@UZN@@@,@@U[QOHH @@Y@@U\VOHHA@nmA@@@@b@UlH@@@Ur@@Uq@; @@@Up*@@@Uo@@Un@@Um@@Ukm@࣠@!fAPHHPHH@P2A@@@@Ush@@@U@@U3P!P P P!P!P!P!P!@P(HHP)HI*@@@@@@@"arAP4HHP5HH@PMA@@m@@@U3P9P8P8P9P9P9P9P9@,@"@@@U@@U@(@)@@@@@@!mAPNHHPOHH@PgA@@@@@U3PRPQPQPRPRPRPRPR@*<@@@U@%@&@@@@@@డN%Array)fold_leftPkHHPlHH@ PoHHPpHH@@@@#acc@Vh@!a@Vj @@W@@W@ @%arrayJ@@@W@@W@@W@@W@)array.mli    @@-Stdlib__ArrayY@(#@@@@R@@@XO@XO@XR@O@XT @@XV@@XU@ @! @@@XS@@XQ@@XP@@XO3PPPPPPPP@Vej@@@U@_@`@@@@࣠@#env'APHHPHH@PA@@+3PPPPPPPP@@@@@@@$item(APHHPHI@PA@@13PPPPPPPP@(=@@@@@@@@డ'$join#EnvPHIPHI@ PHI PHI @@&@@@z@@@Xs@@@@Xr@@@Xq@@Xp@@Xo3PPPPPPPP@(4[@+@,@@@@ఐJ#envQHIQHI@4@@q@@ఐ!fQHIQHI@ذ@@@`@@@X@@X$@@ఐ\$itemQ&HIQ'HI@.@@1@@ఐ蠐!mQ3HIQ4HI@@@@@@XT@XT@XG@@Q@HIQAHI@@@@@X~@XT@XQ@@g @@S@X}T@QMHHQNHI@@@@@@Xe@@XdP@XP@X@@డ(9%empty#EnvQeHIQfHI!@ QiHI"QjHI'@@n@@P@X@@ఐH"arQyHI(Q@#R@@@@@XcP@XP@X@@[@@@QHH]@@@@m@@@X@@X@Ơu@@@X@@@X@@X@@XL@Xt@A@q@qp@@@QI,I0QI,I6@@@7!!t@@@Xv@@@X@@X3QQQQQQQQ@*@@@Uf@@@Ue@@Uj@ @@@Ui@@@Ub@@Uh@@Ug@6@7@@@&single)'&@QA@&@@@X#@@@X@@X1б@г1%IdentQI,I9QI,I>@8QI,I?QI,I@@@@@@@@X9 @@г>)term_judgQI,IDQI,IM@@F@@@XE@@@@@XH@@XWA@@@V@@@XS@@@X@@XR@డ(&single#EnvR I,IPRI,IS@ RI,ITRI,IZ@@@  @@@R@  @@@R@@@R@@R@@R@   @б@г7UTQN@ @@@XM@гML@@@@XI@@ @@XH@4/A@@@@@@Y@@@Y@@Y L@Y @A@RLI,I,;@@<@@@RWI[I_RXI[Ii@@@QӠ7!t@@@Y)@@@Y(@2@@@Y'6@@@Y&@@Y%@@Y$3RmRlRlRmRmRmRmRm@@@@@@*remove_ids* @RA@@@@Y#@@@Y"@@@@Y!@@@Y @@Y@@Y3б@г3$listRI[ItRI[Ix@г8%IdentRI[IlRI[Iq@?RI[IrRI[Is@@@G@@@Y9 @@@O@@@Y>@@б@гI)term_judgRI[I|RI[I@@Q@@@YL@@гQ)term_judgRI[IRI[I@@Y@@@YX@@@@@Y[@@@$@@Y^0 @@yxA@@@wv@@@Y/@@@Y.@s@@@Y-r@@@Y,@@Y+@@Y*q@࣠@#ids,AR IIR II@SA@@Rh8o@@@YH@@@YG3RRRRRRRR@RI[I[R II@@@@@@@!f-AS  IIS  II@S#A@@@@@YS3SSSSSSSS@/%$@@@YF@@@YE@-@.@@@@@@!m.AS& IIS' II@S?A@@@@@Y^3S*S)S)S*S*S*S*S*@,"@@@YR@&@'@@@@ @@డ*+remove_list#EnvSB IISC II@ SF IISG II@@ r@@@ d r@@@Yh@@@Yg@ @@@Yf @@@Ye@@Yd@@Yc3SXSWSWSXSXSXSXSX@/>@@@Y]@8@9@@@@ఐ#idsSk IISl II@Y@@  @@@Yv@@@YuP@YyP@Yw@@ఐ~!fS IIS II@X@@z@@@Y|0@@ఐr!mS IIS II@:@@Y@@@YQ@YQ@YF@@S II@@ 4@@@Yt@YQ@YO@@i@@d@@@YP@YsU@S II@б@гǠ)(гȠ%$`!@@@@Y0@@֠@@@Y2@б@г@@@@Y3@г@@@@Y4@@ @@Y5@@@@Y6@/A@@@@@@Y@@@Y@@@@Y@@@Y@@Y@@YL@Y@A@@@@@S"IIS"II@@@Sy@@@Y@@@Y@@@Y@@Y3T T T T T T T T @@@@@@$join/@T,A@@@@Y@@@Y@@@Y@@Y&б@г&$listT-"IIT."II@г+)term_judgT6"IIT7"II@@3@@@Y-@@@;@@@Y2 @@г7)term_judgTG"IITH"II@@?@@@Y>@@@@@YA@@TSA@@@RQ@@@Y@@@YP@@@Y@@YO@࣠@"li1ATh#IITi#II@TA@@S :@@@Y@@@Y3TrTqTqTrTrTrTrTr@heTy"IITz#IJ"@@@@@@@!m2AT#IIT#II@TA@@ F@@@Y3TTTTTTTT@-#"@@@Y@@@Y@+@,@@@@@@డ+y)join_list#EnvT#IIT#II@ T#IIT#IJ@@@t ?@@@S @@@S  C@@@S @@S @qn`@@@ L@@@Y@@@Y P@@@Y@@Y3TTTTTTTT@;J @@@Y@D@E@@@@డSF$List#mapT#IJT#IJ @ T#IJ T#IJ@@@@!a@&!b@&@@'@Nʠ@@@'NϠ@@@'@@'@@'@DD@@DW@% @@@@@@@ZO@Z @@@YO@Z%O@Z"O@Z@@Z@#@@@Z"@@@Z@@Z@@YW@@࣠@!f3AU+#IJU,#IJ@UDA@@*3U,U+U+U,U,U,U,U,@i@@@@@@ఐ!fU;#IJU<#IJ@9@@@@:3U<U;U;U<U<U<U<U<@z@@@@ఐɠ!mUK#IJUL#IJ@@@ @K@Z#O@Z@@ @@MO@Z@UX#IJUY#IJ@@@[V@@ZP@ZP@Z1@@ఐ"liUj#IJUk#IJ!@ް@@o@@@ZP@ZP@Z@@Uv#IJ@@@n@@@YO@Z$P@ZP@@@@ 9@@@Z&O@YV@U#II @б@г edг!a`@%@@@Y#]@@,@@@Y'\@г f\[@@@@Y/X@@@@Y1W@!-A@@@@@@Z@@@@Z?@@@Z>@@Z=L@Z9@@A@=@=<@@ఠ%empty4U%J$J(U%J$J-@UA@@@@@ZEL@ZB \@@@ZFL@ZC@@ZDL@ZA3UUUUUUUU@@@@@@࣠@%param6A@U%J$J4U%J$J5@@3UUUUUUUU@$U%J$J$U%J$JB@@@@@ @@డ,%empty#EnvU%J$J9U%J$J<@ U%J$J=@@@@+@U%J$J0@@7L@ZH@A@@@-@@V*KKV *KK@@@ @@@Z]@3A!t@@@Z\ @@@Z[@@ZZ@@ZY3VVVVVVVV@KaZ@[@\@@@"<<7@V:A@@@@ZX@@@@ZW@@@ZV@@ZU@@ZT*б@г*)term_judgV<*KKV=*KK'@@2@@@ZJ%@@б@г2$ModeVL*KK+VM*KK/@9VP*KK0VQ*KK1@@@A@@@ZK: @@г?)term_judgV]*KK5V^*KK>@@G@@@ZLF@@@@@ZMI@@@*@@ZNL- @@baA@@@`@@@Zb@_@@@Za\@@@Z`@@Z_@@Z^[@࣠@!f9AV+KAKGV+KAKH@VA@@ P@@@Zt3VVVVVVVV@olV*KKV+KAK@@@@@@@*inner_mode:AV+KAKIV+KAKS@VA@@3@@@Z3VVVVVVVV@* @@@Zs@$@%@@@@@@࣠@*outer_mode;AV+KAK[V+KAKe@VA@@ w@@@Z3VVVVVVVV@,"@@@Z~@&@'@@@@ @@ఐO!fV+KAKiV+KAKj@+@@K@@@Z3VVVVVVVV@' @@@Z@!@"@@@@డ4'compose$ModeV+KAKlV+KAKp@ V+KAKqV+KAKx@@@@@@@@Z@@@@Z@@@Z@@Z@@Z+@@ఐV*outer_modeW +KAKyW +KAK@5@@@@@ZQ@ZQ@Z?@@ఐ*inner_modeW+KAKW+KAK@`@@@@@ZQ@ZQ@ZS@@W(+KAKk@@ @@@Z@ZQ@Z^@@e@@ @@@ZP@Zd@W9+KAKW@@ @@@ZN@Z@WA+KAKC@б@г@@@@Zc @б@г  A@@@@Zd@г@"@@@Ze@@ @@Zf@@@@Zg@%A@@@^@@@Z@]@@@ZZ@@@Z@@Z@@ZL@Z@A@@@Z@@W1LrLvW1LrLz@@@ @@@Z@ S@@@Z W@@@Z@@Z@@Z3WWWWWWWW@vt@@q@@@">><@WA@@@@Z@@@@Z@@@Z@@Z@@Z(б@г()bind_judgW1LrL}W1LrL@@0@@@Z%@@б@г0)term_judgW1LrLW1LrL@@8@@@Z3@@г8)term_judgW1LrLW1LrL@@@@@@Z?@@@@@ZB@@@#@@ZE& @@YXA@@@W@@@Z@V@@@ZU@@@Z@@Z@@ZT@࣠@&binder>AW2LLW2LL@X A@@ m@@@[3WWWWWWWW@heW1LrLrW2LL@@@@@@@$term?AX2LLX 2LL@X!A@@ @@@[3X X X X X X X X @)@@@[@#@$@@@@@@$mode@AX 2LLX!2LL@X9A@@ @@@[3X$X#X#X$X$X$X$X$@(@@@[@"@#@@@@ @@ఐK&binderX82LLX92LL@(@@G@@@["3X;X:X:X;X;X;X;X;@' @@@[@!@"@@@@ఐ1$modeXN2LLXO2LL@@@ @@@[8P@[:P@[9@@ఐa$termXf2LLXg2LL@?@@]@@@[<.@@ఐY$modeXv2LLXw2LL@8@@ :@@@[KQ@[MQ@[LD@@X2LL@@ @3@[7@[NQ@[JN@@U@@ F@@@[OP@[6T@X2LL@б@г@@@@Z@б@г@@@@Z@г s@@@@Z@@ @@Z@@@@Z@#A@@@7@@@[t@6@@@[s5@@@[r@@[q@@[pL@[k@A@@@5A@X9MuM}X9MuM@@@W'*expression@@@[ @@@[@@[3XXXXXXXX@MK_@b@H@@@*expressionA@XA@@@@[@@@[@@[б@г)TypedtreeX9MuMX9MuM@&X9MuMX9MuM@@@.@@@[' @@г,)term_judgY 9MuMY 9MuM@@4@@@[3@@@@@[6@@FEA@@@D@@@]A@@@]@@]@@࣠@#expTAY(:MMY):MM@YAA@@WY@@@]Y3Y.Y-Y-Y.Y.Y.Y.Y.@geu@x@b-function_bodyB@G@@@|)L@\O@@@|iL@\@@\M@[v@YXzzYYzz#@@YqA*binding_opC@W*binding_op@@@[0@@@[@@[@Yk||Yl||@@YA/class_structureD@W/class_structure@@@[C@@@[@@[@Y~}A}EY}A}T@@YA+class_fieldE@W+class_field@@@[V@@@[@@[@Y}}Y}}@@YA0class_field_kindF@W0class_field_kind@@@[i@@@[@@[@YmqYm@@YA&modexpG@X+module_expr@@@[|@@@[@@[@Y/3Y/9@@YA$pathH@$Path!t@@@[@@@[@@[@YfjYfn@@YA)structureI@X()structure@@@[@@@[@@[@YY@@YA.structure_itemJ@X;.structure_item@@@[f@@@[@@[@Y,Y,@@Z A.module_bindingK@@YY?}!t@@@\ @@@\ @X_+module_expr@@@\ @@\ @@@\@@\@Ze_cZe_q@@Z/A0open_declarationL@Xr0open_declaration@@@\@@@\@@\@Z)vimZ*vi}@@ZBA9recursive_module_bindingsM@Y@Y?!t@@@\5@@@\4@X+module_expr@@@\6@@\3@@@\2@@@\1@@\0@ZR|ZS|@@ZkA*class_exprN@X*class_expr@@@\B*@@@\A@@\@@ZeZf@@Z~A5extension_constructorO@X5extension_constructor@@@\N=@@@\M@@\L@ZxZy@@ZA.value_bindingsP@X(rec_flag@@@\g@YX-value_binding@@@\f@@@\e @@@\d@@\c@@\b@ZZ@@ZA$caseQ@X$case!k@\|@@@\~@2@@@\z@1!t@@@\x@2'@@@\y@@\w@@\v@@\}@Z Z @@ZA'patternR@Y/general_pattern!k@\@@@\@1!t@@@\2F@@@\@@\@@\@Z@DZ@K@@ZA8is_destructuring_patternS@Y;MM@@S.S,@@@]k@@@]j @@[I;MM[J;MM@@S+@@@]l@@@&[O;MM@@T@@@]m@@T@@@]n@@@ఐ$path[_<MM[`<MM@@@@@@@_@@@_@@_3[g[f[f[g[g[g[g[g@X>7@8@9@@@@ఐE#pth[w<MM[x<MN@ @@@@@_P@_P@_@@# @@L@@@_@Ġ(Texp_let[=NN[=NN@Tyఠ(rec_flagV[=NN[=NN@[A@@U@@@]v3[[[[[[[[@@@@ఠ(bindingsW[=NN[=NN$@[A@@TU@@@]x@@@]w@ఠ$bodyX[=NN&[=NN*@[A@@V@@@]y!@@@2[=NN+@@U@@@]z&@@U@@@]{)@@@ఐ:">>[DNN[DNN@@@@T@@@_@S@@@_R@@@_@@_@@_3[[[[[[[[@QJ@K@LC<@=@>2+@,@-@@@@ఐv.value_bindings[DNN[DNN@z@@@z@@@_@xw@@@_@@@_t@@@_@@_@@_'@@ఐz(rec_flag\DNN\DNN@/@@@@@_R@_R@_;@@ఐ(bindings\'DNN\(DNN@B@@@@@_@@@_R@_R@_S@@A@@@@@`W@@ఐa*expression\EDNN\FDNO@@@@w@@@`t@@@`@@`n@@ఐ$body\ZDNO\[DNO@t@@@@@`&R@`(R@`'@@  @@@@@`-@@t@@@Ġ*Texp_match\sEO O\tEO O@Gఠ!eY\|EO O\}EO O@\A@@W|@@@]3\\\\\\\\@p@@@ఠ%casesZ\EO O\EO O#@\A@@G-G,G*@@@]@@@]@@@]@ఠ)eff_cases[\EO O%\EO O.@\A@@G2GBG1@@@]@@@]@@@]-@@\EO O0\EO O1@@G3@@@]5@@@F\EO O2@@V@@@]:@@V@@@]=@@@࣠@$modeA\LP"P-\LP"P1@\A@@@@@`?3\\\\\\\\@^W@X@YPI@J@K;4@5@6@@@@@@@@ఠ(pat_envs\MP5PA\MP5PI@]A@@VǠA@@@`Q@`M@@@`[Q@`D3\\\\\\\\@(7@@@`>@1@2@@@@ఠ)pat_modes]MP5PK]MP5PT@] A@@VW@@@`Q@`O@@@`\Q@`E@@/@@@/@@@`H%@డ[$List%split]+NPWPa],NPWPe@ ]/NPWPf]0NPWPk@@@W @!a@%t@!b@%v@@(@@@(@]@@@(@E@@@(@@(@@(@M=*=*M=*=Y@@L@@0+@@@(@q@U@@`Q@@@`P@|{@@@`L@dc@@@`N@@`K@@`J3]r]q]q]r]r]r]r]r@|@@@@డ[$List#map]NPWPm]NPWPq@ ]NPWPr]NPWPu@@@@@@H.@@@`R@`~@@@`R@`e@@@@`^R@`R@`R@`c@@`f@@@@`d@@@`b@@`a@@``>@@࣠@!cA]NPWP{]NPWP|@]A@@3@@@@ఐ2$case]NPWP]NPWP@6@@@6A@@@`}@/@@@`|@.@@@`z@+@@@`{@@`y@@`x@@`w3]]]]]]]]@2[@)@*@@@@ఐ9!c]NPWP]NPWP@ @@h@@ఐ<$mode^NPWP^NPWP@ @@]@@@`U@`"@@=@@n#@^NPWPv^NPWP@@@y@@`rS@`S@`@@ఐ%cases^ NPWP^!NPWP@K@@ 5@@@`qS@`S@`@@^,NPWPl^-NPWP@@@@@`]R@`S@`p=@@  @@@P@4@@`R@`ZF@A@^@MP5P=@@@ఠ%env_e^KOPP^LOPP@^dA@@@@@`Q@`3^S^R^R^S^S^S^S^S@_tm@n@oWP@Q@R@@@ఐ*expression^dOPP^eOPP@!@@@@@@`@@@`@@`@@ఐ!e^yOPP^zOPP@@@@@@`R@`R@`-@@డ\$List)fold_left^OPP^OPP@ ^OPP^OPP@@Cf@@@@%@@@`R@`@R@`@@`@@`@ @X@@@`@@`@@`@@`Y@@డ;$join$Mode^OPP^OPP@ ^OPP^OPP@@"@@@&@@@`@@@`@@`v@@ภ&Ignore^OPP^OPP@%%@@@%@@@`@@ఐޠ)pat_modes^OPP^OPP@@@XĠI@@@`S@`S@`@@^OPP^OPP@@T@@@@@A@^OPP@@@@ఠ(eff_envs_PPP_PPP@_A@@[@@@a4Q@`@@@aQ@`3________@@@@@@@ఠ)eff_modes_PPP_PPQ@_7A@@m@@@a5Q@`@@@aQ@`@@*@@@*@@@`!@డ]$List%split_AQQ Q_BQQ Q@ _EQQ Q_FQQ Q@@@@@@E@-@@`@@@`@jO@@@`@R;@@@`@@`@@`3_`_____`_`_`_`_`@P@@@@డ]$List#map_tQQ Q_uQQ Q#@ _xQQ Q$_yQQ Q'@@ @@@@J @@@aFR@a'@@@a7R@a@@p@@aR@aIR@a3R@a @@a@ @@@a  @@@a @@a @@a >@@࣠@!cA_QQ Q-_QQ Q.@_A@@3@@@@ఐ $case_QQ Q2_QQ Q6@$@@@$A@@@a&@@@@a%@@@@a#@@@@a$@@a"@@a!@@a 3________@2[@)@*@@@@ఐ9!c_QQ Q7_QQ Q8@ @@h@@ఐ*$mode_QQ Q9_QQ Q=@@@K@@@a@@@y@@aS@aCS@aB@@ఐm)eff_cases`QQ Q?`QQ QH@8@@ #@@@aS@aGS@aD@@`QQ Q`QQ QI@@@@@aR@aHS@a@@ @@@#@ @@aJR@a@A@`.PPP@@@ఠ%eff_e`9RQMQY`:RQMQ^@`RA@@@@@abQ@aK3`A`@`@`A`A`A`A`A@3G@@A@B.'@(@)@@@ఐn*expression`RRQMQa`SRQMQk@@@@@@@aO@@@aN@@aM@@ఐ렐!e`gRQMQl`hRQMQm@@@@@@a_R@aeR@ad-@@డ^$List)fold_left`RQMQo`RQMQs@ `RQMQt`RQMQ}@@ET@@@@'@@@aR@aj@R@al@@an@@am@ @Zq@@@ak@@ai@@ah@@agY@@డ=$join$Mode`RQMQ~`RQMQ@ `RQMQ`RQMQ@@$@@@(@@@a@@@a@@av@@ภ&Ignore`RQMQ`RQMQ@'@@@'@@@a@@ఐ)eff_modes`RQMQ`RQMQ@@@ZI@@@a{S@aS@a@@`RQMQn`RQMQ@@T@@@@@A@`RQMQU@@డ7)join_list#Env`SQQ`SQQ@ `SQQ`SQQ@@ L@@@@@@a@@@a@@@a@@a3aaaaaaaa@@@@@@@ภ"::aTQQaTQQ@Vడ7)join_list#Enva!TQQa"TQQ@ a%TQQa&TQQ@@ |@@@@@@a@@@a@@@a@@a0@@ภ-a=TQQa>TQQ@Vݠఐ%env_eaGTQQaHTQQ@4@@@@@aR@aR@aR@aN@ఐr(pat_envsa[TQQa\TQQ@@@`à@@@aR@aR@aa@@agTQQahTQQ@@0@@@aR@aj@@apTQQaqTQQ@@@@@aQ@a@aR@av@ภqaTQQaTQQ@W!ఐR%eff_eaTQQaTQQ@@@Q@aQ@aQ@a@ఐ(eff_envsaTQQaTQQ@W@@a@@@aQ@aQ@a@@aTQQaTQQ@@a 9@@@aQ@a@@aTQQaTQQ@@z@@@@aQ@a@@@@s@@@aQ@a@@@|@@@@@@l@@@ @aLP"P(aTQQ@@D@Ġ(Texp_foraUQRaUQR @S@aUQR aUQR @@S@@@]3aaaaaaaa@@@@@aUQRaUQR@@S@@@] @ఠ#low\aUQRaUQR@bA@@\@@@]@ఠ$high]aUQRaUQR@bA@@\@@@]%@@bUQRbUQR@@T @@@]-@ఠ$body^bUQRbUQR#@b'A@@]@@@];@@@FbUQR$@@[p@@@]@@@[s@@@]C@@@ఐ$joinb&]RRb']RR@ T@@@*)@@@a@@@a(@@@a@@a3b2b1b1b2b2b2b2b2@%SL@M@NF?@@@A1*@+@,@@@@ภ"::bE^RRbFaSbSiAWఐ ."<<bQ^RSbR^RS @ @@@ J@@@b @ I@@@b  F@@@b @@b @@b ,@@ఐ *expression(bm^RS@ )*@@@ @@@b+ @@@b*@@b)B@@ఐ#lowb^RSb^RS@J@@ @@@b;T@b=T@b<V@@G @@ @@@bBZ@@ภ+Dereferenceb^RS b^RS@;9(@@@DE@@A9@@9@@@)@@@bQk@@\@@ @@@bXo@ภfb_SS eAXIఐ "<<b_SS0b_SS2@ $@@@ @@@bu@ @@@bt @@@bs@@br@@bq@@ఐ *expression'b_SS*@ )@@@ @@@b @@@b@@b@@ఐ$highb_SS+b_SS/@@@ @@@bT@bT@b@@F @@ @@@b@@ภ+Dereferenceb_SS3b_SS>@d@@@*@@@b@@Y@@ @@@b@ภȰc `S@SHAXఐ "<<c`S@SXc`S@SZ@ @@@ @@@b@ @@@b @@@b@@b@@b@@ఐ O*expression'c3`S@SR@ )@@@ d@@@b a@@@b@@b@@ఐ9$bodycG`S@SScH`S@SW@@@ {@@@c T@c T@c @@F @@ y@@@c @@ภ%Guardc^`S@S[c_`S@S`@#@@@*~@@@c!/@@Y@@ M@@@c(3@ภ"[]coaSbSh*AX@+A@bԠq@@@b@@@bP@c7E@@o5A@bޠ{@@@bi@@@bjP@bO@@?A@b@@@b@@@bP@bhY@@c]RRJ@@@@@a@@@aP@bd@@tT@@e@Ġ-Texp_constantcbSjSpcbSjS}@V@cbSjS~cbSjS@@V@@@]@@@ @@]@@@]@@] @@@]@@@ఐ %emptyccSSccSS@ @@=@Ġ(Texp_newcdSScdSS@O8ఠ#pth_cdSScdSS@cA@@O@@@@]3cccccccc@@@@@cdSScdSS@@OBO@@@@]@@@] @@cdSScdSS@@OA@@@]@@@&cdSS@@]I@@@]@@]L@@@]@@@ఐ ܠ"<<cjTT#djTT%@ n@@@ @@@cO@ @@@cN @@@cM@@cL@@cK3d d d d d d d d @C<@=@>@@@@ఐ `$pathdjTTdjTT@ d@@@ d@@@cm _@@@cl@@ck@@ఐa#pthd3jTTd4jTT"@$@@ {@@@c}R@cR@c~.@@  @@ w@@@c2@@ภ+DereferencedJjTT&dKjTT1@@@@+j@@@cA@@3@@B@Ġ,Texp_instvard[kT2T8d\kT2TD@Oఠ)self_path`ddkT2TFdekT2TO@d}A@@O@@@]3dhdgdgdhdhdhdhdh@ X@@@ఠ#pthadskT2TQdtkT2TT@dA@@O@@@]@ఠ)_inst_varbdkT2TVdkT2T_@dA@@OO@@@]@@@]!@@@2dkT2T`@@]@@@]&@@]@@@])@@@ఐ$joindlTdTldlTdTp@˰@@@@@@c@@@c@@@c@@c3dddddddd@ PI@J@KB;@<@=5.@/@0@@@@ภwdlTdTrdlTdTAZ[ఐ"<<dlTdTdlTdT@ 6@@@@@@c@@@@c@@@c@@c@@c+@@ఐ %$path(dlTdTv@ (*@@@ (@@@c #@@@c@@cA@@ఐ)self_pathdlTdTwdlTdT@I@@ ?@@@cT@cT@cU@@G @@ ;@@@cY@@ภ+DereferenceelTdTelTdT@v@@@,.@@@dh@@Z@@@@@d l@ภڰelTdTcAZఐ k$path e)lTdT@ n @@@ n@@@d' i@@@d&@@d%@@ఐʠ#pthe=lTdTe>lTdT@@@ @@@d7R@d9R@d8@@* @@ @@@d>@ภAZ@A@dR@@@d@@@dP@dM@@>A@d\@@@c@@@cP@d@@eflTdTq@@hg@@@c@@@cP@c@@@@ @Ġ*Texp_applye{mTTe|mTT@VKঠ(exp_descemTTemTT@^Ġ*Texp_identemTTemTT@]@emTTemTT@@_L@@@]3eeeeeeee@ @@@@emTTemTT@@]]@@@]@@@] @ఠ"vdcemTTemTT@eA@@]@@@]@@@&emTT@@_@@@] @@@emTTemTT@@`@@@]P@](@Ġ[gemTTemTTA[f@@ emTT@@V@@@];@@Ġ#ArgemTTemTT@`ఠ#argdemTTemTT@eA@@`@@@]S@@@@@V@@@]W@@* @@@$@ @@]^@Ġ[5A[@@6A@e^@V@@@^@V@@@^@@^@@@]u@@@fmTTH@@V֠@V@@@^@V@@@^@@^@@@^@@@f mTT@@_z@@@^@@_}@@@^@@ఐc&is_reff1nTTf2nTT@b%@@@d@@@d[d@@@dZ@@dY3f9f8f8f9f9f9f9f9@ +@@`Y@Z@[@@@@ఐ"vdfKnTTfLnTT@@@d$@@@dbP@ddP@dc@@% @@Vv@@@deP@da@ఐA"<<fdtUSUhfetUSUj@Ӱ@@@]@@@dk@\@@@djY@@@di@@dh@@dg8@@ఐ *expressionftUSUYftUSUc@ =@@@ @@@d @@@d@@dO@@ఐ#argftUSUdftUSUg@W@@ @@@dR@dR@dc@@  @@ @@@dg@@ภ%GuardftUSUkftUSUp@&l@@@-@@@dv@@3@@ 1w@Ġ*Texp_applyfuUqUwfuUqU@Wఠ!eefuUqUfuUqU@fA@@a@@@^3ffffffff@ @@@ఠ$argsffuUqUfuUqU@fA@@W@W@@@^@W@@@^@@^@@@^@@@-fuUqU@@`D@@@^!@@`G@@@^$@@@Aఠ*split_argsfX*X:fX*XD@gA@@/has_omitted_argW#@@@eP@d@\@@@dΠ@b-N@dP@dҠbp@@@dP@d@@@dP@d@@dP@d@@@dP@d@fP@e+@@@e/P@d@\֠P@e@@@e"P@d@@d@@d@@d3g;g:g:g;g;g;g;g;@ -x@y@zqj@k@l@@@࣠FFAJgMX*XFgNX*XU@gfA@@N3gNgMgMgNgNgNgNgN@\WU@R@5@-@@dQ@d@@dQ@d@@dQ@d@f@g@@@@geX*XE@@Ġ"[]goXaXmgpXaXo@\@@@@h3gogngngogogogogo@"-r@%@&@@@@@@ภg~XaXsgXaXu@]@@@]d@@@d@@ภgXaXwgXaXy@]@@@],tP@d@@@d"@@@@@l@d@@d)@Ġ"::gXzXgXzX@]C@@gXzXgXzX@@3gggggggg@<@@@@Ġ'OmittedgXzXgXzX@c*ĠcgXzXgXzX@c@@@@@@@ @@@@gXzXgXzX@@@@@@d@ఠ$restgXzXgXzX@gA@@g8P@d@@@d.@@@ @@/@@@ఐ렐*split_argsgXzXgXzX@@@@@Ġ@@@d@@d@@d3gggggggg@&@ @!@@@ภd]gXzXgXzX@d\@@@P@eT@e@@ఐ;$resthXzXhXzX@@@P@e @@.@@!@ĠyhXXhXX@]@@h$XXh%XX@@P@d3h%h$h$h%h%h%h%h%@@@@@Ġ#Argh1XXh2XX@c<ఠ#argh:XXh;XX@hSA@@ P@d@@@@@'P@d@@hCXXhDXX@@@#@ @@d#@ఠ$resthRXXhSXX@hkA@@gJP@d@@@d4@@@ @@S5@@@@@ఠ'appliedhkXXhlXY@hA@@BT@e3hmhlhlhmhmhmhmhm@=6@7@8&@ @!@@@@ఠ'delayedh}XYh~XY @hA@@LP@e#T@e@@@@@@ @@e @ఐ*split_argshXYhXY@C@@@@r@j@@e@@e @@e 1@ఐ`/has_omitted_arghXYhXY)@9@@>@@ఐf$resthXY*hXY.@F@@P@eM@@*@@@U@E@@eU@eV@A@hXX@@ఐ/has_omitted_arghY2YAhY2YP@_@@3hhhhhhhh@fpi@j@k_X@Y@Z@@@@ఐy'appliedhYQYbhYQYi@@@x@@ภްhYQYohYQYq@^ఐ#arghYQYkhYQYn@@@'@ఐ'delayediYQYriYQYy@-@@2@@@@3@@$@@@@@@e%:@@ภiYzYiYzY@^ఐ蠐#argi"YzYi#YzY@@@Q@ఐ 'appliedi-YzYi.YzY@X@@\@@@@P@e._@@ఐ'delayedi<YzYi=YzY@f@@k@@@@:S@e1n@iCY2Y>@@<p@~@@@@AeiGX*XX @@@ A@LJ@E@&@@@e@@e@@eP@e~@@@iVX*X2@@@@ఠ'appliedieYYifYY@i~ A@@h̠dl@@@eP@e@@@eP@e3isiririsisisisis@%@@@@ఠ'delayediYYiYY@i A@@_"@@@eP@e@@% @@@%@ @@e@ఐ*split_argsiYYiYY@H@@Y@@@e@_@@Zk@@@eP@e@e Fe@@@e@@@e@@e@@@e@iS@@@e@_aY@@@e@@e@@e@@eR@ɐภfiYYiYY@f@@@Y@@@eQ@eb@@ఐ $argsiYYiYY@@@_@F@eaeB@@@e@@@e@@e@@@eQ@eQ@e@@c@@@@@@eQ@e@A@jYY#@@@ఠ-function_modejYZjYZ@j) A@@13@@@eP@e3jjjjjjjj@@@@@@@@ఐ 'appliedj'ZZ#j(ZZ*@ @@ie)@@@e@@@e@Ġ̰j:Z0Z<j;Z0Z>@_@@@@ie<@@@e@@@e+@@ieC@@@e@@@e2@@@ภ%GuardjQZ0ZBjRZ0ZG@*@@@@;@Ġj]ZHZVj^ZHZX@_@jbZHZTjcZHZU@@e`@@@eN@@jjZHZYjkZHZZ@@i͠ek@@@e@@@eZ@@@ @@iՠes@@@e@@@eb@@iܠez@@@e@@@ei@@@ภ+DereferencejZHZ^jZHZi@@@@wr@@@AjZZ@@yt@A@jYY@@ఐ$joinjZuZ}jZuZ@ư@@@@@@fC@@@fB@@@fA@@f@3jjjjjjjj@@@@@@@ภnjZuZjZ[A`Rఐ"<<jZuZjZuZ@-@@@@@@fi@@@@fh@@@fg@@ff@@fe'@@ఐ*expression(jZuZ@*@@@ @@@f@@@f@@f=@@ఐ(!ejZuZjZuZ@@@"@@@fT@fT@fQ@@G @@ @@@fU@@ఐ-function_modekZuZkZuZ@_@@2&@@@fe@@[@@@@@fi@ภҰkZZdA`ఐ"<<k!ZZk"ZZ@@@@@@@f@@@@f@@@f@@f@@f@@ఐ$list'k=ZZ@)@@@@r@@@gS@f@@@f@@f@ @@@fw@@@f@@f@@f@@ఐz*expressionk^ZZk_ZZ@@@@@@@g@@@g@@g@@ఐ'appliedksZZktZZ@Y@@:@@@gT@gT@g@@i @@@@@g @@ภ+DereferencekZZkZZ@@@@2@@@g/@@|@@z@@@g6@ภ WkZZAa:ఐ"<<kZZkZ[@@@@@@@gS@@@@gR@@@gQ@@gP@@gO@@ఐ<$list'kZZ@ )@@@@@@@gS@gs@@@gu@@gt@  @@@gr@@@gq@@gp@@go2@@ఐ*expressionkZZkZZ@@@@@@@g@@@g@@gG@@ఐy'delayedkZZkZZ@ݰ@@::@@@gT@gT@g\@@i @@*@@@g`@@ภ%GuardlZ[lZ[@+@@@30@@@go@@|@@@@@gs@ภmAa@nA@k!@@@gG@@@gHP@g@@xA@k+@@@f@@@fP@gF@@A@k5@@@f]@@@f^P@f@@l?ZuZ@@A@@@@fU@@@fTP@f\@@@@@@@gP@fS@@@7@L@@@@@@Ġ*Texp_tuplel\[[l][[@_ఠ%exprsgle[[lf[[@l~A@@_@__@@@^#@@@^"@gu@@@^$@@^!@@@^ 3lzlylylzlzlzlzlz@j@@@@@#@@e@@@^%@@e@@@^&@@@ఐk"<<l["[Ml["[O@@@@@@@g@@@@g@@@g@@g@@g3llllllll@?8@9@:@@@@ఐ'$listl["[(l["[,@ @@@@@@@h&Q@g@@@g@@g@ @@@g@@@g@@g@@g'@@ఐ렐*expressionl["[-l["[7@@@@@@@h#@@@h"@@h!<@@డkT$List#mapl["[9l["[=@ l["[>l["[A@@@@@@@`!` @@@hE@@@hDR@h?@UR@hFR@h=@@hAR@h-R@h+@@h.@@@@h, @@@h*@@h)@@h(x@@డk#sndm ["[Bm!["[E@@@!a@y@!b@w@@~@@}'%field1AATޠ@@@T n n T n n5@@T@@@@J5@@h:S@h@@@ఐ堐%exprsmJ["[FmK["[K@@@_^@@@h9S@hGS@hB@@mV["[8mW["[L@@@@@hR@hHS@h8@@ @@@@@hM@@ภ%Guardmm["[Pmn["[U@--@@@4@@@h\@@@@@Ġ/Texp_atomic_locm~[V[\m[V[k@`bఠ$exprhm[V[mm[V[q@mA@@h@@@^.3mmmmmmmm@{@@@@m[V[sm[V[t@@`o`m@@@^0@@@^/ @@m[V[vm[V[w@@`n@@@^1@@@&m[V[x@@f@@@^2@@g@@@^3@@@ఐ"<<m[|[m[|[@#@@@@@@he@@@@hd@@@hc@@hb@@ha3mmmmmmmm@C<@=@>@@@@ఐ*expressionm[|[m[|[@@@@@@@h@@@h@@h@@ఐa$exprm[|[m[|[@$@@@@@hR@hR@h.@@  @@@@@h2@@ภ%Guardm[|[n[|[@-@@@5@@@hA@@3@@B@Ġ*Texp_arrayn[[n[[@] @n[[n[[@@] @@@^:3nnnnnnnn@@@@ఠ%exprsin"[[n#[[@n;A@@]i%@@@^<@@@^;@@@n.[[@@g@@@^=@@g@@@^>@@@@ఠ*array_moden?[[n@[[@nX A@@5b@@@lP@h3nEnDnDnEnEnEnEnE@6,%@&@'@@@డ\;*array_kind'TypeoptnZ[[n[[[@ n^[[n_[[@@@\9*expression@@@)&Lambda*array_kind@@@)@@)@\[\[6@@\N@@@@@@@h@@@h@@h7@@ఐd#expn[[n[[@@@,@@@lR@lR@lK@@: @@*@@@lO@Ġ&Lambdan[[n[\@+Pfloatarrayn[\n[\@@;+Pfloatarray&Lambda*array_kind@@@k @@@CD@@A1lambda/lambda.mli@@@ @@@@@R@@@lw@@U@@@lz@@@ภ+Dereferencen\N\Zn\N\e@ 0@@@@Ġ&Lambdan\f\pn\f\v@)Pgenarrayn\f\wn\f\@@;)Pgenarray4@@@@D@@A,-@@@4@@@ @@}@@@l@@@@@l@@@ภ+Dereferencen]]*n]]5@ [@@@@Ġ&Lambdao]6]@o]6]F@*Paddrarrayo ]6]Go ]6]Q@@;*Paddrarraya@@@AD@@AYZ@@@a@@@ @@@@@l@@@Ġ&Lambdao!]6]To"]6]Z@)Pintarrayo&]6][o']6]d@@;)Pintarray~@@@BD@@Avw@@@~@@@ @@@@@l@@@@1@@@@@l@@@ภ%Guardo>]]o?]]@.@@@@@@AoB[[@@@A@oD[[@@ఐ+"<<oN]]oO]]@@@@G@@@l@F@@@lC@@@l@@l@@l3o[oZoZo[o[o[o[o[@%@@ @@@@ఐ!砐$listom]]on]]@̰@@@@@@@m9Q@m!@@@m@@m@! @@@m !@@@m @@m @@m '@@ఐ*expressiono]]o]]@L@@@@@@m6@@@m5@@m4<@@ఐ%exprso]]o]]@\@@!:@@@m%R@m@Ġ-Cstr_constantqV__qW__)@;-Cstr_constantg@g@@@"@A@AC@Agh"gh6@@@gT@@qg__*qh__+@@@@@mb@@@@@g@@@mf@@f@Ġ*Cstr_blockqx__.qy__8@;*Cstr_blockg7@g@@@"@AAAC@Agijlgij@@@h U@@q__9q__:@@@@@m@@@@@h@@@m@@@@= @@h@@@m@Ġ.Cstr_extensionq__=q__K@S@q__Lq__M@@U@@@m@@@Q@@@m@@@ @@h/@@@m@@@@\@@h3@@@m@@@ภ%Guardq_Q_[q_Q_`@1{@@@@@@Aq^^@@@A@q^^@@ఐ$joinq_j_pq_j_t@@@@Ϡ@@@m@@@m@@@m@@m3qqqqqqqq@@@@@@@ภq_w_q__Agఐڠ2access_constructor q_w_@ @@@@@n@ภq__Agఐ⠐"<<r__r__@t@@@@@@n/@@@@n.@@@n-@@n,@@n+;@@ఐ$$list'r!__@")@@@@V@@@nzS@nO$y@@@nQ@@nP@$l @@@nN$[@@@nM@@nL@@nK^@@ఐ^*expressionrB__rC__@@@@t@@@nwq@@@nv@@nus@@ఐ_%exprsrW__rX__@7@@$:@@@nfT@n}T@n{@@i @@$@@@n@@ఐo"m'rp__rq__@@@9@@@n@@}@@_@@@n@ภr__Ah@A@q@@@n#@@@n$P@n@@A@q@@@n@@@nP@n"@@r_j_u@@@@@m@@@mP@n@@@@!@@@nP@m@@@@@@&@Ġ,Texp_variantr__r__@f@r__r__@@f@@@^T3rrrrrrrr@@@@ఠ"eolr__r__@rA@@f"m@@@^V@@@^U@@@r__@@l*@@@^W@@l-@@@^X@@@ఐ"<<r`Z`ur`Z`w@O@@@@@@n@@@@n@@@n@@n@@n3rrrrrrrr@2+@,@-@@@@ఐ'&optionr`Z``s`Z`f@%d@@@@5@@@nQ@n&@@@n@@n@& @@@n&@@@n@@n@@n'@@ఐ=*expressions!`Z`gs"`Z`q@ް@@@S@@@nP@@@n@@n<@@ఐr"eos6`Z`rs7`Z`t@F@@':@@@nR@oR@nQ@@C @@'@@@oU@@ภ%GuardsN`Z`xsO`Z`}@3@@@:n@@@od@@V@@e@Ġ+Texp_records_`~`s``~`@hEঠ&fieldssj`~`sk`~`@3h?hN@@@^_hA@@@3h$h#@@AhAh@h3hh@@BhAh @h hAh,@h)ఠ"esmsy`~`sz`~`@sA@@hN@hK@@@^m@hH@@@^n@@^l@@@^k3ssssssss@z@@@.representations``s``@3hIhx@@@^chK@@A3hnhm@@@h1AhU@hR3hAh@@@Bh2Ah6@h3h2AhH@hEఠ#repns``s``@sA@@hX@@@^r@3extended_expressions`~`s`~`@3hWh@@@^ahY@@B3hh@@@hMAhq@hn3hkhj@@AhNAhd@hahNAhR@hOఠ"eoos`~`s`~`@sA@@hfn@@@^x@@@^w=@@@s`~`s``@@h@@@^zP@^yE@@@t@@m,@@@^{I@@m/@@@^|L@@@@ఠ*field_modes``s``@sA@@;@@@o;P@o3ssssssss@{t@u@vRK@L@M70@1@2@@@ఐY#reps`as`a @ @@h@@@o@Ġ,Record_floatt aat aa'@;,Record_floath @@@ABC@AqlDSSqmDSS@@@q@@@  @@h@@@o-@@h@@@o 0@@@ภ+Dereferencet"aa+t#aa6@@@@>9@Ġ.Record_unboxedt/a7aCt0a7aQ@h-@t4a7aRt5a7aS@@h*@@@o%M@@@ @@h@@@o&Q@@h@@@o'T@@@ภ&ReturntFa7aWtGa7a]@@@@b]@Ġ.Record_regulartWa^ajtXa^ax@;.Record_regularhU@@@@BC@AqCS;S?qCS;SM@@@q@@@  @@i@@@o+x@@x@Ġ.Record_inlinedtla^a{tma^a@;.Record_inlinedhj@#intA@@@@AABC@AqFTTqFTT4@@@q@@ta^ata^a@@@@@o/@@@@@i6@@@o0@@@@2 @@i:@@@o1@Ġ0Record_extensiontaataa@;0Record_extensionh@$Path!t@@@@ABBC@AqGTXTZqGTXTv@@@r@@taataa@@@@@o5@@@@@i`@@@o6@@@@\ @@id@@@o8@@@ภ%Guardtaataa@4|@@@@@@At`a@@@A@t``@@@ఠ%fieldtaataa@tA@@@@@@oP@i@@@oYP@oQ@@oRP@oM @@@o|P@oN@@oOP@oL3tttttttt@ @@@@@࣠@A@ఠ&_labeltaataa@uA@@%3tttttttt@8uaaubbE@@@@@ఠ)field_defuaauaa@u'A@@3@@uaauaa@@@>@<@@oT@@ @@ఐ)field_defu&aau'aa@J@@@@K3u'u&u&u'u'u'u'u'@,5S@/@0$@@@Ġ$Keptu8abu9ab @;$Kepti@n[)type_expr@@@ Ҡo3,mutable_flag@@@ @B@@B@Apl44pl44@@@p@@uQab uRab@@@@@o\3uSuRuRuSuSuSuSuS@,@@@@ @@@@o]@@@% @@~@@~@@@ఐ%emptyudabueab@H@@@Ġ*Overriddenuqbb$urbb.@iڠ@uvbb0uwbb1@@i٠i@@@oc@@@obU@ఠ!eubb3ubb4@uA@@p@@@odc@@@ubb5@@e@@e@@@ఐ*expressionubb9ubbC@U@@@@@@om@@@ol@@ok3uuuuuuuu@z#@@@@@@ఐ*!eubbD@ @@@@@o}T@oT@o~@@"@@@@@Auaa@@f@A@P@p*@A@@ఐ!$joinubQbYubQb]@@@@!̠!@@@p/@@@p.!@@@p-@@p,3uuuuuuuu@ @ @ @@@@ภub`bjubbAkఐˠ"<<ub`byub`b{@]@@@@@@pU@@@@pT@@@pS@@pR@@pQ'@@ఐ&~%array(v b`bo@$Y*@@@@@j@@@pS@p@j@@@p@@pS@pu&g@@@pw@@pv@&Z@@@pt&I@@@ps@@pr@@pqU@@ఐi%fieldv6b`bpv7b`bu@_@@@@)@k@@@p@@pk@@@p@@pp@@ఐؠ"esvQb`bvvRb`bx@c@@&K@@@pT@pT@p@@{ @@&}@@@p@@ఐ*field_modevjb`b|vkb`b@@@=@@@p@@@@ Y@@@p@ภ6vzbbAlఐ b"<<vbbvbb@@@@ ~@@@p@ }@@@p z@@@p@@p@@p@@ఐ*&option'vbb@))@@@@@@@q(S@p*@@@p@@p@* @@@p*y@@@p@@p@@p@@ఐޠ*expressionvbbvbb@@@@@@@q%@@@q$@@q#@@ఐ"eovbbvbb@@@*:@@@qT@q+T@q) @@i @@*@@@q0@@ภ+Dereferencevbbvbb@W@@@>@@@q?@@|@@ @@@qF"@ภvbbAl@A@vd#@@@p@@@pP@qU3@@(A@vn# @@@pI@@@pJP@p=@@wbQb^3@@##@@@pA@@@p@P@pHH@@X=@@@@@q_P@p?N@"C@@=@eD@@;@Ġ/Texp_ifthenelsew1bbw2bb@anఠ$condpw:bbw;bb@wSA@@r:@@@^3w>w=w=w>w>w>w>w>@.@@@ఠ$ifsoqwIbbwJbb@wbA@@rI@@@^@ఠ%ifnotrwWbbwXbb@wpA@@arZ@@@^@@@^!@@@2wcbb@@p@@@^&@@p@@@^)@@@ఐ#^$joinwsccwtcc@!@@@#w#v@@@qd@@@qc#u@@@qb@@qa3ww~w~wwwww@rPI@J@KB;@<@=5.@/@0@@@@ภMwddwdbdiAm1ఐ!z"<<wddwdd@ @@@!@@@q@!@@@q!@@@q@@q@@q+@@ఐՠ*expression(wdd@u*@@@@@@q@@@q@@qA@@ఐ$condwddwdd@I@@@@@qT@qT@qU@@G @@@@@qY@@ภ+Dereferencewddwdd&@L@@@?@@@qh@@Z@@!@@@ql@ภwd(d0cAmఐ*expression wd(d:@ @@@0@@@q-@@@q@@q@@ఐʠ$ifsoxd(d;xd(d?@@@G@@@rR@rR@r@@* @@E@@@r@ภx'dAdIAmƠఐ,7&option x2dAdO@* @@@@g@@@rOQ@r$,(@@@r&@@r%@, @@@r#, @@@r"@@r!@@r @@ఐo*expressionxSdAdPxTdAdZ@@@@@@@rL@@@rK@@rJ@@ఐ%ifnotxhdAd[xidAd`@@@,H:@@@r;R@rRR@rP@@M @@,8@@@rW@ภx}dbdhAn@A@w$@@@r@@@rP@rf@@bA@w$@@@q@@@qP@r@@A@w$@@@q~@@@qP@q@@xcc @@$$@@@qv@@@quP@q}%@@5@@&&@Ġ-Texp_setfieldxdjdpxdjd}@jఠ"e1sxdjdxdjd@xA@@s@@@^3xxxxxxxx@@@@@xdjdxdjd@@jj@@@^@@@^ @@xdjdxdjd@@j@@@^@ఠ"e2txdjdxdjd@xA@@s@@@^#@@@4xdjd@@r@@@@^(@@rC@@@^+@@@ఐ$᠐$joinxeexee@#$@@@$$@@@ru@@@rt$@@@rs@@rr3yyyyyyyy@QJ@K@L/(@)@*@@@@ภΰyeeyf)f0Anఐ""<<yeeyee@!@@@#@@@r@#@@@r#@@@r@@r@@r)@@ఐ V*expression(y:ee@*@@@ k@@@r h@@@r@@r?@@ఐ"e1yNeeyOee@H@@ @@@rT@rT@rS@@G @@ @@@rW@@ภ+Dereferenceyeeeyfef@@@@@@@@rf@@Z@@#T@@@rj@ภ1yuff cAoఐ#]"<<yffyff@!@@@#y@@@s@#x@@@s#u@@@s@@s@@r@@ఐ *expression'yff@ X)@@@ @@@s! @@@s @@s@@ఐҠ"e2yffyff@@@ @@@s1T@s3T@s2@@F @@ @@@s8@@ภ+Dereferenceyffyff'@/@@@@@@@sG@@Y@@#@@@sN@ภiyf)f/Ao\@A@y<%@@@r@@@rP@s]@@nA@yF%@@@r@@@rP@r@@yee@@%%@@@r@@@rP@r@@@@v@Ġ-Texp_sequencezf1f7zf1fD@qoఠ"e1uz f1fFz f1fH@z$A@@u @@@^3zzzzzzzz@@@@ఠ"e2vzf1fJzf1fL@z3A@@u@@@^@@@ z"f1fM@@s|@@@^@@s@@@^@@@ఐ&$joinz2ggz3gg@$`@@@&6&5@@@sl@@@sk&4@@@sj@@si3z>z=z=z>z>z>z>z>@0=6@7@8/(@)@*@@@@ภ zNg"g*zOgYg`Aoఐ$7"<<zZg"g8z[g"g:@"ɰ@@@$S@@@s@$R@@@s$O@@@s@@s@@s)@@ఐ!*expression(zvg"g4@!2*@@@!@@@s!@@@s@@s?@@ఐ"e1zg"g5zg"g7@H@@!@@@sT@sT@sS@@G @@!@@@sW@@ภ%Guardzg"g;zg"g@@:a@@@A@@@sf@@Z@@$@@@sj@ภmzgBgJcApPఐ!ؠ*expression zgBgT@!x @@@!@@@s!@@@s@@s@@ఐ"e2zgBgUzgBgW@@@"@@@tR@t R@t @@* @@"@@@t@ภvzgYg_Api@A@zI&@@@s@@@sP@t@@?A@zS&@@@s@@@sP@s@@zgg @@&&@@@s~@@@s}P@s@@@@@Ġ*Texp_while{gagg{gagq@lఠ$condw{gags{gagw@{1A@@v@@@^3{{{{{{{{@ @@@ఠ$bodyx{'gagy{(gag}@{@A@@v'@@@^@@@ {/gag~@@t@@@^@@t@@@^@@@ఐ'*$join{?h,h2{@h,h6@%m@@@'C'B@@@t-@@@t,'A@@@t+@@t*3{K{J{J{K{K{K{K{K@ ==6@7@8/(@)@*@@@@ภ{[h9hA{\hhApఐ%D"<<{gh9hQ{hh9hS@#ְ@@@%`@@@tS@%_@@@tR%\@@@tQ@@tP@@tO)@@ఐ"*expression({h9hK@"?*@@@"@@@tq"@@@tp@@to?@@ఐ$cond{h9hL{h9hP@H@@"@@@tT@tT@tS@@G @@"@@@tW@@ภ+Dereference{h9hT{h9h_@@@@B@@@tf@@Z@@%@@@tj@ภz{hahicAq]ఐ%"<<{hahy{hah{@$8@@@%@@@t@%@@@t%@@@t@@t@@t@@ఐ#*expression'{hahs@")@@@#@@@t#@@@t@@t@@ఐҠ$body{haht{hahx@@@#-@@@tT@tT@t@@F @@#+@@@t@@ภ%Guard|hah||hah@;@@@C0@@@t@@Y@@%@@@u@ภ| hhAq@A@{("@@@t@@@tP@u@@nA@{(,@@@tG@@@tHP@t@@|6h,h7@@(8(7@@@t?@@@t>P@tF@@@@ @Ġ)Texp_send|Khh|Lhh@fHఠ"e1y|Thh|Uhh@|mA@@wT@@@^3|X|W|W|X|X|X|X|X@!H@@@@|_hh|`hh@@fU@@@^ @@@|ehh@@u@@@^@@u@@@^@@@ఐ(`$join|ui#i)|vi#i-@&@@@(y(x@@@u$@@@u#(w@@@u"@@u!3||||||||@!r6/@0@1@@@@ภK| i0i8| iUi\Ar/ఐ&x"<<| i0iF| i0iH@% @@@&@@@uJ@&@@@uI&@@@uH@@uG@@uF'@@ఐ#Ӡ*expression(| i0iB@#s*@@@#@@@uh#@@@ug@@uf=@@ఐw"e1| i0iC| i0iE@G@@#@@@uxT@uzT@uyQ@@G @@#@@@uU@@ภ+Dereference| i0iI| i0iT@J@@@D@@@ud@@Z@@&@@@uh@ภ| iUi[cArw@dA@|W(@@@u>@@@u?P@uy@@|i#i.o@@)(@@@u6@@@u5P@u=@@y@@!@Ġ*Texp_field} i]ic} i]im@fఠ!ez} i]io} i]ip@}5A@@x@@@^3} }}} } } } } @"@@@@}' i]ir}( i]is@@ff@@@^@@@^ @@}3 i]iu}4 i]iv@@f@@@^@@@&}9 i]iw@@v@@@^@@v@@@^@@@ఐ'&"<<}Iii}Jii@%@@@'B@@@u@'A@@@u'>@@@u@@u@@u3}V}U}U}V}V}V}V}V@"GC<@=@>@@@@ఐ$*expression}hii}iii@$%@@@$@@@u$@@@u@@u@@ఐa!e}}ii}~ii@$@@$@@@uR@uR@u.@@  @@$@@@u2@@ภ+Dereference}ii}ij@@@@D@@@uA@@3@@"B@Ġ/Texp_setinstvar}jj}jj@nఠ#pth{}jj}jj@}A@@n@@@^3}}}}}}}}@"@@@@}jj}jj@@n@@@^ @@}jj}jj @@nn@@@^@@@^@ఠ!e|}jj!}jj"@}A@@x@@@^#@@@4}jj#@@w3@@@^(@@w6@@@^+@@@ఐ)Ԡ$join}jj}jj@(@@@))@@@v@@@u)@@@u@@u3}}}}}}}}@"QJ@K@L/(@)@*@@@@ภ~jj~jjAsఐ'"<<~jj~jj@&@@@( @@@v&@( @@@v%(@@@v$@@v#@@v")@@ఐ$o$path(~-jj@$r*@@@$r@@@vD$m@@@vC@@vB?@@ఐ#pth~Ajj~Bjj@H@@$@@@vTT@vVT@vUS@@G @@$@@@v[W@@ภ+Dereference~Xjj~Yjj@@@@Ex@@@vjf@@Z@@(G@@@vqj@ภ$~hjjcAtఐ(P"<<~sjj~tjj@&@@@(l@@@v@(k@@@v(h@@@v@@v@@v@@ఐ%*expression'~jj@%K)@@@%@@@v%@@@v@@v@@ఐҠ!e~jj~jj@@@%@@@vT@vT@v@@F @@%@@@v@@ภ+Dereference~jj~jj@"@@@E@@@v@@Y@@(@@@v@ภ\~jjAtO@A@~/*@@@v@@@vP@v@@nA@~9*@@@v@@@vP@v@@~jj@@**@@@v@@@vP@v@@@@#i@Ġ+Texp_assert~jj~jj@h{ఠ!e}~jj~jj@A@@y@@@^3@#@@@@ jj jk@@h@@@^ @@@jk@@xi@@@^@@xl@@@^@@@ఐ("<<$kk $kk@'@@@)@@@v@)@@@v)@@@v@@v@@v3,++,,,,,@$70@1@2@@@@ఐ&Z*expression>$kk?$kk@%@@@&p@@@w&m@@@w@@w@@ఐU!eS$kkT$kk@$@@&@@@w&R@w(R@w'.@@  @@&@@@w-2@@ภ+Dereferencej$kkk$kk@@@@F@@@w<A@@3@@#B@Ġ)Texp_pack{%kk|%kk@n1ఠ$mexp~%kk%kk@A@@y@@@^3@$x@@@@@@@x@@@^@@x@@@^@@@ఐ%&modexp+lHlN+lHlT@%@@@%@@@wC%@@@wB@@wA3@$)"@#@$@@@@ఐ0$mexp+lHlU+lHlY@ @@&@@@wSP@wUP@wT@@# @@$=@Ġ+Texp_object,lZl`,lZlk@jఠ(clsstrct,lZlm,lZlu@A@@j@@@^3@$@@@@,lZlw,lZlx@@jj@@@^@@@^ @@@,lZly@@yA@@@^@@yD@@@^@@@ఐ&/class_structure-l}l-l}l@&@@@&@@@wZ&@@@wY@@wX3@$6/@0@1@@@@ఐ=(clsstrct-l}l-l}l@ @@&@@@wjP@wlP@wk@@# @@$@Ġ(Texp_try$.ll%.ll@iyఠ!e-.ll..ll@FA@@{-@@@^310011111@%!@@@ఠ%cases<.ll=.ll@UA@@ijݠj@@@^@@@^@@@^@ఠ)eff_casesR.llS.ll@kA@@ijj@@@^@@@^@@@^-@@@>b.ll@@y@@@^2@@y@@@^5@@@@ఠ(case_envs8mnt8mn@A@@@%ޠF@w@@@wP@wo@%@@@wP@wt%@@@wP@wu@@wvP@wp@@wqP@wn3@%kd@e@f]V@W@XHA@B@C@@@࣠@!cA8mn8mn@A@@+3@88mn8mn$@@@@@  @@!mA8mn8mn@A@@43@!B@@@@@@@@డ5#fst8mn8mn@@@!a@{@!b@}@@| @@{'%field0AAh@@@hmmhmm@@h~@@@@@_R@w{@&4@@@wR@w}@@w| @@wz3@:Fp@=@>@@@@ఐ&d$case8mn8mn@&h@@@&h@@@w@&a@@@w@&`@@@w@&]@@@w@@w@@w@@w)@@ఐ!c&8mn '8mn!@l@@6@@ఐ!m38mn"48mn#@@@@C@@78mn@@@V@T@@wS@wT@wO@@{@@YP@A@P@w@A@@ఐ-:$joinO9n(n.P9n(n2@+}@@@-S-R@@@w@@@w-Q@@@w@@w3[ZZ[[[[[@@@@@@@ภ%i:n5n=j=nnAw ఐ(*expression u:n5nG@(1@@@(@@@w(@@@w@@w!@@ఐ\!e:n5nH:n5nI@@@(@@@wR@wR@w5@@+ @@(@@@w9@ภY;nKnS4Aw<ఐ4"$list ;nKnW@2 @@@@'l;@@@x8Q@x%@@@x/Q@x4@@@x@@x@3@@@x3@@@w@@w@@wg@@ఐ\(case_env;nKnX;nKn`@q@@@'5$@@@x*@'.@@@x)')@@@x(@@x'@@x&@@ఐ%cases;nKna;nKnf@W@@4,F@@@xR@x9R@x6@@Y @@4@@@x>@ภ<nhnpAwఐ4$list  <nhnt@2h @@@@'sl@@@xQ@x@@@xQ@x[4h@@@x]@@x\@4[@@@xZ4J@@@xY@@xX@@xW@@ఐ(case_env1<nhnu2<nhn}@Ӱ@@@'$@@@x@'@@@x'@@@x@@x@@x@@ఐ)eff_casesL<nhn~M<nhn@@@4F@@@xrR@xR@x@@Y @@4~@@@x@ภa=nnAw@A@Ơ.c@@@xO@@@xPP@x@@nA@Р.m@@@w@@@wP@xN@@ A@ڠ.w@@@w@@@wP@w"@@9n(n3@@..@@@w@@@wP@w-@@="@@' @@@xP@w3@(@@'@Ġ-Texp_override>nn>nn@kఠ#pth>nn>nn@A@@k@@@_3@'@@@ఠ&fields>nn>nn@A@@k@k@@@_ @kk@@@_ @@@_ @}@@@_@@_ @@@_ %@@@6>nn@@|,@@@_*@@|/@@@_-@@@@ఠ%fieldIppIpp@A@@@@@@x@@@x@*(@@@xP@x@@xP@x*'@@@xP@x@@xP@x3@'e^@_@`WP@Q@R@@@࣠@-3 A@@IppIpp@@%3@8IppIpp@@@@@@ Ipp!Ipp@@- @@ఠ#arg *Ipp+Ipp@CA@@5@@/Ipp0Ipp@@@D@B@@@@x#@@  @@ఐ*`*expressionDIppEIpp@*@@@*v@@@x*s@@@x@@x3LKKLLLLL@:+Y@%@&@@@@ఐ2#arg\IppB@ C@@e@@D@@_@1EA@yP@xL@A@I@ఐ/V$joinkJpplJpp@-@@@/o/n@@@x@@@x/m@@@x@@x3wvvwwwww@x@@@@@@ภ!AKppMq)q0Ay%ఐ-n"<<KppKpp@,@@@-@@@x@-@@@x-@@@x@@x@@x'@@ఐ)$path(Kpp@)*@@@)@@@y)@@@y@@y=@@ఐ#pthKppKpp@@@* @@@y-T@y/T@y.Q@@G @@*@@@y4U@@ภ+DereferenceKppKpp@!@@@@J@@@yCd@@Z@@-@@@yJh@ภ!LpqcAyఐ-Р"<<LpqLpq@,b@@@-@@@yg@-@@@yf-@@@ye@@yd@@yc@@ఐ6$list'Lpq @4m)@@@@@m@@@yS@y@mm@@@y@@@yS@y@+Z@@@y@@yS@y6}@@@y@@y@6p#@@@y6_@@@y@@y@@y@@ఐc%fieldFLpq GLpq@̰@@@@4@/@+@@@y@@y+}@@@y@@y@@ఐ&fieldscLpqdLpq@^@@6X@@@yT@yT@y@@ @@6@@@y@@ภ+Dereference{Lpq|Lpq'@!@@@K@@@y@@@@.j@@@y @ภ!Mq)q/Az@A@0@@@y[@@@y\P@y@@A@0@@@x@@@xP@yZ&@@Jpp@@00@@@x@@@xP@x1@@A&@@),@@@yP@x7@,@@)0@Ġ-Texp_functionNq1q7Nq1qD@sఠ¶msNq1qFNq1qL@A@@ss@@@_@@@_3@)@@@ఠ$bodyNq1qNNq1qR@A@@s#@@@_@@@$Nq1qS@@~:@@@_@@~=@@@_@@@@ఠ)param_pat WrIrSWrIr\@ A@@@sI@@@yP@yk@@@zP@y@@yP@y3@)E>@?@@3,@-@.@@@࣠@%param AWrIr]WrIrb@,A@@3@+WrIrObsXs@@@@@  @@ఐ%param*`ss%+`ss*@4@@@@53+**+++++@$@@@'fp_kind4`ss+5`ss2@3'fp_kinds@@@ 3function_param_kind@@@ @@C3,fp_arg_label 2)arg_label@@@ @@@@A=.*..=.*.F@@@3(fp_paramwp!t@@@ @@A@A>.G.K>.G.]@@@3*fp_partial"o@@@ @@B@AB..B..@@@+3+fp_newtypes+~V#locx@@@ @@@ @@@ @@D2@AI/w/{I/w/@@@3&fp_loc@~!t@@@ @@E>@AN00N00@@@@AH/U/YH/U/v@@@]R@@L@@@y\@Ġ*Tparam_patas8sBas8sL@;*Tparam_pat]@@@ @l@@@ @A@@B@AU1H1JU1H1a@@@@ఠ#patas8sMas8sP@A@@l@@@z3@@@@@@ @@y@@@z@@|@@@z@@@ఐ#patas8sTas8sW@@@@@3@ @@@Ġ7Tparam_optional_defaultbsXsbbsXsy@;7Tparam_optional_default=@l@@@  @@@ @BA@B@A9W11:W11@@@L@ఠ#patbsXs{bsXs~@A@@l@@@z @@bsXsbsXs@@@@@z @@@(bsXs@@@@@z @@@@@z @@@ఐ#patbsXs@@@@@ 3@'@@@@@A `ss@@3        @@@@A@P@{@A@@@ఠ-param_defaulthsshss@5 A@@@tt@@@{ P@{-R@@@{/P@{@@{P@{3+**+++++@,C<@=@>@@@࣠@%paramA<hss=hss@U!A@@3=<<=====@)DhssEvuXui@@@@@  @@ఐ%paramSist Tist@2@@@@33TSSTTTTT@$@@@'fp_kind]ist^ist@) @@%@@@{  @Ġ7Tparam_optional_defaultmjtt'njtt>@@rjtt@sjttA@@mh@@@{ @ఠ'default~jttCjttJ@"A@@~@@@{.@@@jttK@@L@@@{3@@O@@@{6@@@ఐ-*expressionpttptt@-S@@@-@@@{ -@@@{@@{3@K)"@#@$@@@@ఐ0'defaultpttptt@ @@-@@@{0T@{2T@{1@@# @@@Ġ*Tparam_patqttqtt@/@qttqtt@@m@@@{v@@@ @@@@@{z@@@@@{}@@@ఐ1%emptyvuXud@0@@@@@Aist@@3@@@@A@P@{@A@@@ఠ(patternsxusu}xusu@#A@@1m@@@{P@{@@@{P@{3@@@@@@డv$List#map xusu xusu@ xusuxusu@@20@@@@uh@@@{P@{'@@{@2- @@@{2,0@@@{@@{@@{+@@ఐ@)param_pat1xusu2xusu@@@@u@@@{n-@@@{@@{@@@ఐ¶msFxusuGxusu@B@@2[8@@@{Q@{Q@{U@@F @@_V@A@Sxusuy @@@ఠ(defaults^yuu_yuu@w$A@@2m.@@@|P@|@@@|P@{3jiijjjjj@r@@@@@డ$List#map}yuu~yuu@ yuuyuu@@2@@@@u@@@|P@|'@@|@2 @@@|20@@@|@@|@@{+@@ఐ-param_defaultyuuyuu@@@@u@@@|.@@@|@@|@@@ఐ¶msyuuyuu@@@2̠8@@@|Q@|"Q@| U@@F @@_V@A@yuu @@@ఠ$bodyzuuzuu@%A@@.L@|oL@|#3@j~w@x@y@@@ఐ.-function_bodyzuuzuu@.@@@..@@|%@@ఐ$bodyzuuzuu@@@.@@@@.@A@zuu@@@ఠ!f{vv {vv @&A@@1@@@|CP@|*3@5A:@;@<@@@ఐ1"<<{vv({vv*@0@@@2@@@|0@2@@@|/2 @@@|.@@|-@@|,@@ఐ4$join2{vv3{vv@2`@@@4645@@@|O@@@|N44@@@|M@@|L7@@ภ'9I{vvJ{vv@}ఐ$bodyS{vvT{vv@I@@L@ఐ(defaults^{vv_{vv&@@@Ơ/@@@|jS@|vS@|t_@@j{vvk{vv'@@4m4l@@@|a@@@|`S@|hk@@D @@4l@@@|o@@ภ%Delay{vv+{vv0@;_N@@@AE@@A_@@_@@@O@@@|@@Y@@@A@{vv @@࣠@!mA|v4v?|v4v@@'A@@=Y@@@|3@@@@@@@  @@@ఠ#env}vDvQ}vDvT@(A@@=k@@@|Q@|3@*=y@@@|@$@%@@@ఐǠ!f}vDvW}vDvX@)@@2@@@|@@ఐC!m}vDvY}vDvZ@@@=@+@|R@|R@|*@@ @@0+@A@}vDvM @@ఐ>.remove_patlist~v^vg~v^vu@=@@@>~?s@@@|P@|@@@|@@@|@?@@@|@@|@@|3@P`Y@Z@[@@@@ఐ((patterns~v^vv~v^v~@@@>?(@@@|@@@|Q@|Q@|@@ఐ#env.~v^v/~v^v@&@@=@@@|Q@|Q@|Q@|2@@L @@3@W @@@=|v4v:>~v^v@@-@@@|O@|@@@;@P@@p@ @@@ @@ L@ @@ @/ @@-G@Ġ)Texp_lazyTvvUvv@wfఠ!e]vv^vv@vA@@]@@@_ 3a``aaaaa@.Q@@@@@@@@@@_!@@@@@_"@@@@ఠ)lazy_modevw!w+ww!w4@)A@@P@@@}`P@|3|{{|||||@.m(!@"@#@@@డwr6classify_lazy_argument'Typeoptw!w=w!wD@ w!wEw!w[@@wp@@@wp@@@|Рwk@wj@wi@whРwg@wf@@@@|A@@@|@@@|A@@@|@@|:@@ఐf!ew!w\w!w]@D@@w@@@|R@|R@|N@@= @@Рw@w@w@wРw@w@@@@|A@@@|@@@|A@@@|j@4Constant_or_function@Рw@w@w@wРw@w@@@@}A@@@}@@@}A@@wcwmwcw@@@} @@@*Identifier@wwww@@Рw֐@wՐ@@@@}#A@@@}"@Рw@w@w@wРw@w@@@@} A@@@}@@@}A@@Bww'@@@}@@@@7*@@Рx@x@x@xРx@x@@@@}'A@@@}&@@@}%A@@@}$@=Float_that_cannot_be_shortcut@Рx2@x1@x0@x/Рx.@x-@@@@}5A@@@}4@@@}3A@@wwww@@@}2@@@@w@@РxS@xR@xQ@xPРxO@xN@@@@}>A@@@}=@@@}@@@_-t@@C3t4t3@@@sAt.@t+3t(t'@@AsAt@t3tt@@BsAt@t3ss@@DsAs@ssAt@tఠ@A@vSvB@@@_>@@@_==@@A\x%xJ@@tW@@@_@P@_?D@@@d@@!@@@_AH@@$@@@_BK@@@@ఠ(case_envxNxZxNxb@*A@@@1CR@}@@@}P@}@1A@@@}P@}1>@@@}P@}@@}P@}@@}P@}3@0}z@|@{c`@b@aFC@E@D@@@࣠@!cAxNxcxNxd@ +A@@+3@8xNxVxNxw@@@@@  @@!mAxNxexNxf@4,A@@43@!B@@@@@@@@డ#fst-xNxi.xNxl@ e@@@@FR@}@1@@@}R@}@@} @@}3<;;<<<<<@!-W@$@%@@@@ఐ1$caseNxNxnOxNxr@1@@@1q@@@}@1@@@}@1@@@}Ǡ@1@@@}@@}@@}@@})@@ఐn!crxNxssxNxt@S@@6@@ఐg!mxNxuxNxv@@@@C@@xNxmt@@@V@T@@}S@}T@}O@@b@@YP@A@P@}@A@@ఐ8$joinx{xx{x@6ɰ@@@88@@@}@@@}8@@@}@@}3@@@@@@@ภ*qxxxxAUఐ6"<<xxxx@50@@@6@@@~@6@@@~6@@@~ @@~ @@~ '@@ఐ?W$list(xx@=;*@@@@3@@@~ZS@~/?5@@@~1@@~0@?( @@@~.?@@@~-@@~,@@~+J@@ఐ3*binding_opxxxx@3@@@3@@@~W3@@@~V@@~U_@@ภ,xxxx@ఐ$let_xxxx@$@@;T@~bv@ఐ$ands(xx)xx@0@@OU@~\@@@~aT@~eT@~c@@6xx7xx@@?uZ@@@~FT@~`@@@@?e@@@~j@@ภ+DereferenceKxxLxx@*@@@Tk@@@~y@@@@7:@@@~@ภ+[xxAఐ7C"<<fxxgxx@5հ@@@7_@@@~@7^@@@~7[@@@~@@~@@~@@ఐ(case_env'xx@װ)@@@2x@@@~S@~@@@~@2@@@~2@@@~@@~@@~@@ఐ蠐$bodyxxxx@@@3 "@@@~T@~T@~@@R @@@3@@@~2@@@~@@~ @@ภ%Delayxxxx@<@@@T@@@~@@j@@7@@@~@ภ*`xxAS@A@39@@@~@@@~P@~/@@$A@=9@@@~@@@~P@~9@@x{x/@@99@@@}@@@}P@~D@@T9@@2o@@@~P@}J@?@@2s@Ġ0Texp_unreachablexxxy@~@@@@[@@@_F@@^@@@_G@@@ఐ8N%emptyy@yFy@yK@7@@2@Ġ:Texp_extension_constructoryLyRyLyl@ఠ$_lid%yLyn&yLyr@>A@@@@@_O@@@_N3-,,-----@3@@@ఠ#pth8yLyt9yLyw@QA@@@@@_P@@@$@yLyx@@@@@_Q@@@@@_R@@@ఐ8-"<<Py|yQy|y@6@@@8I@@@ @8H@@@ 8E@@@ @@ @@ 3]\\]]]]]@3OB;@<@=0)@*@+@@@@ఐ4$pathqy|yry|y@4@@@4@@@+4@@@*@@)@@ఐN#pthy|yy|y@$@@4@@@;R@=R@<0@@  @@4@@@B4@@ภ+Dereferencey|yy|y@,@@@U@@@QC@@3@@3"D@Ġ0Texp_struct_itemyyyy@ఠ"siyyyy@A@@@@@_X3@ఠ!eyyyy@A@@@@@_Y3@@@yy@@'@@@_Z3@@*@@@_[3@@@ఐ7E">>yyyy@6@@@7_@@@Z@7^@@@Y7]@@@X@@W@@V3@3=6@7@80)@*@+@@@@ఐ5.structure_itemyyyy@5@@@5@@@z5@@@y@@x@@ఐ\"siyyyy@%@@53@@@R@R@0@@  @@51@@@4@@ఐ6I*expression-yy.yy@5@@@6_@@@6\@@@@@K@@ఐ}!eByyCyy@S@@6v@@@R@R@_@@  @@6t@@@c@@S@@3d@@@AR:MM@@3@@@J3SRRSSSSS@4C@@@X:MM@б@г626l6k66h6e@69@@@]N676d@г3栐6c6b@3@@@]O6>6_@@ @@]P6@6^@/A@@@6@@@W6@@@V@@UL@R6K@@@}9MuMu;@6<6<6,6+@6*6-@@6964@@]3@6@@@࣠@$bodyyAzz$zz(@-A@@6I3@6e@@@@@@ఐ$bodyz+z3z+z7@6X@@@@6Y3@6v@@@Ġ.Tfunction_bodyz=zAz=zO@;.Tfunction_body}@@@ @@@@ @A@@B@A]22]22@@@,@ఠ$bodyzz=zPz=zT@.A@@@@@^3@*@@@@@ @@6@@6@@@ఐ6*expression{{{{#@6@@@7 @@@u7 @@@t@@s3@A#@@@@@@ఐ*$body{{${{(@ @@7'@@@P@P@@@# @@6@Ġ/Tfunction_cases{){- {){<@;/Tfunction_casesV@~U@@@ @AA@B@An^22of33@@;@@%cases@@`zz@@@ @@@ @@@ ư_23_23@@@'partial@@z@@@ ɰ`33!`332@@@%param@@^!t@@@ ʰa333;a333J@@@#loc@@!t@@@ ˰b3K3Sb3K3c@@@)exp_extra@@@@@ @@@ ̰c3d3lc3d3@@@*attributes@@@@@ ΰd33d33@@@@AA@@@@@}@@@BA@ঠ%cases{{){?|{){DA3bq@@@cd@@@3SR@@AAO@L3IH@@BAB@?3<;@@CA5@23/.@@DA&@#3  @@EA@A^@[ఠ{@/A@p{*{@@@l@@@k@@@j@@A{){={){I@@@@@nP@m@@@@@7T@@7T@@@ఐ<$join||||@:ذ@@@<<@@@@@@<@@@@@3@2/@1@0@@@@డ6$List#map||||@ ||||@@;@@@@6;{e@@@P@@@@P@<@@@P@P@@@@;@@@;@@@@@@@;@@࣠@!c|A||||@0A@@.3@M@@@@@@$mode}A||||@*1A@@6k@@@P@3@b!E@@@@@@  @@డ#fst(||)||@`@@@@E@@@P@P@S@Ƞ@6@@@S@@@@@3@??@@@@@@*;1@2@3@@@@ఐ6$caseR||S||@6@@@6}@@@@6@@@@6@@@Ԡ@6@@@@@@@@@)@@ఐw!cv||w||@\@@6@@ఐu$mode||||@@@@qC@@||||@@@`@U@@T@U@P@@l @@cQ@||||@@@@@Q@Q@@@ఐ%cases||||@@@<@@@Q@Q@@@ @@==@@@@@P@Q@@@@@8l@@@Az+z-@@8n3@@@@0A@@8y8t@@L@0@@@zz@@8c@8o3@8@@@8s8s8e8d@8c@8r@@@[8o@@@[@@[8nб@г8})Typedtree||||@8||||@@@8@@@[" @@г8)term_judg||||@@8@@@[.@@@@@[1@@88A@@@8@@@]8@@@]@@];@࣠@#bop~A|}|}@,2A@@k8@@@ 3@8@@@@  @@ఐ>$join(}} )}}@,>+@@@(@@@'>*@@@&@@%343344444@9-#@@@@'@(@@@@ภ0E}}F}}?Aఐ8$path Q}}@8@@@8@@@L8@@@K@@J$@@ఐW#bopg}}h}}@0@@z@@@`@^8@+bop_op_paths}}t}}&@3+bop_op_pathz@@@ 1!t@@@ @@@ 3+bop_op_name r#loc@@@ @@@ @@A @Ar55r550@@@3*bop_op_val1value_description@@@ @@B@As5155s515Z@@@3+bop_op_type()type_expr@@@ @@C%@At5[5_t5[5}@@@3'bop_exp4@@@ @@D.@A w55 w56 @@@3'bop_loc=!t@@@ @@E:@Ax6 6x6 6%@@(@@Aq44q45@@,@\O@@9@@@\P@aP@_@@W@@9@@@f@ภ0}}(Asఐ9*expression }}2@9 @@@:@@@: @@@@@@@ఐ堐#bop}}3}}6@@@{}@@@@@'bop_exp}}7}}>@Z@@:5@@@P@P@@@8 @@:3@@@@ภ/A@A@y?@@@w@@@xN@@@LA@? @@@B@@@CN@v@@*}}@@?,?+@@@:@@@9N@A@@ @@H@@@N@8@<||@б@г+ed9a^@2@@@0]@г\[@@@@7X@@ @@9W@A@@@9@@@9@@@@@L@D@@@a||@@9@93dccddddd@:@@@9999@9@9@@@[9@@@[@@[9б@г:)Typedtree}A}W}A}`@: }A}a}A}p@@@:@@@[" @@г:)term_judg}A}t}A}}@@:@@@[.@@@@@[1@@::A@@@:)@@@] :&@@@] @@];@࣠@"csA}}}}@3A@@:>@@@3@:@@@@  @@ఐF<$list}}}}@D!@@@@:E@@@M@F@@@@@@F @@@E@@@@@@@3@:6,@@@@0@1@@@@ఐ:e+class_field}}}}@:i@@@:i@@@:f@@@@@@@ఐW"cs}}}}@'@@~@@@@/@+cstr_fields }}}}@3+cstr_fields~@@@ W+class_field@@@ @@@ @@A3)cstr_self{@@@ @@@@A999:@@@3)cstr_typeH/class_signature@@@ @@B@A:(:+:(:L@@@3*cstr_meths%U%Meths!t`!t@@@ @@@ @@C'@A:M:P:M:r@@@@A:: ::'@@@M@@@F@@@N@N@|@@I@@I#@@@N@@^}}Q@б@г:@@@@@г@@@@@@ @@@jA@@@; @@@;@@@@@L@@@@}A}Av@@:@;3@;@@@; ; ::@:@;@@@[;@@@[@@[;б@г;)Typedtree}}}}@;}}}}@@@;"@@@[" @@г; )term_judg}}}}@@;(@@@[.@@@@@[1@@;+;*A@@@;8@@@] ;5@@@] @@] ;@࣠@"cfA}}}}@4A@@';M@@@!3@;@@@@  @@ఐ"cf}}}}@@@@ @@@@@@@)@'3@;, @@@'cf_desc}}}~@3'cf_desc@@@ n0class_field_desc@@@ @@@ 3&cf_loc X!t@@@ @@A @Ah::i::@@{@3-cf_attributes=@@@ @@B@Aq::r::@@@@Au::v::@@@9&@@ @@@(0@Ġ+Tcf_inherit,~~ -~~@;+Tcf_inherit1@@@ 9@#-override_flag@@@ *class_expr@@@ c@@@ "@@@ !@q@@@ %@z!t@@@ &@@ $@@@ #@@@@ )@!t@@@ *@@ (@@@ '@E@@F@A;g;k;;@@@@@}~~~~~@@K@@@93~~@@@@ఠ"ce~~~~@5A@@T@@@:@ఠ&_super~~ ~~&@6A@@\[@@@<@@@;!@ఠ)_inh_vars~~(~~1@7A@@d@c@@@?@b@@@@@@>@@@=<@ఠ*_inh_meths~~3~~=@8A@@i@h@@@C@g@@@D@@B@@@AW@@@~~>@@@@@E\@@@@@F_@@@ఐ?Ǡ"<<~B~V~B~X@>Y@@@?@@@@?@@@?@@@@@@@3@ yr@s@tle@f@g[T@U@VA:@;@<@@@@ఐ;*class_expr~B~H~B~R@;@@@;@@@;@@@@@ @@ఐ"ce$~B~S%~B~U@'@@;@@@R@R@4@@  @@;@@@8@@ภ+Dereference;~B~Y<~B~d@3@@@][@@@G@@3@@K @@@L@Ġ'Tcf_valP~e~kQ~e~r@;'Tcf_val$@D#locy@@@ ,@@@ +O,mutable_flag@@@ -!t@@@ .0class_field_kind@@@ /$boolE@@@ 0@EA@F@A<#<%<#@@@S@ఠ#cfk~e~~e~@;A@@E@@@T%@@~e~~e~@@G@@@U-@@@n~e~@@@@@V2@@@@@W5@@@ఐ=60class_field_kind~~~~@=:@@@=:@@@=7@@@@@3@\U@V@WJC@D@E5.@/@0@@@@ఐ<#cfk~~~~@ @@=X@@@P@P@@@' @@@Ġ*Tcf_method~~~~@;*Tcf_method@#loc(@@@ 2@@@ 1,private_flag@@@ 3@@@ 4@CB@F@At@@@?5@@@-?2@@@,@@+@@ఐK!e%6%7@$@@?L@@@=R@?R@>.@@  @@?J@@@D2@@ภ+Dereference/%;0%F@5@@@_O@@@SA@@3@@B@Ġ-Tcf_attribute@GMAGZ@;-Tcf_attribute@)attribute@@@ 8@AE@F@A<<<=@@@@@RG[SG\@@@@@ye@@@@@Y@@@zi@@\@@@{l@@@ఐB%emptye`ff`k@BI@@&v@@@Ai}}@@(@@@3jiijjjjj@{@@@o}} @б@г۠>@@@@@г=@A@@@@@ @@@#A@@@?@@@?@@@@@L@@@@}}/@@>@?3@?@@@??>>@>@?@@@[?@@@[@@[?б@г?)Typedtreemm@?mm@@@? @@@[" @@г?)term_judgmm@@?&@@@[.@@@@@[1@@?)?(A@@@?6@@@]?3@@@]@@];@࣠@#cfkA@>A@@8?K@@@3@?@@@@  @@ఐ#cfk@@@@@@@@@@@3@?( @@@Ġ,Tcfk_virtual  @;,Tcfk_virtual@@@ @@@@ @A@@B@Ar;;s;;@@@@@@@@@@3      @$@@@@@@@A@@@@@D@@@@@@ఐCq%empty23@C@@M@@@@Ġ-Tcfk_concreteCD@;-Tcfk_concrete8@7-override_flag@@@ J@@@ @BA@B@A;;!;;N@@@@@YZ@@@@@_@ఠ!eef@~?A@@e@@@m@@@*m@@@@@r@@@@@u@@@ఐCZ"<<} ~ !@A@@@Cv@@@@Cu@@@Cr@@@@@@@3@.'@(@)@@@@ఐ@*expression  @@Y@@@@@@@@@@@@@@@ఐL!e  @$@@@@@@R@R@.@@  @@@@@@2@@ภ+Dereference " -@70@@@`@@@ A@@3@@B@@@A@@@@@l@ @б@г10@E-*@@@@)@г('@@@@$@@ @@#@&A@@@@Z@@@y@W@@@x@@wL@t@@@mm2@@@J@@V3@A#@@@@Z@Z@L@K@@J@@Y@@@[@V@@@[@@[@Uб@г@d)Typedtree/</E@@k/F/Q@@@@s@@@[" @@г@q)term_judg)/U*/^@@@y@@@[.@@@@@[1@@@|@{A@@@@@@@]@@@@]@@];@࣠@$mexpAFagGak@_@A@@@@@@3LKKLLLLL@A@@@@  @@ఐ$mexp]au^ay@@@@@@@@@@@@3feefffff@A9, @@@(mod_descoazpa@|ư@@|@@@ @Ġ*Tmod_ident@|ఠ#pth@AA@@|@@@3@&@@@@@@||@@@@@@ @@@@@|@@@@@|@@@@@@ఐ@$path@@@@@@@@@@@@@@@3@P6/@0@1@@@@ఐ=#pth@ @@A @@@P@P@@@# @@O@@@@Ġ.Tmod_structure@|eఠ!s@BA@@|m@@@3@@@@@@@@}@@@@@@}C@@@@@@ఐA,)structure@A0@@@A0@@@A-@@@@@3@)"@#@$@@@@ఐ0!s@ @@AJ@@@P@P@@@# @@R@Ġ,Tmod_functor,-@|@12@@|@@@332233333@@@@ఠ!e>?@WCA@@@@@@@@F@@}@@@@@}@@@@@@ఐE3"<<V W@CŰ@@@EO@@@@EN@@@EK@@@ @@ @@ 3cbbccccc@.'@(@)@@@@ఐAʠ&modexpuv @Aΰ@@@A@@@-A@@@,@@+@@ఐL!e  @$@@A@@@=R@?R@>.@@  @@A@@@D2@@ภ%Delay@@@@b@@@SA@@3@@B@Ġ*Tmod_apply%@|Πఠ!f'(@DA@@V@@@3@Y@@@ఠ!p*+@EA@@e@@@@@-.@@|@@@@@@(/@@~+@@@@@~.@@@@@@ఐGՠ$join393=@F@@@GG@@@[@@@ZG@@@Y@@X3@E>@?@@70@1@2@@@@ภ9°@HAఐE"<<@Q@S@D@@@F @@@@F @@@F@@@@@~@@})@@ఐB&modexp(.@N@B*@@@B@@@B@@@@@?@@ఐ!fB@OC@P@H@@B@@@T@T@S@@G @@B@@@W@@ภ+DereferenceY@TZ@_@9@@@cy@@@f@@Z@@FH@@@j@ภ:%iaicAఐFQ"<<taruat@D@@@Fm@@@@Fl@@@Fi@@@@@@@@@ఐB堐&modexp'ao@B)@@@B@@@B@@@@@@@ఐڠ!papaq@@@B@@@T@T@@@F @@B@@@@@ภ+Dereferenceaua@:#@@@c@@@-@@Y@@F@@@4@ภ9]AP@A@0H@@@@@@P@C@@nA@:H@@@u@@@vP@@@3>@@HH@@@m@@@lP@t@@@@@Ġ/Tmod_apply_unit@}Ϡఠ!f@FA@@@@@3@@@@@@@@X@@@@@[@@@@@@ఐF"<<@E@@@G@@@S@G@@@RG @@@Q@@P@@O3$##$$$$$@.'@(@)@@@@ఐC&modexp67@C@@@C@@@qC@@@p@@o@@ఐL!fKL@$@@C@@@R@R@.@@  @@C@@@2@@ภ+Dereferencebc@:@@@d@@@A@@3@@B@Ġ/Tmod_constraintst@~ఠ$mexp|}@GA@@@@@3@@@@@@@~*@@@ @@@@~+@@@@ఠ#coe@HA@@~@@@@@@0@@@@@$@@@@@'@@@Aఠ(coercion@JA@@@~@@@P@@@d@@@P@G@@@P@Ր@@P@P@@@@@3@j\U@V@W>7@8@9@@@࣠@#coeA@KA@@+3@7@2@/ @@Q@@@Q@@9@:@@@@@@!kA  @LA@@=3@&G@@@@@@@@ఐ.#coe  @@@U3        @Q@@@@@Ġ,Tcoerce_none&2@~U@@@@e3@@@@@f@@@ఐ2!k)6@*6A@@@k @@ภ&Return56B66H@,@@@eU@@@@@@@l@Ġ1Tcoerce_structureHISIId@~1@MIeNIf@@~3@~2@@@@j@@@@@@@@@@@@~0@~/@@@@~,@@@@@@@@@@@@W@@@/)@@X@@X@Ġ/Tcoerce_functorgqg@}@gg@@@@@j@@@@@@o@@@ @@p@@p@@H @@q@@@ఐ!kLWLX@@@}@@ภ+DereferenceLYLd@< @@@e@@@@@@@@Ġ1Tcoerce_primitiveeoe@}@ee@@}@@@@@@ @@@@@@@ఐӠ!k@@@ @@ภ&Ignore@e&@@@e@@@@@@@ @Ġ-Tcoerce_alias   @}@ " #@@}@@@@ఠ#pth % (@MA@@}@@@@ఠ#coe * -@NA@@@@@@@@' .@@U@@U@@@ఐd(coercion@3@@@c@^O@@@@3@.'@(@)!@@@@@@ఐ(#coe./@ @@wU@30//00000@@@@@࣠@!mABC@[OA@@@@@@ఐI."<<QR@G@@@IJ@@@@II@@@IF@@@@@@@3^]]^^^^^@C(@@ @@@@ఐE$pathpq@E@@@E@@@E@@@@@@@ఐ#pth@e@@E@@@#Y@%Y@$.@@  @@E@@@*2@@ఐ^!m@<@@?@@1@@@@@@P@8s@@@@t@@@A @@@A@@@@@@@P@@@@@@ఐ(coercion@ְ@@@@@@@@f@@@I@@@@@@@@@3@@@@@ఐ=#coe@@@@@@P@P@3@@@@@࣠@!mA  @ PA@@g@@@@@@@ఐIࠐ"<<@Hr@@@I@@@@I@@@I@@@@@@@3@/+g3@@@@%@&@@@@ఐFz&modexp%&@F~@@@F~@@@ F{@@@ @@ @@ఐ$mexp:;@h@@F@@@T@T@1@@  @@F@@@#5@@ఐd!mRS @?@@gr@@@-E@@4@@JC@@@1R@K@_`!@@@g@@@@@@9P@@@P@6P@3@@@@@@@@Ġ+Tmod_unpack{"(|"3@~Ǡఠ!e"5"6@IA@@@@@"@@"8"9@@~@@@*@@@":@@@@@/@@@@@2@@@ఐG*expression>D>N@Ga@@@G@@@=G@@@<@@;3@G1*@+@,@@@@ఐ8!e>O>P@ @@G@@@MP@OP@N@@# @@@@@Aao @@@@@F3@c@@@ac@б@гàG+@@@@z@г@@@@{@@ @@|@+A@@@G@@@@SG=@@@R@@QL@N@@@//7@@G.@G<3@H@@@G@G@G0G/@G.@G?@@@[G:@@@[@@[G9б@гGJ$Pathfqfu@GOfvfw@@@GY@@@[" @@гGU)term_judg"f{#f@@G]@@@[.@@@@@[1@@G`G_A@@@Go@@@]Gj@@@]@@];@࣠@#pthA?@@XQA@@GG@@@_3EDDEEEEE@H@@@@  @@ఐ#pthTU@@@@^@@@@@@@d3[ZZ[[[[[@H.( @@@Ġ$Pathlm@&Pidentqr@@ఠ!x{|@RA@@@@@i3~~@$@@@@@@@A@@@j@@D@@@k@@@ఐOʠ&single@O#@@@O@@@O@@@@@3@A)"@#@$@@@@ఐ0!x@ @@P @@@P@P@@@# @@V@@@@Ġ$Path@$Pdot@@#ఠ!t@SA@@@@@q3@~@@@@@@0@@@r @@@ @@@@@s@@@@@t@@@ఐKӠ"<<@Je@@@K@@@@K@@@K@@@@@@@3@70@1@2@@@@ఐHW$path@H[@@@H[@@@HV@@@@@@@ఐU!t*+@$@@Hr@@@R@R@.@@  @@Hn@@@2@@ภ+DereferenceAB@?@@@ia@@@A@@3@@B@Ġ$PathTU@&PapplyY Z@@ఠ!fcd@|TA@@@@@z3gffggggg@ @@@ఠ!prs@UA@@@@@{@@@&z@@8@@@|@@;@@@}@@@ఐNu$join"&@L@@@NN@@@@@@N@@@@@3@==6@7@8/(@)@*@@@@ภ@b)3ktAFఐL"<<):)<@K!@@@L@@@@L@@@L@@@@@@@)@@ఐI$path()7@I*@@@I@@@;I@@@:@@9?@@ఐ!f)8)9@H@@I*@@@KT@MT@LS@@G @@I&@@@RW@@ภ+Dereference)=)H@@a@@@j@@@af@@Z@@L@@@hj@ภ@Ű JTcAఐL"<<J[J]@K@@@M @@@@M @@@M @@@@@@@@@ఐIr$path'0JX@Iu)@@@Iu@@@Ip@@@@@@@ఐҠ!pDJYEJZ@@@I@@@T@T@@@F @@I@@@@@ภ+Dereference[J^\Ji@@@@@j{@@@@@Y@@MJ@@@@ภ?kksA@A@РOm@@@y@@@zP@@@nA@ڠOw@@@@@@P@x@@'@@OO@@@ @@@P@@@@@@Ġ$Pathu{u@)Pextra_tyuu@@ఠ!puu@VA@@@@@P@ఠ&_extrauu@WA@@@@@^@@@%u@@{@@@c@@~@@@f@@@ఐJ$path@J@@@J@@@J@@@@@3@|81@2@3+$@%@&@@@@ఐ@!p@@@J/@@@P@P@@@% @@<@@@A @@>@@@3@@@@@б@гJA@@@@T@гS@W@@@U@@ @@V@+A@@@JX@@@$JS@@@#@@"L@@@@ff7@@JF@JR3!  !!!!!@KG@@@JVJVJHJG@JF@JU@@@[JR@@@[@@[JQб@гJ`)Typedtree<=@Jg@A@@@Jo@@@[" @@гJm)term_judgMN@@Ju@@@[.@@@@@[1@@JxJwA@@@J@@@]J@@@]@@];@࣠@!sAj&k&@XA@@J@@@03pooppppp@KB@@@@  @@!mA~&&@YA@@Y?@@@;3@KU$@@@/@@@@@@ @@డ$List*fold_right''@ ' '@@Yհ@@@@J@@@wN@E@Yh@@@N@|N@C@@G@@F@Z@@@@D@@@B@@A@@@3@8GY|@@@:@A@B@@@@࣠@"itA''@ZA@@.3@@@@@@@#envA''@[A@@63@(@@@@@@@@@ఐK .structure_item'#'1@K@@@K@@@bK @@@a@@`3@&R@@@@@@ఐ<"it '2 '4@&@@f@@ఐ!m'5'6@Z@@Y@@@}R@R@&@@ఐP#env,'7-':@0@@3@@?@@R@{6@3'4';@@@@@@V@@UO@O@i@@ఐ⠐!sI(<BJ(<C@İ@@@@@@@)str_itemsU(<DV(<M@3)str_items@@@ ^@@@ [@@@ Z@@@3(str_type)signature@@@ \@@A @AAAAA@@@3-str_final_env!t@@@ ]@@B@AAAAA@@@@AAoAqAoA@@@9,@@[@@@TO@O@@@డ|l%empty#Env(<N(<Q@ (<R(<W@@X@@O@@@ @@@&@б@г<vuKro@C@@@%An@гZ~nm@@@@&Ij@@ @@'Ki@"A@@@K@@@K@@@@@L@V@@@.@@K@K3@L@@@KKKK@K@K@@@[K@@@[@@[K꠰б@гK)Typedtree,,@L,,@@@L@@@[" @@гL)bind_judg,,@@L@@@[.@@@@@[1@@LLA@@@L@@@]L@@@]@@];@࣠@!sA--@/\A@@nL3@@@3@L@@@@  @@!mA*-+-@C]A@@Z@@@3.--.....@M$@@@@@@@@@ @@#envAA-B-@Z^A@@Z@@@3EDDEEEEE@'Z@@@@!@"@@@@ @@ఐH!s[-\-@*@@@@@@3`__`````@+Z@@@@%@&@@@(str_descm-n- @3(str_desc@@@ b3structure_item_desc@@@ _@@@ 3'str_loc !t@@@ `@@A @ABB BB@@@3'str_env!t@@@ a@@B@ABB#BB2@@@@AAAAB@@@<)@@#@@@7@Ġ)Tstr_eval..@;)Tstr_eval4@@@ @@@@ c@@@ d@B@@N@ABRBVBRBz@@@"@ఠ!e.!."@_A@@@@@3@c@@@@.$.%@@@@@ @@@,.&@@]@@@@@`@@@@@@@ఠ&judg_e77@kA@@P@@@R@3@1*@+@,@@@ఐPӠ"<<7'7)@Oe@@@P@@@@P@@@P@@@@@@@@@ఐN.*expression77$@Mϰ@@@ND@@@NA@@@@@3@@ఐh!e'7%(7&@=@@N[@@@U@U@G@@  @@NY@@@K@@ภ%Guard>7*?7/@f@@@n^@@@Z@@3@@^[@A@F7 @@డ~($join#EnvT839U83<@ X83=Y83A@@X@@@]@@@@]@@@]@@@@@@@3feefffff@@@@@@@ఐ&judg_ex83Cy83I@@@Qc@@@@@ఐa!m83J83K@@@@\L@@@S@S@+@@83B83L@@^(@@@@S@5@@ఐj#env83M83P@E@@^<@@@R@R@I@@_ @@\@@@R@O@s@@\@@@@Ġ*Tstr_value9QW9Qa@;*Tstr_value"@(rec_flag@@@ e@@@ g@@@ f@BA@N@A5B{B}6B{B@@@H@ఠ(rec_flag9Qc9Qk@`A@@@@@3@@@@ఠ(bindings9Qm9Qu@ aA@@'@@@@@@@@@:9Qv@@@@@@@@@@@@@ఐM.value_bindings:z:z@M@@@M@@@ @MM@@@ @@@M@@@@@@@3!  !!!!!@F?@@@A81@2@3@@@@ఐN(rec_flag3:z4:z@@@M@@@&R@.R@-@@ఐS(bindingsG:zH:z@!@@MǠM@@@%@@@$R@1R@/1@@ఐ8!m_:z`:z@@@\@@@,R@4R@3G@@ఐ7#envu:zv:z@@@\@@+R@6R@5\@@q @@]@Ġ+Tstr_module;;@;+Tstr_module@.module_binding@@@ n@AF@N@ACLCNCLCm@@@@ঠ%mb_id;;A3%mb_id@@@ M!t@@@ @@@ @@@3'mb_name#loc`@@@ @@@ @@@ @@A@A"EE#EE9@@5 @3&mb_uid&!t@@@ @@B@A-E:E?.E:EM@@@ @3+mb_presence1/module_presence@@@ @@C)@A9ENES:ENEv@@L @3'mb_expr={@@@ @@D2@ABEwE|CEwE@@U @3-mb_attributesF@@@ @@E;@AKEELEE@@^@3&mb_locOG!t@@@ @@FG@AWEEXEE@@j@@A[DD\DD@@n @ఠfgfe@ bA@`_@@@@@@3  @@@@'mb_expr;;A8ఠ@6cA@@@@@@@$;%;@@@@@R@@@@@@@@@@@@@@!@@@ఐOB.module_binding;<<<@OF@@@@OFOE@@@=@@@<@OB@@@>@@;O?@@@:@@93POOPPPPP@PM@O@N;8@:@9@@@@@ఐ\%mb_idf<g<@@@OoOn@@@X@@@WR@iR@g!@@ఐ]'mb_expr}<~<@(@@Oy@@@YR@lR@k4@@<<@@@#@@@VR@m?@@ఐu!m<<@T@@^@@@_R@oR@nU@@ఐt#env<<@O@@^@@^R@qR@pj@@ @@k@Ġ.Tstr_recmodule== @;.Tstr_recmodule$@A@@@ p@@@ o@AG@N@A1CnCp2CnC@@@D@ఠ#mbs==@dA@@X@@@@@@3@@@@@@& @@z@@@@@}@@@@@@@ఠ(bindings>>'@lA@@U @ed@@@@@@R@@@@@R@@@R@x@@@R@s3@C<@=@>@@@డ$List#map.>*/>.@ 2>/3>2@@UR@@@@@@@R@z8@@{@UO @@@yUNA@@@w@@v@@u3FEEFFFFF@+@@@@࣠@TxAঠ%mb_id[>9\>>Aఠ@ymA@@@@@@@L@'mb_exprp>@q>GAఠ@nA@@@@]@@@|>8}>H@@DU@b@@@@@ఐ*%mb_id>M>R@-@/@.@@3@u5 @@@@@@ఐ&'mb_expr>T>[@ @@@@>L>\@@@@@@@>3>]@@@y@@S@S@@@ఐܠ#mbs>^>a@@@UҠ@@@S@S@@@ @@@A@> @@ఐP9recursive_module_bindings?ek?e@P@@@P@PP@@@@@@@P@@@@@@@@P@@@@@3@@@@@@@ఐ(bindings?e?e@ @@PӠ@PҠP@@@@@@Ġ@P@@@@@@@@R@R@(@@ఐ!m"?e#?e@ڰ@@_@@@R@R@>@@ఐ#env8?e9?e@հ@@_@@R@R@S@@p @@_@@@R@Y@@@,@Ġ.Tstr_primitiveT@U@@;.Tstr_primitive@1value_description@@@ h@AB@N@ABBBB@@@@@f@g@@@@@@@@@@@@@@ @@@@@ @@@ఐ;#envyAzA@@@@Ġ)Tstr_typeBB@;)Tstr_type@z(rec_flag@@@ iԠ0type_declaration@@@ k@@@ j@BC@N@ABBBC@@@ @@BB@@@@@@@@@@@@@@@@@,@@>@@@@@A@@@@@@ఐ#envGG @\@@ @Ġ+Tstr_typextH!'H!2@;+Tstr_typext(@@.type_extension@@@ l@AD@N@A2CC3CC&@@@E@ঠ2tyext_constructorsH!4H!F@32tyext_constructors@@@ .^5extension_constructor@@@ @@@ @@C3*tyext_path!t@@@ @@@ @AY``Z``@@l@3)tyext_txt#loc!t@@@ @@@ @@A@Ak``l``@@~@3,tyext_params.Y@@@@ @@(variance@@@ @+injectivity@@@ @@ @@ @@@ @@B?@A````@@@R3-tyext_privateR),private_flag@@@ @@DJ@A a0a4 a0aP@@@3)tyext_loc]!t@@@ @@EV@A aQaU aQak@@@30tyext_attributesi{@@@ @@F_@A alap ala@@@@A `a `a/@@@ఠ$extsbH!IcH!M@{eA@@{z@@@ @@@3jiijjjjj@ @@@@AoH!3pH!Q@@@@@"R@! @@@@@@@@# @@@@@$@@@@ఠ'ext_idsIU_IUf@oA@@W!t@@@R@@@@R@3@7=6@7@8@@@డ$List#mapIUiIUm@ IUnIUq@@WͰ@@@@@@@R@*@@@Wʠ @@@Wɠ3@@@@@@@3@+@@@@࣠@VAঠ&ext_idIUxIU~@3&ext_id@@@ K@@@ @@@ 3(ext_name #loc@@@ @@@ @@A @AHbUbYIbUbn@@[@3(ext_type5extension_constructor@@@ @@B@ATbobsUbob@@g@3(ext_kind%n:extension_constructor_kind@@@ @@C$@A_bb`bb@@r@3'ext_loc0[!t@@@ @@D0@Akbblbb@@~@3.ext_attributes<@@@@ @@E9@Atbbubb@@@@Axb@bDyb@bT@@@ఠ"id'IU(IU@@pA@@@@@@@A/IUw0IU@@|U@@@@@ఐ"id<IU=IU@@@@@3=<<=====@@@@CIUrDIU@@@@@S@S@@@ఐ$extsUIUVIU@@@Xj@@@S@S@@@ @@@A@bIU[ @@డD$join#EnvpJqJ@ tJuJ@@^@@@d@@@@d @@@d@@@@@@@3@@@@@@@ఐ`$listKK@]@@@@S0@@@IR@_@@@@@@_ @@@_@@@@@@@'@@ఐSJ5extension_constructorKK@SN@@@SN@@@FSK@@@E@@D<@@ఐi$extsKK@2@@` :@@@1S@LS@JQ@@ఐ!mKK@@@b@@@7S@NS@Mg@@KK@@d@@@@OS@6q@@డ+remove_list#EnvLL@  L L@@d6@@@h(d6@@@V@@@U@d@@@Td@@@S@@R@@Q@@ఐ'ext_ids)L*L@@@hHdV@@@d@@@cS@gS@e@@ఐ#envALBL@ް@@d@@@bS@jS@i@@LLML@@d@@@@kS@a@@ @@b@@@lR@@@@@Ġ.Tstr_exceptionfMgM @;.Tstr_exception@.type_exception@@@ m@AE@N@AC'C)C'CK@@@@ঠ1tyexn_constructor~MM@31tyexn_constructor@@@ @@@ @@@ 3)tyexn_loc !t@@@ @@A @Aaaaa@@@30tyexn_attributesڠV@@@ @@@ @@B@Aaaab@@ @@Aaaaa@@@ఠ#extM"M%@fA@@@@@-3@Q@@@@AM M)@@O@@@/R@. @@@X@@J@@@0 @@M@@@1@@@డ$join#EnvN-3N-6@ N-7N-;@@`@@@eh@@@r@em@@@qep@@@p@@o@@n3@?8@9@:@@@@ఐT5extension_constructorO<EO<Z@T@@@T@@@T@@@@@@@ఐ]#ext O<[ O<^@$@@T@@@S@S@.@@ఐ!mO<_O<`@ְ@@c@@@S@S@D@@+O<D,O<a@@e@@@~@S@N@@డ&remove#EnvDPbkEPbn@ HPboIPbu@@@ii@@@S@e@@@Se@@@S@@S@@S@iii@@@@@@@e@@@e@@@@@@@@@ఐǠ#exttPbvuPby@@@@@@@@&ext_idPbzPb@@@9@@@S@S@@@ఐ V#envPbPb@ 1@@f(@@@S@S@@@PbjPb@@f2@@@}@S@@@ @@@Ġ,Tstr_modtypeQQ@;,Tstr_modtype @+7module_type_declaration@@@ q@AH@N@ACCCC@@@0@@QQ@@@@@6@@@@@ [@@@7@@@Ġ/Tstr_class_typeRR@;/Tstr_class_type 6@"@ !t@@@ z@#loc@@@ |@@@ {@j6class_type_declaration@@@ }@@ y@@@ x@AK@N@A]DD!^DDj@@@p@@ R R@@,@+@@@B@(&@@@D@@@C@%@@@E@@A@@@@p@@@K@@ @@@Ft@@t@@r@@ @@@Gx@Ġ.Tstr_attribute4S5S@;.Tstr_attribute @@@@ @AM@N@ADDDD@@@@@DSES@@@@@K@@@@@ @@@L@@@@ @@ @@@N@@@ఐ #envXTYT@ @@@Ġ)Tstr_openeUfU@;)Tstr_open @0open_declaration@@@ r@AI@N@ACCCC@@@@ఠ"od{U|U@gA@@@@@S3~~@ @@@@@@@ @@@T@@ @@@U@@@ఐVv0open_declarationVV@Vz@@@Vz@@@Vw@@@@@3@ <)"@#@$@@@@ఐ0"odVV@ @@V@@@R@R@@@ఐ !mVV@ w@@e2@@@R@R@-@@ఐ #envV V @ r@@e@@@R@R@B@@N @@ (C@Ġ*Tstr_classW W @;*Tstr_class G@3@g1class_declaration@@@ u@B"@@@ w@@@ v@@ t@@@ s@AJ@N@AeCCfCD@@@x@ఠ'classesW W %@.hA@@)@(@@@`@&%@@@b@@@a@@_@@@^3*))*****@ @@@@@D@@ @@@c@@ @@@d@@@@ఠ)class_ids?X)5@X)>@XqA@@\Nl!t@@@R@@@@R@3NMMNNNNN@ B;@<@=@@@@ఠ(class_id^YAO_YAW@wrA@@@@+class_infosw@@@@S@砠@@@@@S@1@@@S@@@S@-@࣠@[A@ঠ+ci_id_classYAZYAe@3+ci_id_class&!a@m@@@ R@@@ @@C/3'ci_virt,virtual_flag@@@ @@@@APghPgh@@@3)ci_params@2@@@ @@(variance@@@ @+injectivity@@@ @@ @@ @@@ @@A,@A&Qhh'QhhT@@9@3*ci_id_name=#loc@@@ @@@ @@B<@A6RhUhY7RhUhq@@I@M30ci_id_class_typeM!t@@@ @@DH@ABThhCThh@@U@3,ci_id_objectY!t@@@ @@ET@ANUhhOUhh@@a@3'ci_expreb@@FZ@ATVhhUVhh@@g@3'ci_declk1class_declaration@@@ @@Gf@A`WhhaWhh@@s@3,ci_type_declw)6class_type_declaration@@@ @@Hr@AlXhimXhi/@@@3&ci_loch!t@@@ @@I~@AxYi0i4yYi0iG@@@3-ci_attributesM@@@ @@J@AZiHiLZiHif@@@@AShrhvShrh@@@ఠ"id 4YAh5YAj@MsA@@@@@387788888@␰?YAK@YAw@@@@@ABYAYCYAn@@U@ @@@JYApKYAq@@@@MYAXNYAr@@@@@@@@ @@ఐ*"id^YAu@(@)@*!@@3^]]^^^^^@'3@@@$A@S@+@A@(@డ$List#mapsZ{tZ{@ wZ{xZ{@@]@@@@@@@@R@@@@@@@@R@@@R@M@@@]@@@]V@@@@@@@3@OG@@A@B@@@@ఐN(class_idZ{Z{@ @@@@G@5@!R@@@@@5@@w@@@@@%@@ఐ'classesZ{Z{@}@@]Y@@@S@S@:@@g @@;@ @@@A@X)1@@@ఠ1class_declarationĠ[[@tA@@@@X@@@aR@*@@@+R@&@@@'@@(R@#@g@@@eR@0i@@@FR@1@@2R@$@@%R@"3@@@@@@࣠@]BA@ঠ'ci_expr)[*[A4ఠƠ@GuA@73.--.....@O5[6\@@@@@A8[9[@@ET@) @@@@[A[@@@@@C[D[@@@@I@@-@@ @@!mAU[V[@nvA@@Q3VUUVVVVV@).b@-@,@@@@@@డ?+remove_list#Envk\l\@ o\p\@@i@@@mi@@@;@@@:@j @@@9j@@@8@@7@@63@,8@/@0@@@@ఐR)class_ids\\@}@@mi@@@I@@@HU@LU@J@@ఐYR*class_expr\\@YV@@@YV@@@QYS@@@P@@O2@@ఐ'ci_expr\\ @g@@?@@ఐ{!m\\@I@@L@@\@@jc@@@G@hV@dU@@o@@V@A@R@l@A@@డ$join#Env]]@ ] ]$@@e-@@@j@@@r@j@@@qj@@@p@@o@@n3@@@@@@@ఐf$list^%0^%4@dm@@@@@%@@@R@@%$@@@@@@R@@@R@fx@@@@@@fk@@@fZ@@@@@@@8@@ఐZ1class_declarationA^%5B^%F@B@@@@ܠY@@@@@@@1@@@i@@@j@@@@@@@\@@ఐP'classese^%Gf^%N@@@fZ@@@S@S@q@@ఐS!mz^%O{^%P@2@@i>@@@S@S@@@^%/^%Q@@k@@@~@S@@@డt+remove_list#Env_R]_R`@ _Ra_Rl@@jа@@@n j@@@@@@@k@@@@kC@@@@@@@@@ఐ)class_ids_Rm_Rv@@@nj@@@@@@S@S@@@ఐ#env_Rw_Rz@x@@ko@@@S@S@@@_R\_R{@@ky@@@}@S@@@ @@iP@@@R@|@@@@@@ >@Ġ,Tstr_include`|`|@;,Tstr_include]@u3include_declaration@@@ ~@AL@N@AgDkDmhDkD@@@z@ঠ(incl_mod`|`|@3(incl_mod-include_infos!a@O@@@ @@@ 3)incl_type H)signature@@@ @@A @ASxS}SxS@@Y@3(incl_loc!t@@@ @@B@ASSSS@@Z@3/incl_attributes%@@@ @@@ @@C#@ASSSS@@[@@ASeSjSeSw@@X@ఠ$mexpX`|Y`|@qiA@@@@@s@)incl_typee`|f`|@?ఠ#mtym`|n`|@jA@@G@@@{@@Au`|v`|@@s@@@}R@|@@@|@@ @@@~@@ @@@ @@@@ఠ,included_idsɠaa@wA@@`%Ident!t@@@R@@@@R@3@@PI@J@K<5@6@7@@@డ$List#mapaa@ aa@@`װ@@@@1.signature_item@@@R@0@@@`֠ @@@`ՠ9@@@@@@@/@@డ1signature_item_id%Typesaa@ aa@@@'@@@}S@@@|@@{@IddJdd@@]B@@@@4@@@`@@@@@Z@@ఐ#mtyaa@b@@@@@ j@@Y@@yk@A@ a@@డ$join#Envbb@ b b @@g^@@@l@@@@l@@@l@@@@@@@3-,,-----@@@@@@@ఐ\&modexp?b @b@\@@@\@@@#\@@@"@@!@@ఐ$mexpTbUb@@@\@@@3S@9S@8.@@ఐA!mhbib@ @@k,@@@7S@;S@:D@@ub vb@@m@@@@w@@ఐ$,included_idsb+b7@@@pРl@@@Q@@@PS@TS@R@@ఐ#envb8b;@f@@m]@@@OS@WS@V@@bb<@@mg@@@@XS@N@@ @@k>@@@YR@@@@+C@@@A-@@kD@@@3@@@@-@б@гנ]   @@@@ @гkt @@@@@@ @@@1A@@@]#@@@ ] @@@@@L@@@@,=@@]@]3@^:@@@]#]#]]@]@@]"]!@@@\@@@\@]@@@\@@\]@@@\@@\]б@В@г]:&option>e_}?e_@г]?%IdentIe_uJe_z@]FMe_{Ne_|@@@]N@@@[< @@@]V@@@[A@@@г]P)Typedtreece_de_@]Wge_he_@@@]_@@@[V @@@@@ @@[], @@г]d)bind_judg{e_|e_@@]l@@@[i@@@@@[le_t @@]p]oA@@@@]]@@@]!@@@] @]@@@]"@@]]@@@]@@]@࣠@aA@ఠ"idʠff@yA@@ .]@@@)@@@(3@^@@@@ఠ$mexpˠff@zA@@]@@@*@@ff@@@#"@@@.@@@-@@@@/@@,%@@@@!mAff@{A@@lX@@@=3@^KD@E@F5.@/@0@@@@  @@#envAff@|A@@lf@@@H3@&lt@@@<@ @!@@@@ @@@@ఠ&judg_EΠlS]lSc@4}A@@b @@@P@M3!  !!!!!@ /l@@@G@)@*@@@@ఠ#envϠ2lSe3lSh@K~A@@l@@@P@N@@! @@@!@ @@Q@ఐ"idKmkyLmk{@[@@@@@T@@@S3RQQRRRRR@1@@@Ġ$None`nan@k@@@@@@@\@@@[F@@@@@^@@@]M@@@@ఐb["<<~nn@`@@@bw@@@v@bv@@@ubs@@@t@@s@@rj@@ఐ^&modexpnn@^@@@^@@@^@@@@@@@ఐ$mexpnn@@@_ @@@U@U@@@  @@_@@@@@ภ%Guardnn@x@@@@@@@@3@@@@ఐ۠#envnn@@@@@@@@@@@@l@Ġ$Someoo@kڠఠ"idРoo@ A@@D@@@e@@@@@LK@@@g@@@f@@SR@@@i@@@h@@@@@ఠ"mMѠpp@0A@@sZsY@@@S@3@4-@.@/@@@@ఠ#envҠ,p-p@EA@@o@@@S@@@ @@@@ @@@డ$take#EnvIpJp@ MpNp@@@ss@@@S@o@@@S@C@@@S@o@@@S@@S@@S@@S@sss @@@@@@@o@@@@Z@@@ɠ@p @@@@@@@@@^@@ఐ"idpp@h@@=@@@T@T@r@@ఐ#envpp@y@@p1@@@T@T@@@_ @@@@@@T@@A@p@@@ఠ&judg_EӠqq@A@@c@@@S@3@@@@@@@@ఐc"<<qq@bB@@@c@@@@c@@@c@@@@@@@@@ఐ`D&modexpqq @`H@@@`H@@@`E@@@@@5@@ఐB$mexpq q@@@`_@@@V@V@I@@  @@`]@@@M@@డF$join$Mode"q#q@ &q'q@@~@@@@@@*@@@)@@(l@@ఐ$"mM;q<q @u@@a@@@:U@2U@4U@3@@ภ%GuardPq!Qq&@z@@@@@TqUq'@@@@h@@@A@Xq@@@ఐ&judg_Edr+5er+;@@@@@IR@B3gffggggg@@@@@ఐI#envur+=vr+@@@@BR@C@@@@@@ @@D@* @@@ @@b@@@Amks@@@j@U@@Mg@A@lSY@@డn$join#EnvtJPtJS@ tJTtJX@@kݰ@@@q1@@@S@q6@@@Rq9@@@Q@@P@@O3@@@~@@@@@@ఐ&judg_EtJZtJ`@@@d@@@a@@ఐ렐!mtJatJb@˰@@o@@@pQ@rQ@q-@@tJYtJc@@qp@@@_@sQ@o7@@ఐ#envtJdtJg@?@@q@@@^P@uP@tK@@a @@o[@@@vP@]Q@u@@@f@б@В@г]Ӡг^Ϡa@e@@@ b@@l@@@ f@@г[Ša@b@@@ r@@@@ @@x@гo@@@@@@@@@:KA@@@@aFaE@@@@@@@aB@@@@@a?@@@@@L@@@@Te__d@@a2@a>3WVVWWWWW@b}@@@aBaBa4a3@a2@aA@@@\a>@@@\@@\a=б@гaL)Typedtreervisvi@aSvviwvi@@@a[@@@\ " @@гaY)bind_judgvivi@@aa@@@\.@@@@@\1@@adacA@@@aq@@@]%an@@@]$@@]#;@࣠@eAঠ)open_exprww@3)open_expr*open_infos!a@[@@@ @@@ 30open_bound_items )signature@@@ @@A @AvR1R6vR1RX@@(S@3-open_override-override_flag@@@ @@B@A wRYR^!wRYR{@@3T@3(open_env$!t@@@ @@C @A,xR|R-xR|R@@?U@3(open_loc0(!t@@@ @@D,@A8yRR9yRR@@KV@3/open_attributes<&#@@@ @@@ @@E:@AFzRRGzRR@@YW@@AJuRR"KuRR0@@]R@ఠ$mexpՠww@A@@@@@3@b@@@0open_bound_itemsww@Wఠ"sg֠ww@(A@@_@@@@@Aww@@ma@@@@@@@!mA(w)w@AA@@p@@@3,++,,,,,@c=6@7@8(!@"@#@@@@  @@#envA>w?w@WA@@p@@@3BAABBBBB@&p@@@@ @!@@@@ @@@ఠ&judg_E٠WxXx@pA@@b@@@P@3]\\]]]]]@+p@@@@%@&@@@ఐbĠ&modexpoxpx@bȰ@@@b@@@b@@@@@@@ఐ$mexpxx@T@@b@@@Q@Q@.@@  @@2/@A@x @@@ఠ)bound_idsڠy y @A@@g@@@P@@@@ P@3@KYR@S@T@@@డ$$List#mapy  y $@ y %y (@@gް@@@@@@@P@'@@@g۠ @@@gڠ0@@@@@@@+@@డ1signature_item_id%Typesy )y .@ y /y @@@@@@,@@@X@@@@@I@@ఐ"sgy Ay C@̰@@L@@@Y@@J@@cZ@A@y @@డ$join#EnvzGMzGP@ zGQzGU@@nV@@@s@@@ @s@@@s@@@@@@@3%$$%%%%%@@@@@@@ఐࠐ&judg_E7zGW8zG]@@@c@@@.@@ఐ"!mGzG^HzG_@@@r @@@=Q@?Q@>+@@TzGVUzG`@@s@@@,@@Q@<5@@డA+remove_list#EnvmzGbnzGe@ qzGfrzGq@@s@@@ws@@@G@@@F@t @@@Et@@@D@@C@@B^@@ఐ)bound_idszGrzG{@h@@ws@@@U@@@TQ@XQ@Vv@@ఐm#envzG|zG@H@@t<@@@SQ@[Q@Z@@zGazG@@tF@@@+@\Q@R@@ @@r@@@]P@*@@@@4@@d@w@б@гa`c]Z@@@@Y@гrNYX@@@@U@@ @@T@,A@@@c@@@~c@@@}@@|L@y@@@vii8@@c@c3@e@@@cƠcưcc@c@cŠ@cĠc@@@\.@@@\-@c@@@\/@@\,@@@\+c@@@\*@@\)cб@гc᠐$list}}@В@гc栐&option%}&}@гc렡%Ident0}1}@c4}5}@@@c@@@\I @@@d@@@\N@@@гc)TypedtreeJ}K}@dN}O}@@@d @@@\c @@@@@ @@\j, @@@d+ @@@\oa}I@@гd)bind_judgh}i}@@d@@@\ |@@@@@\!@@d dA@@@dC@dBdA@@@]+@@@]*@d>@@@],@@])@@@](d;@@@]'@@]&@࣠@*m_bindingsA~~@A@@@!di@@@@@@@dh@@@@@@@@3@e@@@@ @@!mA~~@A@@s/@@@3@e9/@.-@@@@@@@+@@@@@@@@@D@E@@@@@@#envA~~@A@@sO@@@3@)8s]@@@@2@3@@@@ @@@ఠ$midsߠ@A@@ޠf@@@P@@@@P@3        @#2sw@@@@,@-@@@డ$List*filter_map# $@ '(@@@@!a@&&optionL!b@&@@@'@@'@@@@'?@@@'@@'@@'@@@Z@+&@@@@@'S@@@P@ڠ@@@@P@@@P@2^@@@@@@+@@@ih@@@@@@@c@@డ#fst}~@>@@@@.@(@@0@@x@@ఐ*m_bindings(@̰@@YJ@@@Q@Q@@@{ @@@A@ @@@ఠ'binding,4,;@A@@@@rݠ{2{1@@@]P@@@@P@렠@f@@@P@@@P@@t@@@P@ve@@@P@@@P@@@P@3@@@@@@࣠@j A@ఠ#mid,=,@@A@@:3@M,06@@@@@ఠ$mexp,B,F@A@@>@@,<,G@@@S@G@@@@ @@!mA,H,I@0A@@L3@+4g@.@/#Z@@@@@@  @@@ఠ&judg_E,LV-L\@EA@@j@@@S@321122222@'i@@@@@ఐS#midA_mB_p@%@@3A@@AAAAA@@@@Ġ$NoneOvPv@su@@@@@@@@@ఐj8"<<[v\v@hʰ@@@jT@@@@jS@@@jP@@@@@@@6@@ఐf̠&modexpwvxv@fа@@@f@@@#f@@@"@@!M@@ఐ$mexpvv@o@@Z@@@@f@@@9^@@ภ%Guardvv@\@@@@@@Hm@@,@@sn@Ġ$Some@sఠ#mid@A@@P@^P@y@@@@@z@@z@@@@ఠ"mM@A@@|5|4@@@[V@K3@"@@@@@డ$find#Env@ @@@-@@@R@w~@@@R&@@@R@@R@@R@|X|U|G@@@;@@@Q@w@@@P4@@@O@@N@@M3@@ఐY#mid@=@@X@@@ఐ8#env@ @@w@@@\W@`W@_T@@E @@YU@A@( @@ఐk"<<23@i@@@k+@@@f@k*@@@ek'@@@d@@c@@b3?>>?????@qy@z@{@@@@ఐg&modexpQR@g@@@g@@@g@@@@@@@ఐf$mexpfg@I@@'@@@@g@@@+@@డ$join$Mode}~@ @@s@@@W@@@@@@@@J@@ఐΠ"mM@T@@@@@W@W@W@`@@ภ%Guard@k@@@l@@@@o@@a@@V@yr@@@@@@A_g@@@A@LR @@డ+remove_list#Env@ &@@w@@@{w@@@@@@@xf@@@xi@@@@@@@3@@@@@@@ఐ점$mids'+@@@| x@@@@@@S@S@@@ఐڠ&judg_E-3@'@@k@@@-@@ఐ!m45@@@J:@@,$@@x@@@@T@C@@],@@KD@l-@@L@ .A@wP@5@A@2@డ$join#Env4>B5>E@ 8>F9>J@@sw@@@x@@@@x@@@x@@@@@@@3FEEFFFFF@o@@@@@@ఐtҠ$listX>LY>P@r@@@@@u@@@C@@@B@h@@@D@@AP@ t@@@ @@ @t@@@ t@@@@@@@4@@ఐݠ'binding‡>Qˆ>X@>@@@@u@@@;@@@:@h@@@<@@9@w[@@@8y.@@@7@@6@@5[@@ఐ*m_bindings®>Y¯>c@@@tY@@@!Q@NQ@Ip@@ఐ!m>d>e@հ@@w@@@'Q@PQ@O@@>K>f@@yc@@@@QQ@&@@డ+remove_list#Env>h>k@ >l>w@@y@@@} y@@@X@@@W@y@@@Vy@@@U@@T@@S@@ఐ $mids >x >|@1@@}+y9@@@f@@@eQ@iQ@g@@ఐ@#env$>}%>@@@y@@@dQ@lQ@k@@/>g0>@@y@@@@mQ@c@@ @@w@@@nP@@I@@d@@@0@A~@б@г54В@г10г-,i)&@@@@%@@@@@$@@г#"i"@@@@@@@@ @@@@۠ @@@@гw@@@@@@@@@CTA@@@iW@iViU@@@@@@@iR@@@@@@@@iO@@@@@L@@@@à|q@@iB@iN3ãââããããã@j@@@iRiRiDiC@iB@iQ@@@\?iN@@@\>@@\=iMб@гi\)Typedtreeþÿ@ic@@@ik@@@\7" @@гii)term_judg@@iq@@@\8.@@@@@\91@@itisA@@@i@@@]/i~@@@].@@]-;@࣠@"ceA@A@@Di@@@3@j@@@@  @@ఐ"ce@@@@@@@@.@@@@3        @j, @@@'cl_desc@3'cl_desc.@@@ /class_expr_desc@@@ @@@ 3&cl_loc u!t@@@ @@A @A7777@@@3'cl_typeN*class_type@@@ @@B@A77!77;@@@3&cl_env#L!t@@@ @@C!@A7<7A7<7O@@@3-cl_attributes/r@@@ @@D*@A7P7U7P7o@@@@A6667@@@Q>@@8@@@H@Ġ)Tcl_identab@;)Tcl_identI@@@ @ !t@@@ _#loc_!t@@@ @@@ ,@@@ @@@ @C@@G@A7777@@@@ఠ#pthđĒ@ĪA@@,@@@3ĕĔĔĕĕĕĕĕ@@@@@Ĝĝ@@.,@@@@@@ @@Ĩĩ@@--*@@@@@@@@@QIJ@@@@@@@@@@!@@@ఐn"<<  @m1@@@n@@@3@n@@@2n@@@1@@0@@/3@G@@A@B@@@@ఐk#$path@k'@@@k'@@@Qk"@@@P@@O@@ఐe#pth @$@@k>@@@aR@cR@b.@@  @@k:@@@h2@@ภ+Dereference  @bu@@@-@@@wA@@3@@y@@@-F@Ġ-Tcl_structure"#,@;-Tcl_structure@@@@ @AA@G@A7777@@@@ఠ"cs6-7/@OA@@@@@3:99:::::@.@@@@@@@#@@@@@&@@@@@@ఐkܠ/class_structureN3;O3J@k@@@k@@@~k@@@}@@|3VUUVVVVV@K)"@#@$@@@@ఐ0"csf3Kg3M@ @@k@@@P@P@@@# @@]@Ġ'Tcl_fun{NT|N[@;'Tcl_fun@o)arg_label@@@ z@@@ ͠@!t@@@ @@@@ @@ @@@ 0e@@@ !@@@ @EB@G@A77848P@@@@@ŮN]ůN^@@0@@@3ŰůůŰŰŰŰŰ@@@@@ŷN`ŸNa@@@@@ @ఠ$argsNcNg@A@@=@<@@@٠@@@@@@@@@$@ఠ"ceNiNk@A@@0@@@2@@NmNn@@h@@@:@@@sNo@@@@@?@@@@@B@@@@ఠ#idsss@A@@qx@@@P@@@@P@3        @RK@L@M81@2@3@@@డĊ$List#map s!s@ $s%s@@qD@@@@@*P@@3@@@P@@@P@2@@@qJ@@@qI;@@@@@@@6@@డĻ#fstNsOs@E@@@)M@@Q@G@@ఐ$args_s`s@P@@qt=@@@Q@Q@\@@K @@f]@A@ls{ @@ఐs*remove_idsvw@rh@@@t t@@@@@@@t@@@t@@@@@@@3ƇƆƆƇƇƇƇƇ@}@@@@@@ఐ#idsƗƘ@ @@tCtB@@@@@@P@P@@@ఐp"<<ƱƲ@o @@@p@@@@p@@@p@@@@@@@7@@ఐlt*class_expr@lx@@@lx@@@lu@@@@@N@@ఐ"ce@Ұ@@l@@@ T@T@b@@  @@l@@@f@@ภ%Delay@>w@@@@@@#u@@@@p@@@*{@@@@@@@4P@@ @@@Ġ)Tcl_apply@;)Tcl_apply@1@@@ b@)arg_label@@@ @@@@ @@ @@@ @BC@G@AŽ8Q8S8Q8@@@¡@ఠ"ce>?@WA@@2@@@3BAABBBBB@6@@@ఠ$argsMN@fA@@2@1@@@ꠠ@@@@@@@@@@@@Lb@@G@@@!@@J@@@$@@@@ఠ#argst@njA@@@@@@9@n@@@`P@B@@@DP@C@@@AP@:@@;P@6n@@@_P@7@@8P@53ǘǗǗǘǘǘǘǘ@d]@^@_VO@P@Q@@@࣠@qA@@Ǭǭ@@-3ǫǪǪǫǫǫǫǫ@@Dzdz<]@@@@@ఠ#argǼǽ@A@@;@@@@@F@D@@=@@ @@ఐ#arg@R@@@@S3@+"@@@Ġ'Omitted(/@WĠ<02@;@@@@_3@@@@@@ @@l@@l@@@ఐr7%empty6;@qܰ@@e @Ġ#Arg<H<K@ఠ!e<L<M@'A@@P@aP@F=@@@@@>@@>@@@ఐo;*expression<Q <[@nܰ@@@oQ@@@PoN@@@O@@N3'&&'''''@S"@@@@@@ఐ)!e7<\@ @@'@@@@@@@A; @@M@|A@P@@A@@ఐt3$joinHiqIiu@rv@@@tLtK@@@@@@tJ@@@@@3TSSTTTTT@@@@@@@ภfbxcAఐrK"<<nxox@pݰ@@@rg@@@@rf@@@rc@@@@@@@'@@ఐn1*class_expr(Ȋx@n4*@@@n4@@@n1@@@ @@ =@@ఐ`"ceȞxȟx@@@nK@@@T@ T@Q@@G @@nI@@@%U@@ภ+Dereferenceȵxȶx@f@@@@@@4d@@Z@@r@@@;h@ภfcAdఐr"<<@q?@@@r@@@X@r@@@Wr@@@V@@U@@T@@ఐ{f$list'@yJ)@@@@@@@@S@@@@@S@@@S@x{Q@@@z@@y@{D@@@w{3@@@v@@u@@t@@ఐ#arg@ð@@@@+@ĔpU@@@x@@@@@@@@pW@@@@@@@ఐ$args=>@@@{U@@@T@T@@@ @@{o@@@@@ภ+DereferenceUV@f@@@u@@@@@@@sD@@@@ภeeA@A@ʠug@@@L@@@MP@@@A@Ԡuq@@@@@@P@K#@@{iv@@u}u|@@@@@@P@.@@>#@@t@@@P@4@)@@x@Ġ'Tcl_letɖɗ@;'Tcl_let5@Ê(rec_flag@@@ u@@@ @@@ @!t@@@ @Ķ@@@ @@ @@@ 4@@@ @DD@G@A8888@@@1@ఠ(rec_flag@A@@7@@@3@@@@ఠ(bindings@A@@@ô@@@@@@@@@@C@B@@@@@@@@@@@@(@ఠ"ce@A@@4@@@6@@@v @@@@@;@@@@@>@@@ఐr">>&(@q?@@@r@@@@r@@@r@@@@@@@3)(()))))@ f_@`@aXQ@R@S2+@,@-@@@@ఐo.value_bindings?@@oİ@@@o@@@@o o@@@@@@o@@@@@@@'@@ఐ(rec_flag]^@/@@o@@@/R@1R@0;@@ఐ(bindingsqr%@B@@oo@@@.@@@-R@4R@2S@@A@@o@@@<W@@ఐp6*class_exprʏ)ʐ3@p:@@@p:@@@Rp7@@@Q@@Pn@@ఐ"ceʤ4ʥ6@t@@pQ@@@bR@dR@c@@  @@pO@@@i@@t@@@Ġ.Tcl_constraintʽ7=ʾ7K@;.Tcl_constraint\@5@@@ i9*class_type@@@ @@@ @@@ @@@ @@@ @@@ 'MethSet!t@@@ @EE@G@AI88J9M9d@@@\@ఠ"ce7M7O@A@@5@@@3@@@@@7Q7R@@@?@@@@@@ @@7T7U@@A@@@@@@@@@7W7X@@CB@@@@@@%@@(7Z)7[@@E@@@-@@@q.7\@@@@@2@@@@@5@@@ఐp堐*class_expr>`h?`r@p@@@p@@@wp@@@v@@u3FEEFFFFF@;VO@P@Q@@@@ఐ]"ceV`sW`u@ @@q@@@P@P@@@# @@M@Ġ(Tcl_openkv|lv@;(Tcl_open @0open_description@@@ 6<@@@ @BF@G@A9999@@@@@ˁv˂v@@@@@w@ఠ"ceˍvˎv@˦A@@6W@@@@@@*˕v@@z@@@@@}@@@ @@@ఐqL*class_expr˥˦@qP@@@qP@@@qM@@@@@3˭ˬˬ˭˭˭˭˭@)"@#@$@@@@ఐ0"ce˽˾@ @@qj@@@P@P@@@# @@@@@A @@@@@E3@@@@@б@г堡q~@@@@@гˠ@@@@@@ @@@+A@@@q@@@Rq@@@Q@@PL@M@@@7@@q@q3@s@@@qqqq@q@q@@@\Kq@@@\J@@\Iqб@гq)Typedtree@q@@@q@@@\C" @@гq)term_judg#$@@q@@@\D.@@@@@\E1@@qqA@@@q@@@]2q@@@]1@@]0;@࣠@"ec(A@A@YA@@ʘq@@@^3FEEFFFFF@s@@@@  @@ఐ"ecWX@@@@]@@@@ q@@@f@d3`__`````@s3, @@@(ext_kindij@n@@m@@@e @Ġ)Text_declyz$@;)Text_decl~@@@ @Ġt#loc@@@ @@@ @@@ Ƞ5constructor_arguments@@@ ˠ:5@@@ @@@ @C@@B@A!c&c*!c&cq@@@@@̧%̨&@@('%@@@r@@@q@@@p3̱̰̰̱̱̱̱̱@Q@@@@@&@@@s@@@%5<@@@u@@@t@@@K@@@@@v@@@@@w@@@ఐw%empty*0*5@v@@@@@$@Ġ+Text_rebind6<6G@;+Text_rebindi@ƞ!t@@@ Π#loc!t@@@ @@@ @BA@B@AV"crctW"crc@@@i@ఠ#pth)6I6L@A@@#@@@~@ఠ$_lid*6N6R@-A@@*(@@@@@@@@@> 6S@@ "@@@@@ %@@@@@@ఐsr$path0W]1Wa@sv@@@sv@@@sq@@@@@387788888@<5@6@7/(@)@*@@@@ఐD#pthJWbKWe@@@s@@@P@P@@@% @@@@@AV @@@@@@[@б@гWVrSP@$@@@S"O@гNM@@@@T)J@@ @@U+I@*A@@@s @@@s @@@@@L@6@@@̀6@@r@s3̓͂͂̓̓̓̓̓@t@@@s s rr@r@s @@@\a@s s@@@\`@@@\_s@@@\^@@\]@@\\sб@гss ͤͥ@@s&@@@\O#@@б@гs%$listͲͳ@гs*)Typedtreeͽ;@s1@@@s9@@@\PA @@@sA@@@\RF@@гs;)bind_judg@@sC@@@\SR@@@@@\TU@@@8@@\UX; @@sIsHA@@@sb@@@]8@s`s_@@@]7@@@]6s\@@@]5@@]4@@]3k@࣠@(rec_flag+A@A@@ks@@@3@t@@@@  @@(bindings,A@(A@@͋ks@@@+@@@*3@t* @@@@$@%@@@@@@$mode-A-.@FA@@@@@8310011111@.$#@@@)@@@(@,@-@@@@@@)bound_env.AHI@aA@@@@@C3LKKLLLLL@+@@@7@%@&@@@@ @@@ఠ.all_bound_pats/a b  @zA@@yp`@@@`Q@L@@@YQ@G3mllmmmmm@"1@@@B@+@,@@@డ$List#map΃ #΄ '@ · (Έ +@@y@@@@a@@@aQ@N*@@O@y @@@My3@@@K@@J@@I3ΛΚΚΛΛΛΛΛ@.@@@@࣠@"vb0Aέ 1ή 3@A@@"A@@@@ఐ"vbμ 7ν 9@0@@@@13νμμννννν@Q@@@&vb_pat : @@ @@] @ , A@@@Ch@@[R@dR@cb@@ఐР(bindings B J@@@yW@@@ZR@gR@eI@@e @@x@A@  @@@ఠ)outer_env1NVN_@ A@@@@@yQ@h3@@@@@@ఐ.remove_patlist Nb Np@@@@@@@Q@o@@@n@@@m@@@@l@@k@@j%@@ఐˠ.all_bound_pats,Nq-N@/@@Р%@@@{@@@zR@~R@|>@@ఐ)bound_envENFN@հ@@RR@R@O@@D@@SP@A@NNR @@@ఠ,bindings_env2YZ@rA@@@@@aQ@3a``aaaaa@hvo@p@q@@@ఐw(rec_flagpq@S@@s@@@3srrsssss@@@@Ġ,Nonrecursiveρς@;,Nonrecursive(Asttypes(rec_flag@@@@@@@B@@A4parsing/asttypes.mli``@@@ I@@@@@@@@3ϔϓϓϔϔϔϔϔ@3@@@@@@@@@@@ఠ+binding_env3ϥϦ@ϾA@@@@@@T@@@@@T@J@@@T@@@T@@@T@\@࣠@y9Aঠ&vb_patAఠ5@A@@@@3@v9(]@@@@'vb_exprAఠ6@A@@@@@@A@@FV@@@@@!m7A@A@@M3@,41@3@2@@@@@@  @@@ఠ"m'8@-A@@@@@W@3@'j@@@@@డQ'compose$Mode-.@ 12@@V@@@@@@@ @@@@@@@@@@%@@ఐP!mLM @/@@2@@ఐu'pattern[ \@u@@@u@@@X@@@@@u@@@u@@@@@@@V@@ఐ&vb_pat}~@y@@t@@e@@ఐG)bound_envЌЍ#@@@u@@@Y@Y@y@@З И$@@u@@@@@p@@@A@О@@ఐL*remove_patШ(4Щ(>@@@@G8@@@V@@@@@G@@@J@@@@@@@3нммннннн@@@@@@@ఐ&vb_pat(?(E@ɰ@@@@@@ఐw*expression(G(Q@w@@@x@@@"x @@@!@@ )@@ఐ'vb_expr(R(Y@@@x'@@@2X@8X@7=@@ఐ"m'(Z(\@G@@@@@6X@:X@9S@@(F7@@@@@@;X@5\@@u?@@`]@@@@a@.AA@vT@?H@A@E@ఐ$list*ak+ao@@@@@@@@vS@E@@@G@@F@v @@@De@@@C@@B@@A3?>>?????@@@@@@@ఐ+binding_envOapPa{@ @@@$@@@q@)@@@p@@@o@@n@@m@@ఐ](bindingsia|ja@5@@B@@@\T@}T@{2@@ఐT$mode~aa@/@@B@&@bT@T@~G@@` @@+H@ @@.'@Ġ)Recursiveѕі@;)Recursive@@@AB@@A ` `@@@J@@@  @@@@@,@@@@@/@@@@ఠ+binding_env:ѯuѰu@A@@@ˉ@@@T@@Q@@@{T@x@|Ԡv@@@}@@@|T@y@@zT@@@T@;@࣠@{FAঠ&vb_patuu@ఠ#x_i<uu@A@@@@@3@Eu@@@@'vb_expruu@ఠ#e_i=uu@A@@@@@@@A u u@@VV@ @@@@@ఠ'mbody_i>@4A@@wF@@@V@3!  !!!!!@7C<@=@>)"@#@$@@@ఐwj'pattern23@wn@@@wn@@@V@@@@@wo@@@wl@@@@@@@&@@ఐl#x_iTU@/@@K@@5@@ఐ)bound_envcd@@@w@@@W@W@I@@< @@MJ@A@o @@@ఠ)rhs_env_i?z { %@ғA@@7@@@V@3҂ҁҁ҂҂҂҂҂@bpi@j@k@@@ఐy*expressionґ (Ғ 2@yN@@@y@@@y@@@@@@@ఐ#e_iҦ 3ҧ 6@@@y@@@W@W@+@@డ'compose$Mode 8 <@  = D@@@@@@@@@@@@@@@@@@@P@@ఐ$mode E I@@@@@@X@X@d@@ఐؠ'mbody_i J Q@n@@x@@@t@@ 7 R@@@@@X@@@t @@@A@  @@@ఠ,mutual_modes@@*A@@~ xA@@@JV@0@@@=V@3@@@@@@@ఠ'mdef_ijA-.@FA@@@@@@W@xa@@@W@@@W@@࣠@}jDAঠ&vb_patMN@Hఠ#x_jCUV@nA@@M@@@3YXXYYYYY@=4`a@@@@@Acd@@0Y@ @@@@ఐx'patternrs@x@@@x@@@X@@@@@x@@@x@@@@@@@3ӇӆӆӇӇӇӇӇ@/;4@5@6@@@@ఐB#x_jӗӘ@ @@@@@@ఐ,)rhs_env_iӦF@G@@x@@@Y@)Y@(%@@>O@@t&@NPA@W@+W@A@T@డ*$List#map@ @@~@@@@͞@@@KV@2@@3@~ @@@1~@@@/@@.@@-3@@@@@@@ఐ'mdef_ij@ @@@ͽ@@@Hy@@@G@@F@@ఐ(bindings @ɰ@@;@@@>W@NW@L-@@I @@.@ @@@A@ @@@ఠ%env_iE*:*?@/A@@@@@`V@O3@ @@@@@ఐ.remove_patlist+*B,*P@Ű@@@͠@@@iV@V@@@U@@@T@@@@S@@R@@Q%@@ఐ.all_bound_patsN*QO*_@Q@@ߠ%@@@b@@@aW@eW@c>@@ఐ)rhs_env_ig*`h*i@G@@RW@wW@vO@@D@@SP@A@p*6 @@@ఐf%env_i|}@e@f@g@@3}||}}}}}@bp@@@@ఐz,mutual_modesԋԌ@l@@@@ԏ@@@Р@@@~@'@@x@@@x@@@ @+@@ v@A@T@@A@@@@ఠ#envGԫԬ@A@@w C@@@T@@@@T@3ԷԶԶԷԷԷԷԷ@W @ @ @@@@ఠ$mdefH@A@@w٠y@@@@@@T@@@@T@@@.@@@.@@@%@డV$List%split@ @@w@@@w@I@1@@@@@@xS@@@@w?@@@@@@@T@@డӈ$List#map@ "#@@B@@@@@@@U@@@m@@U@U@U@@@@K@@@J@@@@@@@@@ఐ+binding_envOP@@@@$@@@@@@@@iz@@@@@@@@@@@@ఐe(bindingsqr@=@@Q@@@V@V@@@}~@@xNQ@@@U@V@@@ @@@ߠ@@@U@@A@Ց@@Aఠ2transitive_closureI՜ ՝ .@յA@@@|7@@@U@x@@@T@ψA@@@@@@T@@@3յմմյյյյյ@ @@@@@@@࣠@#envJA / 2@A@@*3@6@1%@@U@@4@5@@@@  @@@ఠ/transitive_depsK5E5T@A@@@v@@@V@@ʠ@@@,Z@@@@V@@@@V@@@V@@@V@3@7Cc@:@;@@@࣠@%env_iMA5U5Z@)A@@-3@:5A@@@@@  @@&mdef_iNA$5[%5a@=A@@83%$$%%%%%@!D@@@@@@@@డ$join#Env:;@ >?@@}@@@@@@@@@@@@@@@@@3LKKLLLLL@(4b@+@,@@@@ఐO%env_i\]@4@@x@@డC)join_list#Envop@ st@@ʰ@@@> @@@@@@ @@@@@4@@డ$List$map2֓֔@ ֗֘@@@@!a@&v@!b@&t!c@&r@@'@@'@@@@'@Ѝ@@@' @@@'@@'@@'@@'@hi@@g`@0+@@@@@%T@hT@+Z@b@@@Z@0Z@*Z@@@ @@@@@@@+@@@4@@@@@@@@@@@డ'compose#Env@ @@@@@@S@@@@S@@@S@@S@@S@@@@@@@'@@@@&@@@%@@$@@#@@ఐ&mdef_i#$@԰@@6@@ఐk#env01@.@@@@45@@h@@@Z@/[@@@?'@@@@@@1Z@@@/@@I@90A@fV@57@A@4@@ఠ$env'OUV@nA@@@@@eV@<@@@QV@63a``aaaaa@c@@@@@డ$List$map2tu @ x!y%@@@@@@V@@@|@@@lV@g@@@fV@>1@@B@@A@@@@?@@@@=@@@@;@@:@@9@@8;@@ఐʠ/transitive_depsש&ת5@E@@@;@@@b@@@@a@@@`G@@@_@@^@@]Y@@ఐ#env69@Ű@@(f@@ఐ$mdef:>@@@&Z@@@RW@mW@j{@@l @@|@A@ @@డ[$List(for_all2BQBU@ BVB^@@@@!a@&9@!b@&7@@@(@@(@@(@i@@@(@@@@( @@@( @@( @@( @@( @%%%%@@f@0+@@@@}@@@@U@v%@@@{@@z@@y@@@@w@$@@@u#@@@t@@s@@r@@q3;::;;;;;@@@@@@@డ#%equal#EnvOB_PBb@ SBcTBh@@@@@@S)@@@@S(A@@@S'@@S&@@S%@@@=@@@@@@@@@@O@@@@@@@4@@ఐ#env|Bi}Bl@z@@A@@ఐ4$env'؉Bm؊Bq@K@@}l@@@V@V@V@@ @@ȵ@@@V@\@ఐL$env'ءrآr@c@@f@ఐ2transitive_closureخد@@@@@@u@@ఐh$env'ؽؾ@@@T@@@@@@BN@@@@@b@ @@@ A@@*@@T@@@@ @@@ఠ&env'_iP@A@@.n@@@@@@T@3@@@@ఐS2transitive_closure@#@@@P@@@@@@K@@@@@@@@@@ఐa#env  @S@@o@@@@@@U@U@5@@,@@=6@A@@@డ)join_list#Env*+@ ./@@@@@@@@@@@@@@@@3;::;;;;;@sle@f@g@@@@ఐs&env'_iKL @ @@@@@@@@T@T@@@0@@ T@@A@@x@@@@@@@m@@  @@@Aa@@  @A@c@@డE$join#Envqr@ uv@@@@@@@@@ @@@@@@@@@@3كققككككك@ # 3 ,@ -@ .@@@@ఐ :,bindings_envٓٔ*@ @@'@@@Q@Q@@@ఐ )outer_env٧+٨4@ C@@;@@@Q@Q@+@@A @@@@@Q@1@U@@ T@ k@@ @ @@ J@ٻ@б@г B "@ @@@  @б@г   г   G  @ @@@  @@ Ơ@@@   @гV  @@@@   @@@@   @@$@@   @/BA@@@n@@@*@lk@@@)@@@(h@@@'@@&@@%L@ @@@W@iiDC@BEШc@б@гn)Typedtree  @u  @@А!k{@\h3@E@@$ % @@@ @@@\j@@б@г$mode3 4 @@@@@\k@@В@г#EnvE F @I J @@@@@@\l- @@@г$modeX  Y @@@@@\m;@@@@@ @@\nB  @@@2 @@\oE5@@@D@@\pHG@@N@@\qLo A@A@@@֠X@]:@@@]A@@@@]@@@@@]>@@@@]?@@]=@@]<@@];@@]9j@࣠@WAঠ)Typedtreeڜ ڝ #@%c_lhsڡ $ڢ )@A3%c_lhs@!k@@@@ H@@@ @@@3&c_contX!t@@@ @@@ @@A@A6--6--@@.@3'c_guard i@@@ @@@ @@B@A)7--*7--@@<@3%c_rhs.@@@ @@C%@A28--38-. @@E@@A65--75--@@I@ఠCQDHB@A@G@¦L@hO@>@@@A3@@@@'c_guard + 2A4ఠR@A@8@@@H@@@G@%c_rhs  4  9A;ఠS@)A@@@@M'@@@  ;@@z2L@+@@@P/@@@@@ఠ$judgT*+@CA@@&@@@oN@Z30//00000@VS@U@T>;@=@<*'@)@(@@@ఐ.$joinC D@q@@@GF@@@_@@@^E@@@]@@\@@ภyZ[^eAఐC"<<f4g6@հ@@@_@@@@^@@@[@@@@@@@C@@ఐ&option(ۂ @*@@@@@@@R@x@@@@@@k @@@Z@@@@@@@f@@ఐ*expressionۣ!ۤ+@`@@@@@@@@@@@{@@ఐ'c_guard۸,۹3@@@:@@@S@S@@@j @@@@@@@ภ+Dereference7B@y8@@@@@@@@}@@@@@@ภyDLAఐ*expression DV@ @@@@@@ @@@@@@@ఐ점%c_rhsDWD\@Ȱ@@3@@@Q@Q@@@* @@1@@@ @ภx^dAј@A@x@@@@@@O@/@@?A@ۂ@@@y@@@zO@@@)@@+*@@@q@@@pO@x@@@@@A@5@@࣠@!mUAAirBis@ZA@@@@@@3EDDEEEEE@$@@@@@@  @@@ఠ#envVWwXw@pA@@@@@VO@F3_^^_____@*@@@?@$@%@@@ఐG$judgqwrw@)@@j@@@H@@ఐC!m܁w܂w@@@@@@X%@@@@+&@A@܉w~@@@ఐ;*remove_patܗܘ@ @@@6@@@g@/@@@f2@@@e@@d@@c3ܥܤܤܥܥܥܥܥ@GWP@Q@R@@@@ఐР%c_lhsܵܶ@@@R@@@y@@ఐo#env@@@Z@@@sO@ˆO@‡(@@@@!@@@‰O@r0@@డ 'compose$Mode@ @@@@@@@@@@@@Ž@@@@@Œ@@‹T@@ఐȠ!m@@@]@@@œd@@ఐP'pattern@T@@@T4@@@¥@N@@@¤K@@@£@@¢@@¡@@ఐN%c_lhs34@@@РQ@@@»@@ఐ#envDE@@@v@@@µP@P@@@OP@@v@@@´@@n@@@@@O@™@@ @@@@ @@@@@@cimd@@@@@@@@@@ڠ@@@@@@@@M@0@D@@F@z @@@f@@@@@@@@@@@蠠@@@@@@@@@@L@@@@ݕ 2@ְ֠@Ш@б@г۠ܰݩ@Yݪ@h@А!k@\3ݮݭݭݮݮݮݮݮ@@@ݳ@Wݴ@X@@@ @@@\@@б@г砡#Env@l@o@@p@q@@@@@@\ @@г$mode@u@y@@@@@\)@@@@@\,@@@+@@\/. @@5@@\3@A@@@ =@]C@@@]H@@@@]G@@@]F@@]E@@]D @@]BF@࣠@#patYA@@@A@@Z==XN@@@ @@@ 3        @;@@@A@@@A@@S@T@@@@.A@@@@@@#envZA"@#@@;A@@Q@@@3(''(((((@2('@@@ @@@ @0@1@@@@@@@ఠ%m_pat[A'OUB'OZ@ZA@@d@@@>Q@3GFFGGGGG@ 1'@@@@+@,@@@ఐt8is_destructuring_pattern['O`\'Ox@x@@@x[@@@.Q@!@@@ w@@@@@"@@ఐw#patv'Oyw'O|@K@@s@@@-3@@#@@Ξ@@@@@@(pat_desc33@ɰ@@j@g@@iP@j@Ġ(Tpat_any)4*4@;(Tpat_any˶@@@ @@@ @@@@ALAAܐO  ܑO  @@@ܣi@@@@@nj]@@@x@@@w3>==>>>>>@4@a;@@@Aܵ@@@v@@APW@@@aA@A@@@ǝn@@@z@@@y@@@ภݚW4X4@ݚ@@@@@@ŧ@Ġ(Tpat_varh5i5@Ǣ@m5n5@@ǝ@@@Ċ3onnooooo@e@;@@@A@@@ĉ@@AP@@@A@A@@@55@@ǨǦ@@@Č@@@ċ@@55@@ǩ@@@č@@@)5@@@@@ď@@@Ď'@ @@@@đ@@@Đ.@@@ภ55@@@@N6@Ġ*Tpat_alias66@;*Tpat_alias?@@@ @@@ @XG@@@ @@@ !t@@@ àۼ#loc@@@ @@@ Ġ!t@@@ Ơ)type_expr@@@ @EAALAA@S y {AU  @@@Sl@ఠ#pat`66 @ A@@}@@@ĥ@@@Ĥ3@@;@@@Aŏ@@@ģ@@AP@@@A@A@@@6  6 @@D@@@Ħ@@66@@EC@@@Ĩ@@@ħ@@66@@F@@@ĩ&@@$6%6@@H@@@Ī.@@@x*6@@}N@@@Ĭ@@@ī7@ @ȄU@@@Į@@@ĭ>@@@ఐ[8is_destructuring_patternB6C63@_@@@_@@@Q@Ŷ@@@ŵ^@@@Ŵ@@ų3POOPPPPP@Gib@c@dZ@@@ఐp#pat`64a67@ @@@@@@@&@@@Ġ-Tpat_constantr78>s78K@;-Tpat_constantȠ@@@ @@@ @m(constant@@@ @ABALAAW  W  ;@@@m@@78L78M@@@@@Ļ3@@;@@@A@@@ĺ@@AP@@@A@A@@@@)@@@@@Ľ@@@ļ@@@@@Ŀ@@@ľ@@@ภ 78Q78U@ @@@W!@Ġ*Tpat_tuple8V\8Vf@;*Tpat_tupleH@@@ @@@ @ @r@@@ @@@ Ϡ@tc@@@ @@@ @@ @@@ @ACALAA>Y k m?Z | @@@Qn@@8Vg8Vh@@%@$#@@@@@@Ӡ@ͅ@@@@@@@@@@@3@@$;@@@Ax͏@@@@@AP@@@$A@A@@@@T$@@a2@@@@@@@@h9@@@@@@@@@ภ߁"8Vl#8Vp@߀@@@!@Ġ.Tpat_construct/9qw09q@;.Tpat_constructɅͼ@@@ @@@ @*#loc*!t@@@ @@@ ՠ7constructor_description@@@ נܒ@@@ @@@ @@@ ؠ@ܧW#locՏ!t@@@ @@@ @@@ ݠ@K@@@ @@ @@@ @DDALAAa  dq@@@o@@9q9q@@JH@@@@@@3@@;@@@A@@@@@AP@@@A@A@@@@P@@@@@@N:)@@@@@@@@@@@(@N@MLJ@@@@@@@@@@L;@@@@@@@@6@@@?@@@@@@@@>@@@@@@@@E@@@ภ59q9q@4@@@M@Ġ,Tpat_variant::@;,Tpat_variant9p@@@ @@@ @%label@@@ ؘ΂@@@ @@@ @@@ &Stdlib#ref((row_desc@@@ @@@ @CEALAAmmPRno@@@߀p@@::@@,@@@3@@>;@@@AߒΩ@@@@@AP4@@@>A@A@@@@5Ǡζ@@@@@@@@@@@@50@@@@@@ @@@\%@@ʑb@@@@@@(@@ʘi@@@@@@/@@@ภ౰R:S:@@@@7@Ġ+Tpat_record_;`;@;+Tpat_recordʵ@@@ @@@ @ݮ@b#locb!t@@@ @@@ @:1label_description@@@ @#@@@ @@@ @@ @@@ ށ+closed_flag@@@ @BFALAAu^`{@@@q@@;;@@6@53@@@3@@@2@0@@@4@P?@@@6@@@5@@1@@@03@@;@@@A2I@@@/@@AP@@@A@A@@@;;@@;@@@7@@@r;@@$@@@9@@@8@ @+@@@;@@@:"@@@ภD;;@C@@@*@Ġ*Tpat_array<<@;*Tpat_arrayH@@@ @@@ @,mutable_flag@@@ Gϑ@@@ @@@ @@@ @BGALAAlm@@@r@@<<@@@@@K3@@=;@@@AϨ@@@J@@AP3@@@=A@A@@@@%Ơϵ@@@N@@@M@@@L@@@C@@ˇX@@@P@@@O@@ˎ_@@@R@@@Q&@@@ภ᧰H<I<@@@@.@Ġ)Tpat_lazyU=V=@;)Tpat_lazy˫@@@ @@@ @@@@ @@@ @AHALAAJ@@@s@@p=q=@@ @@@a@@@`3vuuvvvvv@l@;@@@A@@@_@@AP@@@A@A@@@@/@@֠@@@c@@@b@@ݠ@@@e@@@d@@@ภ==@@@@@!@Ġ*Tpat_value> >@;*Tpat_value@@@@ @@@ @3tpat_value_argument@@@ @AIALAA~~@@@$t@ఠ#pata>>@A@@@@@r3@@;@@@A<b@@@q@@AP@@@A@A@@@@/@@%@@@t@@@s@@,@@@v@@@u@@@ఐ8is_destructuring_pattern>>3@@@@z@@@0Q@@@@@@@@@3@B;@<@=7@@@ఐI#pat >5 >8@ @@гd'pattern><>C@@ @@@ @@>4>D@@@@*@ %@@9@@&@Ġ.Tpat_exception-?EK.?EY@;.Tpat_exceptioñ@@@ @@@ @Ӡ@@@ @@@ @AJALAA$&$j@@@u@@H?EZI?E[@@@@@Ņ@@@ń3NMMNNNNN@D@q;@@@A@@@Ń@@APg@@@qA@A@@@@/@@̮@@@Ň@@@ņ@@̵@@@ʼn@@@ň@@@ภⲰo?E_p?Ed@@@@!@Ġ'Tpat_or|@ek}@er@;'Tpat_orҠ!k@ n@@@ @# @@@ (@@@ 6ߵ(row_desc@@@ @@@ @CKALAA@@@ v@ఠ!lb@et@eu@A@@H@@@ř@@@Ř@ఠ!rc@ev@ew@A@@Z@@@ś@@@Ś@@@ex@ey@@98@@@ŝ@@@Ŝ@@@X@ez@@'@@@ş@@@Ş@ @.@@@š@@@Š@@@డY"||A~A~@@›@@@P@¡@@@O¥@@@N@@M@@L'%sequorBAΪ@@@@ΪΫ@@Ω^@@@@@@@O@@@@N@@@M@@L@@K3@ sl@m@nb[@\@]@@@@ఐ@8is_destructuring_pattern'A~(A~@D@@@DQ@@@mR@`@@@_C@@@^@@]"@@ఐ!lBA~CA~@+@@ߠ@@@l3@@#@@]@@@[@{S@f;@@ఐv8is_destructuring_pattern]A~^A~@z@@@z@@@ƍR@ƀ@@@y@@@~@@}X@@ఐ!rxA~yA~@`@@@@@ƌi@@#@@@@@Z@ƛS@Ɔq@@a@@.r@@@A3@@0@@@~3@@@@A@б@гг@@@@@L@@Ƞ@@@N@гN@R@@@O@@ @@P@#@@@͠@E@@@˟@@@˞@@˝L@˘@@@2RRG@@XDH@䠰@ఠ=is_valid_recursive_expressiondCC@A@@@@@@%@@@$L@@@@@̴L@D@@@@@@L@@@L@@@L@3@@@@࣠@&idlistfACC@A@@.3@;CUKu@@@@@  @@$exprgACC@+A@@43@!E@@@@@@@@ఐ$expr&D'D@G@@@@H3'&&'''''@!@@@(exp_desc0D 1D@ᐰ @@@@@ @Ġ-Texp_function@EAE(@֗@EE)FE*@@֙֘@@@@@@3KJJKKKKK@$@@@@ @֘@@@@@@@@@@@ @@@@@ @@@ภ$SomeaGzbGz@Qภ&StaticjGzkGz@m@@@@@@P@'$@@@@@@@@@@,@@HH@@@@@[@@@@@^@@@@ఠ%rkindhII@A@@!@@@8Q@*M@ఐ"3classify_expressionII@װ@@@8@@@.5@@@-@@,a@@ఐ$exprII@@@n@@@@%o@A@I@@@ఠ(is_validiJJ@A@@y@@@Q@;3@F?@@@A@@@ఐL%rkindKK@ @@j@@@=3@@@@Ġ&StaticLL@@@@@{@@@E3@#@@@@@@@F@@@@ఠ"tyjN<IN<K@A@@@@@hT@Q<@ఐ3*expressionN<NN<X@԰@@@I@@@UF@@@T@@SP@@ఐ$expr,N<Y-N<]@@@M]@@ภ&Return8N<^9N<d@w@@@X@@@pl@@(@@6m@A@@N<E@@డ!=JOhKOh@@@@@@@̔@@@̓S@w@ @@@v@@u@@t3[ZZ[[[[[@aZ@[@\@@@@డE)unguarded#EnvqOhqrOht@ uOhuvOh~@@@@@@R@ @@@R@@@R7@@@R@@@R@@R@@R@@@@@@@̇@٠@@@̆@@@̅ՠM@@@̄@@@̃@@̂@@́G@@ఐ"tyOhOh@Q@@C@@@̗U@̙U@̘[@@ఐȠ&idlistOhOh@@@h@@V@@vi@@ภaOhOh@U@@@S@̟v@@d@@w@@@ @Ġ'DynamicPP@@@@@l@@@N@@o@@@O@@@@ఠ"tykRR@ A@@@@@̷T@̠ @ఐ#*expressionRR@İ@@@9@@@̤6@@@̣@@̢@@ఐ $exprRR@@@=*@@ภ&Return(R)R@x@@@H@@@̿9@@(@@6:@A@0R@@డ"&&:S#;S%@@@@@K@@@@J@@@I@@H@@G(%sequandBA@@@@@@]@@@@@@@@@@@@@@@@@@3a``aaaaa@wp@q@r@@@@డ)+rSsS@'@@@(@@@@@@T@@ ,@@@@@@@!@@డi)unguarded#EnvSS @ S S@@$@@@,@@@@$@@@@@@Z@@@@@@@@@@N@@ఐɠ"tySS@X@@P@@@V@V@b@@ఐՠ&idlistSS@@@o@@?@@[p@@ภnS S"@b@@@hT@}@@M@@@@@@U@@@డbS>S?@Ʃ@@@@@@#@@@"T@@ Ư@@@@@@@@@డ)dependent#EnvS&S)@ S*S3@@@@@@S@4Q@@@S@@@S03@@@S@@@S@@R@@R@,)@@@@@@@Jg@@@@@@FI@@@@@@@@@@@@ఐb"tyUS4VS6@@@@@@&V@(V@'@@ఐn&idlistiS7jS=@S@@@@U@@r @@ภuS@vSB@@@@T@.@@c@@:@@@@/U@@@ @@T@!@V@@@@@AK@@@A@J@@ఐʠ(is_validUKSUK[@@@˰@@۷@@@7P@63@ @@@ภ$SomeUKaUKe@ఐ%rkindUKfUKk@ܰ@@@@@>P@BP@A@@ @@ܠ@@@=!@ภ$NoneUKq@@@@P@H,@UKP@@.@B@@@@@Y~@@@AD@г蠐&optionCC@г"sdCC@@@@@ @@@@@A@L@S@A@@@@ఠ3is_valid_class_exprlaRVaRi@ A@@@?}@@@Ұ@@@үL@U@^*class_expr@@@L@Zm@@@L@[@@\L@V@@WL@T3@OH@I@J@@@࣠@&idlistnA#aRj$aRp@<A@@,3$##$$$$$@9+aRR,@@@@@  @@"ceoA7aRq8aRs@PA@@3387788888@!C@@@@@@@@A@HbvIbv@@@÷@@@s@H@@@r4!t@@@q@@p@@o3XWWXXXXX@!-V@$@%@@@*class_exprp@yA@@@@n@`@@@m@@@l@@k@@j)б@г)$mode{bv|bv@@1@@@`%@@б@гy)Typedtreebvbv@bvbv@@@@@@a: @@гA#Envbvbv@Hbvbv@@@P@@@bM @@@@@cP! @@@1@@dS4 @@hgA@@@f@@@}@@@@|e@@@{@@z@@yb@࣠@$modeqAcc@A@@7@@@͏3@vt@@q@@@@  @@"cerAcc@A@@5@@@͚3@'@@@͎@!@"@@@@@@ఐ"cecc@@@@͙@@ @@W@@@͢@͠3@ 1 @@@'cl_desc c c@(@@(@@@͡ @Ġ)Tcl_identdd@(@ d!d@@(@@@ͫ3"!!"""""@ @@@@)d*d@@((@@@ͭ@@@ͬ @@5d6d@@(U@@@ͯ@@@ͮ@@@$?d@@)$@@@Ͱ@@)'@@@ͱ!@@@డ%%empty#EnvQi=ERi=H@ Ui=IVi=N@@Z@@8@@@9@Ġ-Tcl_structurehjOWijOd@(F@mjOenjOf@@K@@@ͶM@@@ @@)W@@@ͷQ@@)Z@@@͸T@@@డX%empty#Envoo@ oo@@@@3g@Ġ'Tcl_funpp@(@pp@@(@@@{@@pp@@ԙ@@@@@pp@@(#@("@@@Ƞ@@@@@@@@@@@pp@@X@@@@@pp@@H@@@@@@8p@@)@@@@@)@@@@@@డĴ%empty#Envpp@ pp@@@@@Ġ)Tcl_applyuemuev@&ܠ@uexuey@@X@@@@@ue{ue|@@&@&@@@٠@@@@@@@@@@@@ ue}@@)@@@@@)@@@@@@డ%empty#Env$ue%ue@ (ue)ue@@-@@@Ġ'Tcl_let6v7v@$ఠ(rec_flags?v@v@XA@@$@@@3CBBCCCCC@A@@@ఠ(bindingstNvOv@gA@@$%@@@@@@@@\v]v@@$@$@@@@f@@@@@@@@(@ఠ"ceuuvvv@A@@Y?@@@6@@@G}v@@*b@@@;@@*e@@@>@@@ఐ.value_bindingsww@@@@@@@%@@@@$@@@# @@@"@@!@@ 3@jc@d@e\U@V@W6/@0@1@@@@ఐs(rec_flagww@@@9@@@AT@IT@H@@ఐx(bindingsww@"@@FE@@@@@@@?T@LT@J3@@ఐ$modeww@@@@@@NC@@ఐ*class_exprww@ @@@@@@W@@@@V@@@U@@T@@S_@@ఐE$mode w w@$@@@@@cU@gU@fs@@ఐ"ceww@y@@@@@bU@iU@h@@)w*w@@@@@F@jU@a@@ @@@Ġ.Tcl_constraint?x@x@$ఠ"cevHxIx@aA@@Z@@@3LKKLLLLL@J@@@@SxTx@@$$@@@@@@ @@_x`x@@$$@@@@@@@@kxlx @@$$@@@@@@%@@wx"xx#@@$@@@-@@@>}x$@@+b@@@2@@+e@@@5@@@ఐ+*class_expry(0y(:@@@@F@@@q@@@@pE@@@o@@n@@m3@[T@U@V@@@@ఐ堐$modey(;y(?@İ@@e@@@}T@΁T@΀@@ఐv"cey(@y(B@!@@@@@|T@΃T@΂+@@< @@p,@Ġ(Tcl_openzCKzCS@$h@zCUzCV@@$j@@@ @ఠ"cewzCXzCZ@A@@Z@@@ @@@zC[@@+@@@@@+@@@@@@ఐ*class_expr{_g{_q@,@@@@@@Ί@@@@Ή@@@Έ@@·@@Ά3      @.'@(@)@@@@ఐT$mode{_r{_v@3@@@@@ΖT@ΚT@Ι@@ఐI"ce-{_w.{_y@!@@*@@@ΕT@ΜT@Λ+@@< @@,@@@A9c @@@@@|@>c@б@гx@|@@@~{@б@гlɠF@s@@@@г@@@@̀@@@@́@@@@͂@(8A@@@@@@Ҙ@e@@@җ@@@Җ@@ҕ@@ҔO@ҏ@@@vbvxI@@డZ)unguarded#Env}}@ }}@@@@@@@@ҡ@נ@@@Ҡ@@@ҟӠK@@@Ҟ@@@ҝ@@Ҝ@@қ3@@@@@ఐN*class_expr}}@@@@i@@@ҷ@@@@Ҷh@@@ҵ@@Ҵ@@ҳ@@ภ&Return}}@@@@@@@Q@.@@ఐ"ce}}@@@;@@}}@@r@@@ұ@Q@E@@ఐҠ&idlist}}@@@R@@p@@-@@@Ү@@@ҭZ@Ġ~~@@@@@@@@@@@@m@@G@@@@@@t@@@ภ{~~@z@@@|@Ġ()@Ƞ@-.@@@@@@@56@@@@@@@@@@@ @@v@@@@@@@@}@@@@@@@@@ภ핰R'@@(@@D@@@AU}*@@F@+@@G@5,A@aL@3@A@0@0/@F@mgA@%Q@R@Δ@ΐ@@Ί@@A@E@5@?@@@@82A@A@~@@@ @ m@n@c@d@@B@CA@0.@@ @@@@@@@@sq@LJ@;9@*(@  @@@ @@@@@3@@@@/Value_rec_checkD@@ C@@@@ߠ@@A@*l@@N@栰@@J@g@TAtA@A4w@@@ H************************************************************************A@@A@L@ H BMMBM@ H OCaml CC@ H DD3@ H Jeremy Yallop, University of Cambridge E44E4@ H Gabriel Scherer, Project Parsifal, INRIA Saclay FF@ H Alban Reynaud, ENS Lyon GG@ H HHg@ H Copyright 2017 Jeremy Yallop  IhhIh@ H Copyright 2018 Alban Reynaud JJ@ H Copyright 2018 INRIA KKN@ H LOO LO@ H All rights reserved. This file is distributed under the terms of %M&M@ H the GNU Lesser General Public License version 2.1, with the +N,N5@ H special exception on linking described in the file LICENSE. 1O662O6@ H 7P8P@ H************************************************************************=Q>Q@ * Static checking of recursive declarations, as described in A practical mode system for recursive definitions Alban Reynaud, Gabriel Scherer and Jeremy Yallop POPL 2021 Some recursive definitions are meaningful {[ let rec factorial = function 0 -> 1 | n -> n * factorial (n - 1) let rec infinite_list = 0 :: infinite_list ]} but some other are meaningless {[ let rec x = x let rec x = x+1 ]} Intuitively, a recursive definition makes sense when the body of the definition can be evaluated without fully knowing what the recursive name is yet. In the [factorial] example, the name [factorial] refers to a function, evaluating the function definition [function ...] can be done immediately and will not force a recursive call to [factorial] -- this will only happen later, when [factorial] is called with an argument. In the [infinite_list] example, we can evaluate [0 :: infinite_list] without knowing the full content of [infinite_list], but with just its address. This is a case of productive/guarded recursion. On the contrary, [let rec x = x] is unguarded recursion (the meaning is undetermined), and [let rec x = x+1] would need the value of [x] while evaluating its definition [x+1]. This file implements a static check to decide which definitions are known to be meaningful, and which may be meaningless. In the general case, we handle a set of mutually-recursive definitions {[ let rec x1 = e1 and x2 = e2 ... and xn = en ]} Our check (see function [is_valid_recursive_expression] is defined using two criteria: Usage of recursive variables: how does each of the [e1 .. en] use the recursive variables [x1 .. xn]? Static or dynamic size: for which of the [ei] can we compute the in-memory size of the value without evaluating [ei] (so that we can pre-allocate it, and thus know its final address before evaluation). The "static or dynamic size" is decided by the classify_* functions below. The "variable usage" question is decided by a static analysis looking very much like a type system. The idea is to assign "access modes" to variables, where an "access mode" [m] is defined as either m ::= Ignore (* the value is not used at all *) | Delay (* the value is not needed at definition time *) | Guard (* the value is stored under a data constructor *) | Return (* the value result is directly returned *) | Dereference (* full access and inspection of the value *) The access modes of an expression [e] are represented by a "context" [G], which is simply a mapping from variables (the variables used in [e]) to access modes. The core notion of the static check is a type-system-like judgment of the form [G |- e : m], which can be interpreted as meaning either of: - If we are allowed to use the variables of [e] at the modes in [G] (but not more), then it is safe to use [e] at the mode [m]. - If we want to use [e] at the mode [m], then its variables are used at the modes in [G]. In practice, for a given expression [e], our implementation takes the desired mode of use [m] as *input*, and returns a context [G] as *output*, which is (uniquely determined as) the most permissive choice of modes [G] for the variables of [e] such that [G |- e : m] holds. C=* {1 Static or dynamic size} ^ X See the note on abstracted arguments in the documentation for Typedtree.Texp_apply Ix66Jyw@ p We need to keep track of the size of expressions bound by local declarations, to be able to predict the size of variables. Compare: let rec r = let y = fun () -> r () in y and let rec r = let y = if Random.bool () then ignore else fun () -> r () in y In both cases the final address of `r` must be known before `y` is compiled, and this is only possible if `r` has a statically-known size. The first definition can be allowed (`y` has a statically-known size) but the second one is unsound (`y` has no statically-known size). O@BP@< binding and variable cases UV @3 non-binding cases [\@< Unit-returning expressions ab@ 8 The code below was copied (in part) from translcore.ml gouho@ m A constant expr (of type <> float if [Config.flat_float_array] is true) gets compiled as itself. m nX@0 Forward blocks st@ 8 other cases compile to a lazy block holding a function yzzz@  We use a non-recursive classification, classifying each binding with respect to the old environment (before all definitions), even if the bindings are recursive. Note: computing a fixpoint in some way would be more precise, as the following could be allowed: let rec topdef = let rec x = y and y = fun () -> topdef () in x  !!@ = Note: we don't try to compute any size for complex patterns """"@  an identifier will be missing from the map if either: - it is a non-local identifier (bound outside the letrec-binding we are analyzing) - or it is bound by a complex (let p = e in ...) local binding - or it is bound within a module (let module M = ... in ...) that we are not traversing for size computation For non-local identifiers it might be reasonable (although not completely clear) to consider them Static (they have already been evaluated), but for the others we must under-approximate with Not_recursive. This could be fixed by a more complete implementation. ##&&@ local modules could have such paths to local definitions; classify_expression could be extend to compute module shapes more precisely '8'@''@ #* {1 Usage of recursive variables} ̠ * For an expression in a program, its "usage mode" represents static information about how the value produced by the expression will be used by the context around it. * * [Ignore] is for subexpressions that are not used at all during the evaluation of the whole program. This is the mode of a variable in an expression in which it does not occur. Ϛ * A [Delay] context can be fully evaluated without evaluating its argument , which will only be needed at a later point of program execution. For example, [fun x -> ?] or [lazy ?] are [Delay] contexts. φ * A [Guard] context returns the value as a member of a data structure, for example a variant constructor or record. The value can safely be defined mutually-recursively with their context, for example in [let rec li = 1 :: li]. When these subexpressions participate in a cyclic definition, this definition is productive/guarded. The [Guard] mode is also used when a value is not dereferenced, it is returned by a sub-expression, but the result of this sub-expression is discarded instead of being returned. For example, the subterm [?] is in a [Guard] context in [let _ = ? in e] and in [?; e]. When these subexpressions participate in a cyclic definition, they cannot create a self-loop. r * A [Return] context returns its value without further inspection. This value cannot be defined mutually-recursively with its context, as there is a risk of self-loop: in [let rec x = y and y = x], the two definitions use a single variable in [Return] context. ^ * A [Dereference] context consumes, inspects and uses the value in arbitrary ways. Such a value must be fully defined at the point of usage, it cannot be defined mutually-recursively with its context. J Lower-ranked modes demand/use less of the variable/expression they qualify -- so they allow more recursive definitions. Ignore < Delay < Guard < Return < Dereference i33m4J4N@ Returns the more conservative (highest-ranking) mode of the two arguments. In judgments we write (m + m') for (join m m'). u44y5N5R@ z If x is used with the mode m in e[x], and e[x] is used with mode m' in e'[e[x]], then x is used with mode m'[m] (our notation for "compose m' m") in e'[e[x]]. Return is neutral for composition: m[Return] = m = Return[m]. Composition is associative and [Ignore] is a zero/annihilator for it: (compose Ignore m) and (compose m Ignore) are both Ignore. }5567@ K* Create an environment with a single identifier used with a given mode. V +* An environment with no used identifiers. > W* Find the mode of an identifier in an environment. The default mode is Ignore.  p* unguarded e l: the list of all identifiers in l that are dereferenced or returned in the environment e. 䠠 Z* dependent e l: the list of all identifiers in l that are used in e (not ignored).  ?* Environments can be joined pointwise (variable per variable) v k* Environment composition m[G] extends mode composition m1[m2] by composing each mode in G pointwise P ,* Remove an identifier from an environment. * @* Remove an identifier from an environment, and return its mode  <* Remove all the identifiers of a list from an environment. ͠ 9* A "t" maps each rec-bound variable to an access status _ V Usage mode judgments. There are two main groups of judgment functions: - Judgments of the form "G |- ... : m" compute the environment G of a subterm ... from its mode m, so the corresponding function has type [... -> Mode.t -> Env.t]. We write [... -> term_judg] in this case. - Judgments of the form "G |- ... : m -| G'" correspond to binding constructs (for example "let x = e" in the term "let x = e in body") that have both an exterior environment G (the environment of the whole term "let x = e in body") and an interior environment G' (the environment at the "in", after the binding construct has introduced new names in scope). For example, let-binding could be given the following rule: G |- e : m + m' ----------------------------------- G+G' |- (let x = e) : m -| x:m', G' Checking the whole term composes this judgment with the "G |- e : m" form for the let body: G |- (let x = e) : m -| G' G' |- body : m ------------------------------- G |- let x = e in body : m To this judgment "G |- e : m -| G'" our implementation gives the type [... -> Mode.t -> Env.t -> Env.t]: it takes the mode and interior environment as inputs, and returns the exterior environment. We write [... -> bind_judg] in this case. AAG&G(@ A judgment [judg] takes a mode from the context as input, and returns an environment. The judgment [judg << m], given a mode [m'] from the context, evaluates [judg] in the composed mode [m'[m]]. 'JDJD)JK@ A binding judgment [binder] expects a mode and an inner environment, and returns an outer environment. [binder >> judg] computes the inner environment as the environment returned by [judg] in the ambient mode. -KK0LWLq@ Expression judgment: G |- e : m where (m) is an input of the code and (G) is an output; in the Prolog mode notation, this is (+G |- -e : -m). 4LL8MrMt@ G |- : m -| G' G' |- body : m ------------------------------- G |- let in body : m >N/N5CNN@ TODO: update comment below for eff_cases (Gi; mi |- pi -> ei : m)^i G |- e : sum(mi)^i ---------------------------------------------- G + sum(Gi)^i |- match e with (pi -> ei)^i : m FO6O<KPP!@ G1 |- low: m[Dereference] G2 |- high: m[Dereference] G3 |- body: m[Guard] --- G1 + G2 + G3 |- for _ = low to high do body done: m VR(R.\RR@ \ G |- c: m[Dereference] ----------------------- G |- new c: m  eSS iT T@ Q G |- e: m[Guard] ------------------ G |- ref e: m oTTsUJUR@  [args] may contain omitted arguments, corresponding to labels in the function's type that were not passed in the actual application. The arguments before the first omitted argument are passed to the function immediately, so they are dereferenced. The arguments after the first omitted one are stored in a closure, so guarded. The function itself is called immediately (dereferenced) if there is at least one argument before the first omitted one. On the other hand, if the first argument is omitted then the function is stored in the closure without being called. vUU~WX)@ * (flat) float arrays unbox their elements \\\\M@ This is counted as a use, because constructing a generic array involves inspecting to decide whether to unbox (PR#6939). !\\"\]@ 3 non-generic, non-float arrays act as constructors ']h]t(]h]@ r G |- e: m[Guard] ------------------ ----------- G |- `A e: m [] |- `A: m -__.`Q`Y@ Gc |- c: m[Dereference] G1 |- e1: m G2 |- e2: m --- Gc + G1 + G2 |- if c then e1 else e2: m Note: `if c then e1 else e2` is treated in the same way as `match c with true -> e1 | false -> e2` 3bb4cc@ 5 G1 |- e1: m[Dereference] G2 |- e2: m[Dereference] --- G1 + G2 |- e1.x <- e2: m Note: e2 is dereferenced in the case of a field assignment to a record of unboxed floats in that case, e2 evaluates to a boxed float and it is unboxed on assignment. 9dd:ee@ G1 |- e1: m[Guard] G2 |- e2: m -------------------- G1 + G2 |- e1; e2: m Note: `e1; e2` is treated in the same way as `let _ = e1 in e2` ?fQfW@g g@ G1 |- cond: m[Dereference] G2 |- body: m[Guard] --------------------------------- G1 + G2 |- while cond do body done: m EggFh#h+@ r G |- e: m[Dereference] ---------------------- (plus weird 'eo' option) G |- e#x: m KhhLii"@ Z G |- e: m[Dereference] ----------------------- G |- e.x: m Q i{iRii@ \ G |- e: m[Dereference] ---------------------- G |- x <- e: m Wj'j-Xjj@ G |- e: m[Dereference] ----------------------- G |- assert e: m Note: `assert e` is treated just as if `assert` was a function. ]kk ^#kk@ K G |- M: m ---------------- G |- module M: m c&kkd*l?lG@ . G |- e: m (Gi; _ |- pi -> ei : m)^i -------------------------------------------- G + sum(Gi)^i |- try e with (pi -> ei)^i : m Contrarily to match, the patterns p do not inspect the value of e, so their mode does not influence the mode of e. i/llj7mm@  G |- pth : m (Gi |- ei : m[Dereference])^i ---------------------------------------------------- G + sum(Gi)^i |- {< (xi = ei)^i >} (at path pth) : m Note: {< .. >} is desugared to a function application, but the function implementation might still use its arguments in a guarded way only -- intuitively it should behave as a constructor. We could possibly refine the arguments' Dereference into Guard here. o?nnpHpp@ G |-{body} b : m[Delay] (Hj |-{def} Pj : m[Delay])^j H := sum(Hj)^j ps := sum(pat(Pj))^j ----------------------------------- G + H - ps |- fun (Pj)^j -> b : m uOqWq]vVr@rH@ param P ::= | ?(pat = expr) | pat Define pat(P) as pat if P = ?(pat = expr) pat if P = pat {Xrerm|_s s@ > Optional argument defaults. G |-{def} P : m dssgss@ h G |- e : m ------------------ G |-{def} ?(p=e) : m ktOtYott@ J ------------------ . |-{def} p : m rtu uuKuW@ } G |- e: m[Delay] ---------------- (modulo some subtle compiler optimizations) G |- lazy e: m vvww @ - ---------- [] |- .: m yyy7y?@ ( Function bodies. G |-{body} b : m yyzz@ G |- e : m ------------------ G |-{body} e : m (**) (**) The "e" here stands for [Tfunction_body] as opposed to [Tfunction_cases]. zXz\{ {@ * (Gi; _ |- pi -> ei : m)^i (**) ------------------ sum(Gi)^i |-{body} function (pi -> ei)^i : m (**) Contrarily to match, the values that are pattern-matched are bound locally, so the pattern modes do not influence the final environment. {M{Q|y|@ These coercions perform a shallow copy of the input module, by creating a new module with fields obtained by accessing the same fields in the input module. K@ a This corresponds to 'external' declarations, and the coercion ignores its argument @ y Alias coercions ignore their arguments, but they evaluate their alias module 'pth' under another coercion. 2<y@. G |- pth : m SSSe@ ------------ x: m |- x: m G |- A: m[Dereference] ----------------------- G |- A.x: m G1 |- A: m[Dereference] G2 |- B: m[Dereference] ------------------------ (as for term application) G1 + G2 |- A(B): m }@9 G |- struct ... end : m @ G1, {x: _, x in vars(G1)} |- item1: G2 + ... + Gn in m G2, {x: _, x in vars(G2)} |- item2: G3 + ... + Gn in m ... Gn, {x: _, x in vars(Gn)} |- itemn: [] in m --- (G1 + ... + Gn) - V |- struct item1 ... itemn end: m %@ N G |- : m -| G' where G is an output and m, G' are inputs *YY+|@ Ge |- e: m[Guard] G |- items: m -| G' --------------------------------- Ge + G |- (e;; items): m -| G' The expression `e` is treated in the same way as let _ = e /*06@ ? ------------------- G |- type t: m -| G CF@< G |- module M = E : m -| G d>>d>^@ GE |- E: m[mM + Guard] ------------------------------------- GE + G |- module M = E : m -| M:mM, G gkJR@ ' G |- let (rec?) (pi = ei)^i : m -| G' ggg@ (Gi, pi:_ |- ei : m[mbody_i])^i (pi : mbody_i -| D)^i ------------------------------------------------------------ Sum(Gi) + (D - (pi)^i) |- let (pi=ei)^i : m -| D @ b (Gi, (xj : mdef_ij)^j |- ei : m[mbody_i])^i (xi : mbody_i -| D)^i G'i = Gi + mdef_ij[G'j] ------------------------------------------------------------------- Sum(G'i) + (D - (pi)^i) |- let rec (xi=ei)^i : m -| D The (mdef_ij)^i,j are a family of modes over two indices: mdef_ij represents the mode of use, within e_i the definition of x_i, of the mutually-recursive variable x_j. The (G'i)^i are defined from the (Gi)^i as a family of equations, whose smallest solution is computed as a least fixpoint. The (Gi)^i are the "immediate" dependencies of each (ei)^i on the outer context (excluding the mutually-defined variables). The (G'i)^i contain the "transitive" dependencies as well: if ei depends on xj, then the dependencies of G'i of xi must contain the dependencies of G'j, composed by the mode mdef_ij of use of xj in ei. For example, consider: let rec z = let rec x = ref y and y = ref z in f x this definition should be rejected as the body [f x] dereferences [x], which can be used to access the yet-unitialized value [z]. This requires realizing that [x] depends on [z] through [y], which requires the transitive closure computation. An earlier version of our check would take only the (Gi)^i instead of the (G'i)^i, which is incorrect and would accept the example above.  @ X [binding_env] takes a binding (x_i = e_i) and computes (Gi, (mdef_ij)^j).   Et@6 Gi, (x_j:mdef_ij)^j  @= (mdef_ij)^j (for a fixed i) VbV@$ Gi !)@3 (Gi, (mdef_ij)^j) #my$m@ + Gi, (mdef_ij)^j => Gi + Sum_j mdef_ij[Gj] )dr*d@ G; m' |- (p -> e) : m with outputs G, m' and input m m' is the mode under which the scrutinee of p (the value matched against p) is placed. /660@ Ge |- e : m Gg |- g : m[Dereference] G := Ge+Gg p : mp -| G ---------------------------------------- G - p; m[mp] |- (p (when g)? -> e) : m 5 ?C6@ e p : m -| G with output m and input G m is the mode under which the scrutinee of p is placed. ;<=?@ mp := | Dereference if p is destructuring | Guard otherwise me := sum{G(x), x in vars(p)} -------------------------------------------- p : (mp + me) -| G A B&JN@ B Fast path: functions can never have invalid recursive references GF.3HF.y@ . The expression has known size or is constant MM NM;@ ! The expression has unknown size SQTQ@  A class declaration may contain let-bindings. If they are recursive, their validity will already be checked by [is_valid_recursive_expression] during type-checking. This function here prevents a different kind of invalid recursion, which is the unsafe creations of objects of this class in the let-binding. For example, {|class a = let x = new a in object ... end|} is forbidden, but {|class a = let x () = new a in object ... end|} is allowed. YWwwZ`OQ@ 3 ---------- [] |- a: m _e`h2<@ M ----------------------- [] |- struct ... end: m ekjrfn@ U --------------------------- [] |- fun x1 ... xn -> C: m kq ltZd@@*./ocamlopt)-nostdlib"-I(./stdlib"-I1otherlibs/dynlink"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&typing"-I%utils"-I'parsing"-I&typing"-I(bytecomp"-I,file_formats"-I&lambda"-I*middle_end"-I2middle_end/closure"-I2middle_end/flambda"-I=middle_end/flambda/base_types"-I'asmcomp"-I&driver"-I(toplevel"-I%tools"-I'runtime"-I1otherlibs/dynlink"-I-otherlibs/str"-I4otherlibs/systhreads"-I.otherlibs/unix"-I8otherlibs/runtime_events2-function-sections"-c F/home/ci/builds/workspace/main/flambda/false/label/ocaml-ubuntu-latest ?>3210/.-,+*)('&%$#"! @@0׋f[){Um 3@@@.0>n{T8cئ5Build_path_prefix_map0z HkGs8CamlinternalFormatBasics0%FU(Q/Tu0CamlinternalLazy0&͂7 Pˆ*Cmi_format0c˯7͗ԩmݠ*Data_types0I'Ue`wq]Ѡ)Debuginfo0PtJ=^w/#Env0zV L{YWI*Format_doc0]mWϓ:Mݠ%Ident0">WA+9*X,Identifiable0 {d\FX'`&Lambda0z1x]&ZT)Load_path0I@18 ~(Location0a7cK_H%9)Longident0s `7mɕc$Misc0ob]6>Vê>+Outcometree0euWS~d栠)Parsetree0Uҩ=p>*%"e$Path0Y2kf֯J._Ϡ)Primitive0²~$xzT෠%Shape0oNՄBH&Stdlib0Lku]8_٠-Stdlib__Array0?3$( Q&.Stdlib__Buffer08APF< t..Stdlib__Digest0l!LHgErζ .Stdlib__Domain0Bj|5s)ڠ.Stdlib__Either0Vy`u~c à.Stdlib__Format0ɢb tLir/Stdlib__Hashtbl0ѱN][/!,Stdlib__Lazy0* -S$.)"0D.Stdlib__Lexing0e<.V ,Stdlib__List0MYm 7R+Stdlib__Map0L5xE|O0~,J-.Stdlib__Result06 ]/J+Stdlib__Seq0nwzG&amg+Stdlib__Set0\$;7 .Stdlib__String0s.Type_immediacy0A^abOhՠ0@@G!@@@$[$ev֑@.I@@p]@KU@@77$@II )@=>i@@@@@@@@Hm|m ,ґ@@@>@H=ͅY@bְMő@qKqUCMљѣ@@##!@@ku@nyn@r|@8b@uۑu@@fְ/9@@@@@yR;JT~@XXͺ͊H@E%E/@t@ t ~esӊ@,60p0z8Bq@ͣ@fp@*<ő<ϰE%E/@@#t#~@@@@~@@‘@@(,(6@q&_@hr@@CCo8oB@""@p~p@EO''#,R@"+@@@R\@@:R:\=߰{v܀'1@@66@ {х@2@!@@ ܑ @h@ͅ͏@x@UӰ@ k ֑Fj30@@BbQ@&Ñ&@z#6@ ڑ OPޓo@@@@@U_(@  cm@J˰ӭP@''@ϑٰk#k-@@P@ @ @@@A@@=@@@B@@