Caml1999T037,aPC2Value_rec_compiler*ocaml.text&_none_@@A . Compilation of generic recursive definitions @@=@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@@ K The surface language allows a wide range of recursive definitions, but Lambda only allows syntactic functions in recursive bindings. This file implements the translation from generic definitions to Lambda. The first step occurs during typechecking, in [Value_rec_check]: [Dynamic] bindings need to be compiled as normal let bindings. This file mostly deals with the [Static] bindings. The three phases in this module are the following: - Sizing: we first classify the definitions by their size, which determines the compilation strategy for each binding. - Function lifting: we then apply a transformation from general function definitions to syntactic functions accepted by [Lletrec]. Examples: {[ let rec f x = f x (* Syntactic *) let rec f = fun x -> f x (* Syntactic *) let rec f = let g x = f x in g (* Not syntactic *) let rec f = let a = ... in (fun x -> f x) (* Not syntactic *) ]} - Compilation: we finally combine all of this to produce a Lambda term for the recursive bindings. Qjmo@@@@@@Р&Lambda&Lambdalqvlq|@@ 3@@@@@A3@@@lqq@@ @̐ ( Allocation and backpatching primitives n~~n~@@@@@@3@@@@ఠ*alloc_primgpp@BA@@)Primitive+description@@@ A@ V@డ)Primitive&simple)Primitiveqq@ qq@@$name&stringQ@@@ @@ %arity#intA@@@ @@ %alloc$boolE@@@ @@ C@@@ @@ @@ @@ @4typing/primitive.mlif**jeu@@FP@50@@-+@@@ @@ (&@@@ @@ #!@@@ @@ a@@@ @@ @@ @@ v@E0caml_alloc_dummyIqJq@@LqMq@@P@@@ B@ !B@ @MA\q]q@@T@@@ B@ #B@ "@Qภ$truenqoq@;-@@@M@@@AB@@A@@ @ @@_@@@ B@ '@@@@@A@~p@@@@ఠ7alloc_float_record_primvs  s  @CA@@@@@ DA@ (3@@@@@@డ&simple)Primitivet  t  )@ t  *t  0@@@@@@@ 3@@ 2@@@ 1@@ 0@@@ /@@ .@@@ -@@ ,@@ +@@ *0@Ȑ6caml_alloc_dummy_floatt  8t  N@@t  7t  O@@@@@ JB@ LB@ KD@АAt  Wt  X@@@@@ HB@ NB@ MT@Ԑภt  `t  d@@@@@@@ FB@ Rd@@U@@he@A@s   @@ @h@ఠ/alloc_lazy_primwv f jv f y@ DA@@0@@@ oA@ S3        @}@@@@@డ.&simple)Primitive w | ~!w | @ $w | %w | @@,@@,*@@@ ^@@ ]'%@@@ \@@ [" @@@ Z@@ Y`@@@ X@@ W@@ V@@ U0@D5caml_alloc_dummy_lazyHw | Iw | @@Kw | Lw | @@O@@@ uB@ wB@ vD@LA[w | \w | @@S@@@ sB@ yB@ xT@Pภlw | mw | @@@@W@@@ qB@ }d@@U@@he@A@vv f f @@ @h@ఠ+update_primxy  y  @EA@@@@@ A@ ~3@}@@@@@డ&simple)Primitive{  {  %@ {  &{  ,@@@@@@@ @@ @@@ @@ @@@ @@ @@@ @@ @@ @@ 0@1caml_update_dummy{  4{  E@@{  3{  F@@@@@ B@ B@ D@ȐB{  N{  O@@@@@ B@ B@ T@̐ภ{{  W{  [@z@@@@@@ B@ d@@U@@he@A@y   @@ @h@ఠ0update_lazy_primy} ] a} ] q@FA@@(@@@ A@ 3@}@@@@@డ&&simple)Primitive~ t v~ t @ ~ t ~ t @@$@@$"@@@ @@ @@@ @@ @@@ @@ X@@@ @@ @@ @@ 0@<6caml_update_dummy_lazy@~ t A~ t @@C~ t D~ t @@G@@@ B@ B@ D@DBS~ t T~ t @@K@@@ B@ B@ T@Hภd~ t e~ t @@@@O@@@ B@ d@@U@@he@A@n} ] ] @@ @h- {1. Sizing} A  A  @@@@@@3~}}~~~~~@z@@@@A+*block_sizezAD  D  @@;@@-Regular_block{q@@@ @@E  E  @@HA,Float_record|@@@ @@F  F  '@@IA*Lazy_block}@@G ( *G ( 6@@JA@@A@@@@@D  @@@@GA@#))E  E  @"@г+#intE  ,@@23@IB;@@@A@@@@@@@@@@1@@@@3@#//F  F  @(@г1#intF  $2@@83@@@@5@#11G ( ,/@.@@@2@@A@.@@.1@dA+$size~BI 8 =I 8 A@@;@@+Unreachable@@J D FJ D S@)ocaml.doc  Non-returning expressions, like [raise exn]. In [Value_rec_check], they would be classified as [Dynamic], but some of those appear during translation to Lambda. For example, in [let rec f = let [| x |] = ... in fun y -> x + y] the inner let binding gets translated to code that raises [Match_failure] for non-matching branches. Tracking [Unreachable] explicitly allows us to recover the size of the only non-raising branch. K T V R  .@@@@@@@!LA(Constant@@S / 1S / ;@ , Constant values. Can be either an integer-like constant ([0], ['a'], [None], the empty list or the unit constructor), or a structured constant (["hello"], [Some 1], ...). Integer constants cannot be pre-allocated, so need their own classification and compilation scheme (See {!Compilation} below). Structured constants could fit into the [Block] category, but we choose to reuse the [constant] classification to avoid sorting through the [Lconst] definitions. It also generates slightly better code. T < > ^?o@@@@@@@8MA(Function@@(_pr)_p|@0 Function definitions. This includes more than just obvious, syntactic function definitions; see {!Function Lifting} for details. 6`}7b@@@@@@@ONA%Block@@@ @@DcEc*@L Allocated values of a fixed size. This corresponds to expressions ending in a single obvious allocation, but also some more complex expressions where the block is bound to an intermediate variable before being returned. Rd+-Sh#@@@@@@@kOA@@A@@@@@VI 8 8@@@@nKA@#gg]J D He@T@@@heodc@cc@@@c@c@#__nS / 3]@N@@@`v^]@]]@@@]@]@#YY_ptW@H@@@ZXW@WW@@@W@W@#SScc@>@гU*block_sizec V@@\3@;@@@A@@@@@K@@@I@@\@@@@^\[@[[@@@[@[@@A@W@@Wh@3@@@A+,binding_sizeCj%*j%6@@;@@@A.Lazy_backtrack!t/lambda_with_envC@@@U@@@V@@@Y@@@@j%%j%a@@@@PA@@Aг.Lazy_backtrackj%Qj%_@j%`@@г /lambda_with_envj%:j%I@@(3@S=;@@@AE@@@@ @@@@)@@@&2;@@@A@@@@@kbbn@@@@QA@@@@г6$sizej%Kj%O@@>@@@N j%9:@@<@+GGkbfkbu@@;@@&lambda@@r&lambda@@@Zlz|lz@@7RA#env@@%Ident#Map!t@@@4@@@65m6m@@NSA@@A@@@@@=@@@:@#%%=lz@@@Ш@г()ElzFlz@@/[@@2@@[^@-@#))Nm@@@Ш@г,%Ident[m\m@2_m`m@@6dmem@ @г9,binding_sizenmom@@A@@@L @@O@@7@@@@A@y@@x@3rqqrrrrr@@@@ఠ,dynamic_sizepp@TA@@@8@@@D@@@@@#D@@@D@3@@@@࣠@%param5AĠ"()pp@;I@@@N@@@@A@@A@@K@@@@"3@1pq@@@@@@@డ$Misc+fatal_error$Miscqq@ qq@@@&stringQ@@@!@@!!a@!@@!@.utils/misc.mliYY@@$Misc@@@@@@@@#@@#YG@#@@#=@@ (letrec: No size found for Static bindingqq@@qD@@*@@@#G@#G@#P@@:L@@Q@ZMA@zD@#T@A@Q@QP@m@ఠ*join_sizes6 |JN|JX@&UA@@@2@@@#D@#@@#@ D@#@@#D@#@@#D@#@@#D@#3$##$$$$$@@@@@@࣠@%size18A5|JY6|J^@NVA@@"365566666@1=|JJ>@@@@@  @@%size29AI|J_J|Jd@bWA@@*3JIIJJJJJ@!9@@@@@@@@@ఐ-%size1_}go`}gt@@@K3_^^_____@"B@@@@@@ఐ(%size2n}gvo}g{@ @@N@@@@@_@U@@#@@Ġ+Unreachable~~@;r@@@ @@@@CA@A@@@@@y@#/@@ఠ$size:~~@XA@@z@#<@@@@@@@@#C@@C@@$size~~@YA@@@#T@@Ġ+Unreachable~~@6@@@@D@#@#b@@@@@@ @@#i@@i@@D @@@@@@#p@@@ఐ@$size~~@?@@@A@@3@|J@@@@@@@@#@@@@@@#@@ @@@@ @@#@@@@@@#@@@ఐ,dynamic_size  @@@@@@@#@@#I@#@@#@@ภ{@y@@@@@@#I@#@@@@@@@A(}gi@@3&%%&&&&&@@@@A@D@$@A@@@@ఠ7find_size_of_alloc_prim<9:@RZA@@@h@@@(rD@$@@$@Ƞ&Lambda&lambda@@@(D@(@@@(D@$ @@$ &optionL@@@*IF@**@@@*=D@$ @@$ D@$@@$D@$3kjjkkkkk@Hg`@a@b@@@࣠@$prim>A|}@[A@@=3}||}}}}}@L@@@@@  @@$args?A@\A@@F3@!T@@@@@@@@@ఠ'same_as@@]A@@@@@@(|G@$@@$$boolE@@@(iG@$@@$G@$3@'3o@*@+@@@࣠@*other_primBA@^A@@3@.L@@@@@  @@ Р)Primitive @@ 3@%:@@@@@@A3@@@ @@ @3@@@డd&String%equal"@ #(@@@&Stdlib&String!t@@@&@@&@@@@&@@&c@@@&@@&@@&~@*string.mlirrr@@.Stdlib__StringK@'"@@@@@@(]@@(\@&@@@([@@(Z{@@@(Y@@(X@@(W3 / . . / / / / /@K@@@@ఐƠ$prim ?) @-@@@@)prim_name F. G7@3)prim_namem@@@ K@@@ @@@ 3*prim_arity F@@@ @@A@@5^6^@@zK@3*prim_allocD@@@ @@B@@?_@_@@L@30prim_native_namef@@@ @@C@@I`?CJ`?\@@M@35prim_native_repr_args($listK+native_repr@@@ @@@ @@D-@@[a\a@@N@34prim_native_repr_res: @@@ @@E6@@dbeb@@O@@@h]i]@@J@QI@@@@@(sJ@(qc@@ఐܠ*other_prim 8 B@@@r@)prim_name C@a @@@@@(}J@({}@@@@~@ @@3        @@@@A@ G@(@A@@@ఠ'int_arg RX R_@ _A@@ !#intA@@@(G@(@@@(G@(3        @6/@0@1@@@ఐR$args Rh Rl@%@@3        @@@@Ġ":: ry rA; U d@@U@ VB@AA@A @@ PĠ&Lconst r@;&Lconst@@@ @3structured_constant@@@ @AB@V@A1lambda/lambda.mli'&K&M'&K&l@@@ @Ġ*Const_base r r@;*Const_base@@@ ]@(Asttypes(constant@@@ V@A@@D@Arvr@@@@Ġ)Const_int 0r 1r@;)Const_int(Asttypes(constant@@@(@q@@@(@A@@G@A4parsing/asttypes.mliXX@@@ A@ఠ!n Mr Nr@ f`A@@@@@(r@@@ Ur Vr@@;@@@(x@@@ [r \r@@[@@@(~@@@t@@ @Ġ"[] zA; y@@@@AA@A w@@ @@}A@ ̠@@@(@@@ prx@@#@@#@@@ภ$Some wr xr@;  ѐ@@W@ A@AA@A @@ àఐ9!n r r@8@9@:@@3        @C@@@@@@@@  @@G@@G@@@ภ$None  @; $@@@@AA@A @@ @@@@@@A Rb@@@A@ RT@@ఐ 'same_as  @ܰ@@@@@@(@@(@@@(@@(3        @@@@@@@ఐ*alloc_prim  @5@@@@@(G@(G@(@@% @@ @@@(G@(@డ Q&Option#map  @   @@@@!a@)q@@)!b@)n@@)@@)@@@@)@@)@@@)@@)@@)@*option.mlioo@@.Stdlib__OptionI@,'@@@@@@@*KF@*-@@*0@@*/@@*.@! @@@*,@@*+Ǡ@@@*)@@*(@@*'p@@࣠@!nA : ;@ SaA@@#3 ; : : ; ; ; ; ;@@@@@@@ภ-Regular_block G H@;@@@ @A@AB@A@@ఐ!n V W@>@@@@?3 W V V W W W W W@)@@@@@@@@@*J@ a b@@@P@@*B@@*AG@*PG@*N-@@ఐ'int_arg u v @@@yd@@@*?G@*TG@*R@@ @@ C@ఐꠐ'same_as    @@@@ @@@*Y@@*X@@@*W@@*V\@@ఐ 7alloc_float_record_prim    4@@@ @@@*bG@*dG@*cp@@" @@@@@*eG@*`v@డ +&Option#map :> :D@  :E :H@@ڰ@@@@.@@@*F@*m@@*pqD@*F@*j@@*o@@*n@۠@@@*l@@*k@@@*i@@*h@@*g@@࣠@!nA :N :O@ bA@@'3        @<@@@@@@ภ,Float_record :S :_@;b@`AAAB@A\@@Yఐ!n :` :a@?@@@@@3        @V&@@@@@@@@@*@ :I :b@@@Q@@*L@@*G@*G@**@@ఐl'int_arg ,:c -:j@p@@0e@@@*G@*G@*@@w @@D@*}B@ఐ'same_as Fku Gk|@s@@@ p@@@*@@*@@@*@@*[@@ఐ V/alloc_lazy_prim ]k} ^k@Ѱ@@ @@@*G@*G@*o@@" @@@@@*G@*u@ภ$Some s t@ภ*Lazy_block | }@;5@@@@AB@A@@@@@F@*@@@@%D@*@ภ$None  @@ @@ F@*@ kr@@@  @@]@ @@6@@@7@@@8@A@]D@*@A@@@/@ఠ3compute_static_size  @ cA@@@^@@@OD@*@@*@@@OD@*@@*D@*3        @P@@@@@࣠@#lamA  @ dA@@3        @,  t01%@@@@@  @@Aఠ7compute_expression_size  @ eA@@@%Ident#Map!tG@@@4F@+@@@,XF@*@@+ @@@@NF@*@@+ N@@@G$F@*@@+ @@+3        @<H[@?@@@@@࣠@#envA  @ 1iA@@33        @D@?@@*@.@@*)@@*G@*@@*G@*@J@K6compute_and_join_sizes@NF@*@@*@$listKKF@NF@+0H@E@@@EF@*@@*NF@FF@FF@EF@*@@*G@*@@*G@*@ U   V  @@ nfA=compute_and_join_sizes_switch@:#Map!tp@@@*@@@*@@*@  @!a@*ޠ@ &lambda@@@*@@*@@@*@@@*@@*@@@*@@*@@*@ !2!8 !2!U@@ gA1size_of_primitive@F@*@@*@M)primitive@@@3F@+@@+@`@@@NF@+@@+F@+@@+G@+@@+G@*@@*G@*@ "" ""@@ hA@@@@@@#lamA  @ jA@@3        @@@@@@@@@ఐ#lam   @@@@@3        @@@@Ġ$Lvar  @;$Lvar@%Ident!t@@@ @A@@V@A%& &$%& &3@@@ @ఠ!v  @kA@@@@@+23@,@@@@@"@@@@@@@డ#Map(find_opt%Ident 2 7@  8 ;@@# <$ D@ @@@#key@@@@@@I!a@@@@@@&optionL @@@@@@@@0typing/ident.mliTaiTa@@+Stdlib__MapV@0&@@@#@@@+@@+@jc@@@+@@+g@@@+@@+@@+3ZYYZZZZZ@e^@_@`@@@@ఐl!vj Ek F@ @@D@@@,IL@,H@@ఐg#env| G} J@@@"@@f@@D@@@+'@Ġ$NonePXP\@@@@@U@@@,i3@8@@@@Z@@@,j@@@ఐ",dynamic_size`h`t@|@@@@@@,w@@,vM@,u@@,t@@ภ`u`w@@@@/@@@,~M@,*@@@@+@Ġ$Somexx@Sఠ,binding_sizeנxx@@A@@F@4F@4-F@45F@-VF@-^F@,N@,n@@@@@@@@,o@@@@@,p@@@డ 3%force.Lazy_backtrack@ @@@@!a@!@@-!b@@@,@@+@.Lazy_backtrack!t@@@*@@)@@(@@'@8utils/lazy_backtrack.mliTQQTQz@@ B@,'@@@@ l@@@,L@,@@,F@EF@,F@,@@,@@,@( @@@,@@,@@,@@,3@??@@@@@@vo@p@q@@@@࣠@Aঠ&lambdaWXA3 C @@@ F@@@3 < ;@@A@A ,@ )@A C@ @ఠؠ @|AA@ N@@@,3feefffff@&@@@#envpqAఠ٠@BA@ S L@@@,@@@,@@@@@VF@,O@,@@@@ఐ7compute_expression_size@q@@@@@,@@@,@@,@@,3@Z<9@;@:+(@*@)@@@@ఐ2#env@ @@ @@@,@@ఐU&lambda@@@wO@,%@@1@@&@@@@@@,@@,M@,M@,c@@ఐ,binding_size@@@@@@@q@@@A &@@H@Ġ'Lmutvar&@;'Lmutvar@!t@@@ @AA@V@A&&4&6&&4&J@@@ @@'(@@@@@+5@@@@@@@@@@ఐ ,dynamic_size , 8@@@@ @@@,@@,K@,@@,@@ภ y9;@ x@@@ @@@,K@, @@@@!!@Ġ&Lconst0<B1<H@6@5<I6<J@@5@@@+85@@@ @@;6@@;6@@@ภ(ConstantA<NB<V@; 6@@@ACA@A 5 2@ $@@@AA@Ġ&LapplyPW]QWc@;&LapplyV@,lambda_apply@@@ @AC@V@AS(&m&oT(&m&@@@ @@bWdcWe@@@@@+;b@@@@@hc@@hc@@@ఐ ,dynamic_sizeqWirWu@ J@@@ @@@,@@,FK@,@@,x@@ภ WvWx@ @@@ @@@,K@,@@@@@Ġ)Lfunctionyy@;)Lfunction@G)lfunction@@@ @AD@V@A)&&)&&@@@L@@yy@@@@@+>@@@@@@@@@@ภ(Functionyy@;  .@@@BCA@A  @ @@@@Ġ$Llet@;$Llet@t(let_kind@@@ z*value_kind@@@ !t@@@ @@@ @@@ @EE@V@A*&&*&&@@@@@@@$@@@+E3@@@@@@@'@@@+F @ఠ"id@lA@@/@@@+G@ఠ#def@(mA@@@@@+H%@ఠ$body@6nA@@@@@+I3@@@`%@@&5@@&5@@@@ఠ#env۠01@ICA@@K^K@-@@@-&K@,398899999@fC<@=@>6/@0@1)"@#@$@@@డ #Map#add%IdentTU@ XY@@]^@ @@:@@@C@@B@!a@-@@A@ @@@@@@?@@@>@@=@@<@@;@9@5F@* @@@W@@@- @@- @P@@-@W@@@-@@-[@@@-@@-@@-@@-Y@@ఐ"id@a@@y@@@-1L@-0k@@డ &create.Lazy_backtrack@ @@@!a@@@0!b@@@@/@@.@U{{U{@@C@@@@ @@@-F@-JL@-=@@-?̠  @ @-F@->@@@-<@@-;@@ຠ&lambda@ఐ#def @ð@@ @@@-LM@-M@#env Aఐ @O@/@@@@@B@@@@F@-E@@ఐ#env)*@b@@C@@@@@A@.@@ఐW7compute_expression_size8%9<@@@@V@@-@C@@->@@-@@-3@??@@@@@@@@@@@@ఐ #envP=Q@@ @@h@@@-@@ఐD$bodyaAbE@!@@K@-#@@/@@b$@:@@c,@Ġ'LmutletrFLsFS@;'Lmutletx@@@@ !t@@@  ,@@@  0@@@ @DF@V@A+&&+&'@@@ 3@@FTFU@@@@@+O3@@@@@FWFX@@!@@@+P @@FZF[@@ N@@@+Q@ఠ$bodyF]Fa@oA@@ \@@@+R@@@DFb@@!@@!@@@ఐߠ7compute_expression_sizeflf@@@@@@-@@@-@@-@@-3@#@@@@@@ఐà#envff@@@@@ఐ7$bodyff@@@K@-@@+@@ @Ġ'Lletrec@;'Lletrec@$listK +rec_binding@@@ @@@  @@@ @BG@V@A ,'' ,''?@@@ @ఠ(bindings@/pA@@ @@@+X@@@+W3@H@@@ఠ$body )*@BqA@@ @@@+Y@@@<1@@2@@2@@@@ఠ#envܠ<=@UDA@@WjN@36@@@3K@-3EDDEEEEE@q92@3@4' @!@"@@@డ$List)fold_leftZ[@ ^_@@@@#acc@/@@1]@!a@/@@1\ @@1[@@1Z@@1Y@@@1X@=@@@1W@@1V@@1U@@1T@@1S@(list.mli333r@@,Stdlib__List]@/*@@@@QK@2@@3@@@@3*K@2@@3 @@3@@3@@3@@@2@c@@@2@@2@@2@@2@@23@`@@@@࣠@'env_acc$A@EA@@*s@@@@ "&Aঠ"idA3"id@@@ !t@@@ @@@ 3#def ;@@@ @@A@A C** C*+@@ !@@A B** B**@@  @ఠ %! @FA@@@@3+3@>^@5@6@@@#def@!@@@^@@@3.@@@@@jO@3(@@@@డ #Map#add%Ident@  @@  @ @° @@@@@@3;@@3:@@@39@G@@@38@@37K@@@35@@34@@33@@32376677777@OWT@V@U@@@@ఐ^"idGH@ @@!@@@3bO@3a@@డ-create_forced.Lazy_backtrack_`"@ c#d0@@@!b@ @@;Y!a@ @@@:@@9@XXYX@@aF@@@@F@3yO@3o@@3poF@3n @@@3m@@3lR@@ภ(Function19@@@@P@3z`@@:@@XF@3vd@@ఐ'env_acc;B@@@q@@@@j@@@3Wv@C@@@*@@3@(@@3.@@3@@3L@3L@3w@@ఐ#envDNDQ@@@$@@ఐ(bindingsDRDZ@@@I@@@3L@3L@39@@ @@Q@A@ @@ఐ 7compute_expression_sizedjd@ΰ@@@ @@3@@@3@@3@@33@@@@@@@ఐɠ#envdd@ @@@@ఐ預$bodydd@Ȱ@@K@3@@+@@ @6@@@Ġ%Lprim#$@;%Lprim )@@@@ 2 @@@ @@@  /scoped_location@@@ @CH@V@A 3-'@'B 4-'@'v@@@ @ఠ!pàFG@_rA@@@@@+_3JIIJJJJJ@t@@@ఠ$argsĠUV@nsA@@- @@@+a@@@+`@@cd@@0@@@+b@@@Fi@@j@@j@@@ఐߠ1size_of_primitivest@@@@@@3@@@3@@@3@@3@@3@@33~~@C<@=@>5.@/@0@@@@ఐ|#env@ʰ@@@@ఐX!p@@@@@ఐV$args@'@@ F@NF@N-F@N.F@NF@NF@37@@G@@8@Ġ'Lswitch@;'Lswitch @ s@@@  w-lambda_switch@@@ @@@ @CI@V@A .'w'y .'w'@@@ @@@@ @@@+g3@ @@@ఠ"swŠ@tA@@"@@@+h@@@@@@@+i@@@7@@@@@@@@ఠ)fail_case'@GA@@ @ @@@3K@3@ @@@3K@3@@3K@3@@@3K@33@J=6@7@8@@@ఐE"sw0 1 @@@h@@@3@3354455555@@@@-sw_failaction= >@3-sw_failactiont@@@ &optionL @@@ @@@ @@D3,sw_numconsts#intA@@@ @@@ @A OZ-- PZ--@@.@3)sw_constsc@@@@ ꠠ@@@@ @@ @@@ @@A!@A g[.. h[..1@@/@3,sw_numblocks4$@@@ @@B+@A q\.J.N r\.J.`@@"0@3)sw_blocks>@6@@@ @7@@@ @@ @@@ @@CC@A ].. ]..@@:1@V@A ^.. ^..@@>2@j\@@VG@@@3@@@3i@Ġ$None * .@ @@@@j[@@@3@@@3@@qb@@@3@@@3@@@ภ"[] 2 4@ \@@@@Ġ$Some5?5C@ Xఠ$fail(5D5H@HA@@@@@3@@@@@@@@3@@@3@@@@@3@@@3@@@ภ"::5M5cA @@ 5N@@3@.'@(@)@@@@ఐ4$fail 5^ 5b@ @@@@@@K@3@ภ"[] $A @ %A@}K@3@@@3M@4!@@"5L.@@#@@@A$0@@@A@&2@@ఐ Ԡ=compute_and_join_sizes_switch0ms1m@ ذ@@@ ؠ C@@@4@@@4@@4@ Ӡ Ҡ@@@@4YJ@4@ @@@4@@4@@@4@@@4@@4  @@@4 @@4 @@4 3XWWXXXXX@:[T@U@V@@@@ఐ S#envhmim@ @@ @@ภsmtmA ఐ"sw m@\@@@@@4[@4V+@)sw_constsmm@1@@ @N@ @@@4*@@4)@@@4(K@4QK@4\K@4WE@ภm3A ఐƠ"sw m@ @@@@@4r@4m]@)sw_blocksmm@A@@4K@4hK@4sK@4nj@ภذmXA ݠఐΠ)fail_case m@x @@K@4K@4K@4@ภʰnA z@oA@F@@@4K@4@@vA@M,@@@4kK@4~@@K}A@Te@@@4TK@4g@@m@@ k@@@4'K@4P@@@@K@4%@@@ @Ġ-Lstringswitch @;-Lstringswitch@@@@ @&stringQ@@@ @@@@ @@ @@@ @@@ @@@ @@@ @DJ@V@A01( (12("(i@@@@@?@@@@@@+s3A@@AAAAA@ k@@@ఠ%casesƠLM@euA@@:@9@@@+v@@@@+w@@+u@@@+t@ఠ$failǠgh@vA@@@@@@+y@@@+x.@@uv@@B@@@+z6@@@n{@@ |8@@ |8@@@@ఠ)fail_case)@IA@@<@@@@4K@4@H@@@4K@4@@4K@4@@@4K@43@ ]V@W@XC<@=@>@@@ఐI$fail @ @@`@@@4@@@43@@@@Ġ$None $@*@@@@u@@@4@@@4-@@|@@@4@@@44@@@ภ(*@u@@@T<@Ġ$Some+5+9@qఠ$fail*+:+>@ JA@@@@@4>@@@@@Π@@@4@@@4F@@ՠ@@@4@@@4M@@@ภ +C +ZA@ +D@@+E@@3@z0)@*@+@@@@ఐ6$fail'+U(+Y@ @@@@@@K@4@ภ &A@ 'A@K@4@@@4M@4 @@<+B0@@"@@@A>2@@@A@@4@@ఐ =compute_and_join_sizes_switchJdjKd@ @@@  ]@@@4@@@4@@4@  @J@@@5J@4ՠ@ @@@4@@4@@@4@@@4@@4 @@@4@@4@@43rqqrrrrr@@@@@@@ఐ m#envdd@ @@ @@ภddAఐK%cases d@ @@ ,@@@ '@@@4@@4@@@4K@5K@5K@57@ภd%AĠఐ5)fail_case d@E @@&K@5)K@51K@5-N@ภ;Aa@Aఐ$body 4@" @@ F@5W(@ภ*6A/ఐ'handler &=@4 @@K@5_;@ภ &A@ 'A@#L@5Y@@@5^K@5dJ@@0A@,F@5R@@@5VK@5]S@@C/:@@ F@EF@5TF@5UZ@@f@@@E[@Ġ+LifthenelseT?EU?P@;+LifthenelseZ@@@@ @@@  @@@ @CN@V@A]8)v)x^8)v)@@@@ఠ%_cond̠p?Rq?W@{A@@@@@+3tssttttt@ @@@ఠ$ifso͠?Y?]@|A@@-@@@+@ఠ%ifnotΠ?_?d@}A@@;@@@+@@@A?e@@@@@@@ఐm6compute_and_join_sizesioi@q@@@o@@5i@k@@5h]@@5g@@5f3@ B;@<@=4-@.@/' @!@"@@@@ఐ#envii@ @@@@ภӰiiA٠ఐQ$ifso i@" @@K@5z*@ภiAఐV%ifnot i@4 @@K@5=@ภհ &A@ 'A@QL@5|@@@5K@5L@@0A@ZF@5u@@@5yK@5U@@i:@@F@5xY@@e=@@Z@Ġ)Lsequence@;)Lsequence@@@@ @@@ @BO@V@A9))9))@@@@@"#@@@@@+3$##$$$$$@N@@@ఠ!eϠ/0@H~A@@@@@+@@@)7@@8@@8@@@ఐ`7compute_expression_sizeAB@"@@@_@@5@L@@5G@@5@@53IHHIIIII@t#@@@@@@ఐD#envYZ@@@s@@ఐ7!efg@@@"K@5@@+@@g @Ġ&Lwhilez{@;&Lwhile@)@@@ -@@@ @BP@V@A:)):))@@@0@@@@:@@@+l@@@?@@@+q@@@ @@r@@r@Ġ$Lfor@;$Lfor@!t@@@ W@@@ [@@@  .direction_flag@@@ àe@@@ @EQ@V@A;));)* @@@h@@@@"@@@+@@@w@@@+@@ @|@@@+@@@"@@@+@@@@@@+@@@?@@@@@@g@@@Ġ'Lassign@;'Lassign@!t@@@ Š@@@ @BR@V@A<*!*#<*!*@@@@@@  @@@@@+@@@@@@+@@@" @@ @@ @@ @@ @@@ภ(Constant  @ @@@@Ġ%Lsend     @;%Lsend%@)meth_kind@@@ Ǡ@@@ Ƞ@@@ ɠ 8@@@ @@@ ʠ@@@ @ES@V@A7=*A*C8=*A*@@@@@F  G  @@$@@@+$@@@@@@+)@@ @@@@+.@@@%@@@+@@@+7@@@+@@@+<@@@E@@d=@@d=@@@ఐ점,dynamic_sizem  n  +@F@@@@@@5@@5BK@5@@5R@@ภݰ  ,  .@@@@@@@5K@5b@@@@c@Ġ&Levent / 5 / ;@;&Levent@C@@@ ͠G,lambda_event@@@ @BT@V@A>**>**@@@L@ఠ!eР / = / >@A@@\@@@+@@ / @ / A@@@@@+@@@* / B@@@@@@@ఐ砐7compute_expression_size F L F c@@@@@@5@@@5@@5@@53@+$@%@&@@@@ఐˠ#env F d F g@@@@@ఐ?!e F h F i@@@K@5@@+@@ @Ġ'Lifused j p j w@;'Lifused@!t@@@ Ϡ@@@ @BU@V@A?**?**@@@@@ j x j y@@@@@+@@@@@@@+E@@@" @@F@@F@@@ภ(Constant% j }& j @ @@@#O@@@A)@@%3'&&'''''@Q@@@A@@I@@Ev@6@@Eu1@@Et@@EsF@Eo@@@7@@@@ @@+@@@+@@+ @@+ 3CBBCCCCC@<@@@࣠@#envAR  S  @kOA@@3SRRSSSSS@:@@@@@@(branchesAa  b  @zPA@@&3baabbbbb@J1@@@@@@@@డ$List)fold_leftw  x  @ {  |  @@ @@@@:H@E@@E@F@@E@@E@@E@@E@ @@E@TQ@@@E@@E@@E@@E@@E3@5A]@8@9@@@@࣠@$sizeA    @QA@@'3@@@@@@@&branchA    @RA@@v3@%9@@@@@@@@ఐ*join_sizes    @]@@@@@@E@@E@@@E@@E@@E3@)@ @!@@@@ఐ?$size    @)@@b@@ఐ7compute_expression_size   ! @ְ@@@@@E@@@E@@E@@E'@@ఐ#env  !   ! @@@4@@ఐa&branch ! !@>@@A@@   !@@D@@S@@E@    !@@@@@E@@@E@@E@@EI@EI@E@@ภ+Unreachable6!!7!!(@@@@I@E@@ఐ砐(branchesE!!)F!!1@@@ @@@@@A@@@@E@@@E@@E@@EF@E@@@U  @@РШ@б@г%Identn!X!qo!X!v@ r!X!ws!X!z@@w!X!{x!X!|@ @г,binding_size!X!d!X!p@@@@@*3@|@@@@@)@@@* @@б@г $list!X!!X!@г%$list!X!!X!@В@А!a-@*$!X!!X!@@@г./!X!!X!@@5@@@*3@@@@@ @@*: @@@N @@@*?!X!(@@@X @@@*E6@@гD$size!X!!X!@@L@@@*Q@@@@@*@@*V @@@Y@@* @@*[a@@=@@*_@YA@@@@@@+@@@+@@+@@Y@+@@@@+@@+@@@+@@@+@@+@@@+@@+@@+ @@+@࣠@#envA !! !!@ 1TA@@r@@@F<@@@F;3 $ # # $ $ $ $ $@ H;@@@A@@@A@ -!X!a .!X!b@@@@ FSA@@@@@@)all_casesA :!! ;!!@ SUA@@@$@@@F\@@@@F]@@F[@@@FZ@@@FY3 S R R S S S S S@0G=:@@@F:@@@F9@E@F@@@@'&@@డ$List)fold_left o!! p!!@  s!! t!!@@ @@@@.J@Fe@@Fn@F@H@@@G!J@FŠ@PM@F@@FM@F@@@FJ@Fh@@Fm@@Fl@@Fk@@Fj@@@Fi@a @@@Fg@@Ff'@@Fd@@Fc@@Fb3        @Qukj@i@@@FW@h@@@FX@@FV@@@FU@@@FT@@@@@@࣠@$sizeA !! !!@ VA@@P3        @)@@@@@@%casesA !! !!@ WA@@Y3        @9b@@@@@@@@డZ$List)fold_left !! !!@  !! !!@@ @@@@M@F@@F@|@@F@@F@@F@@F@ @@F@͠@@@F@@F@@F@@F@@F3!!!!!!!!@5A@8@9@@@@࣠@$sizeA!#!"!$!"@!<XA@@'3!$!#!#!$!$!$!$!$@@@@@@@A@ఠ$_key!7!"!8!" @!PYA@@3!8!7!7!8!8!8!8!8@*!>@@@@@@ఠ&action!F!" !G!"@!_ZA@@@@!K!"!L!"@@@@@@F@@ @@ఐQ*join_sizes!^""%!_""/@@@@L@@@F@@F@@@F@@F@@F3!i!h!h!i!i!i!i!i@3<@6@7.@(@)@@@@ఐ[$size!{""0!|""4@@@@~@@ఐ7compute_expression_size!""6!""M@k@@@@@F@@@F@@F@@F)@@ఐ#env!""N!""Q@I@@F@F@@@F<@@ఐl&action!""R!""X@D@@I@@!""5!""Y@@L@@[@@fM@!!!!""Z@@@@@F@>@@F@@F@@FN@GN@G@@ఐ $size!"["g!"["k@@@V@@ఐ%cases!"["l!"["q@Ͱ@@]@@@@@!!!!"["r@@@o@@F@m@@Fs@@F@@FK@GK@G#@@ภ+Unreachable!"s"{!"s"@s@@@K@GZ@@ఐӠ)all_cases" "s"" "s"@d@@Р@@@FK@G#K@Go@@ @@G@ A@б@гг@ @@@F @@@@@F@б@ггВ@г@@@@@F&@@г@@@@F/@@@@ @@F5@@ @@@F9@@"@@@F=@г@@@@FD@@@@F@@FH@@B@@F@@FL@]@@@@@@G@@@G@@G@@@E@@@@G@@G@@@G@@@G~@@G}@@@G|@@G{@@GzF@Gms@@@"!2!4@@@@ @@+"@ @@+!@@@+ @@+@@+@@+3""""""""@@@@࣠@#envA""""""@"[A@@%3""""""""@@@@@@@!pA""""""@"\A@@,3""""""""@7@@@@@@@@$argsA""""""@"]A@@03""""""""@@@@@@@@@@ఐ&!p""""""@@@N3""""""""@D@@@@@Ġ'Pignore#""#""@;'Pignore@@@ /@@@Bo~@Ayy@@@b@@@  @@3#(#'#'#(#(#(#(#(@<@@@@@Ġ)Psetfield#4""#5""@;)Psetfield@ @@@ 4immediate_or_pointer@@@ @@@@@G@@@@@Q@@Q@@@@R@Ġ*Pbytessetu##?#E##?#O@;*Pbytessetu@@@do~@Ac R pc R |@@@X@@@  @@d@@d@@ @@e@Ġ*Pbytessets$#P#V$#P#`@;*Pbytessets@@@fo~@A c R  c R @@@Z@@@  @@w@@w@@ @@x@Ġ*Parraysetu$!#a#g$"#a#q@;*Parraysetu@*array_kind@@@ @AWo~@A$l%l@@@_@@$3#a#r$4#a#s@@@@@G @@@@@@@@@@@@Ġ*Parraysets$B#t#z$C#t#@;*Parraysets$@!@@@ @AYo~@ACn8:Dn8T@@@a@@$R#t#$S#t#@@.@@@G,@@@@@-@@-@@;@@.@Ġ,Pbigarrayset$a##$b##@;,PbigarraysetC@$boolE@@@ @@@ -bigarray_kind@@@ "/bigarray_layout@@@ @Dko~@AvwT@@@'y@@$##$##@@!@@@G_@@@@@@Gd@@ @@@@Gi@@@@@@Gn@@@9@@o@@o@@}@@p@Ġ-Pbytes_set_16$##$##@;-Pbytes_set_16@B@@@ $@Aso~@Axzx@@@V@@$##$##@@@@@G@@@@@@@@@@@@Ġ-Pbytes_set_32$##$##@;-Pbytes_set_32@b@@@ %@Ato~@A@@@v@@$##$##@@@@@G@@@@@9@@9@@@@:@Ġ-Pbytes_set_64$##$##@;-Pbytes_set_64@@@@ &@Auo~@A@@@@@$##$##@@@@@G@@@@@Y@@Y@@@@Z@Ġ1Pbigstring_set_16%##%##@;1Pbigstring_set_16@@@@ *@Ayo~@A@@@@@%##%##@@@@@G@@@@@y@@y@@@@z@Ġ1Pbigstring_set_32%###%$#$@;1Pbigstring_set_32@@@@ +@Azo~@A%&@@@@@%4#$%5#$@@@@@G@@@@@@@@@@@@Ġ1Pbigstring_set_64%C$$%D$$)@;1Pbigstring_set_64%@@@@ ,@A{o~@AEF@@@@@%T$$*%U$$+@@@@@G.@@@@@/@@/@@=@@0@Ġ%Ppoll%c$,$2%d$,$7@;%PpollE@@@no~@A`a@@@@@@  @@B@@B@@P @@C@@@ภ(Constant%t%%%u%%@3@@@L@Ġ*Pduprecord%%%%%%(@;*Pduprecordc@%Types5record_representation@@@ >@@@ @BIo~@AF  F  @@@=n@ఠ&repres%%%*%%%0@%^A@@@@@G3%%%%%%%%@@@@ఠ$size%%%2%%%6@%_A@@#@@@G@@@5%%%7@@@@@@@ఐ!&repres%%;%O%%;%U@ @!@"@@>@@@H3%%%%%%%%@/ @@@@@Ġ.Record_regular%%[%e%%[%s@;.Record_regular%Types5record_representation@@@L@@@@BC@A0typing/types.mliDSqSuDSqS@@@ @@@@@f@@@M(@@(@Ġ.Record_inlined%%[%v%%[%@;.Record_inlined@#intA@@@L@AABC@AGTQTSGTQTj@@@%@@& %[%& %[%@@@@@MH@@@@@@@@ML@@L@@; @@@@@MP@Ġ0Record_extension&%[%& %[%@;0Record_extensionF@$Path!t@@@L@ABBC@AGHTTHHTT@@@O@@&4%[%&5%[%@@@@@Mr@@@@@@@@Mv@@v@@e @@@@@Mz@@@ภ%Block&G%%&H%%@;!@! A@CA@A!!@ ภ-Regular_block&R%%&S%%@ ఐ$size&\%%&]%%@@@!@@@MM@MM@M@@&g%%&h%%@@!,@@@MM@M@@(@@@Ġ,Record_float&y%%&z%%@;,Record_float@@@ABC@AESSESS@@@@@@  @@@@@M@@@@@M@@@ภ%Block& %%& %%@Hภ,Float_record& %%& %%@ఐ$size& %&& %&@ڰ@@"@@@MM@MM@M@@& %%& %&@@!r@@@MM@M@@&@@@Ġ.Record_unboxed& &&& &&@;.Record_unboxed@$boolE@@@L@A@BC@AFTTFTT@@@@@& &&& && @@@@@M@@@@@R@@@M@@U@@@M@@@డ )+fatal_error$Misc& &$&0& &$&4@ & &$&5& &$&@@@ '@@@ '@@@M@@MN@M@@M5@@1size_of_primitive' &$&B' &$&S@@' &$&A' &$&T@@ =@@@MN@MN@MI@@& @@]J@@@A'%;%C' &U&`@@`M@Ġ*Pmakeblock' &a&g' &a&q@;*Pmakeblock@@@@ ޠ ,mutable_flag@@@ ߠ+block_shape@@@ @CBo~@A,~(*-~(Z@@@e@@'; &a&r'< &a&s@@@@@G@@@@@@G@@ @@@@G@@@-@@@@@@@ภ%Block'Q']'e'R']'j@ ภ-Regular_block'Z']'l'[']'y@డ%$List&length'j']'{'k']'@ 'n']''o']'@@@5!a@0@@@0@@0#intA@@@0@@0@kk @@C@ @@@LF@3F@N @@@N@@N@@@N@@N@@ఐ̠$args'']''']'@@@@@'']'z'']'@@#@@@N@NL@N @@'']'k'']'@@"v@@@MK@N@@h@@@Ġ.Pmakelazyblock''''''@;.Pmakelazyblock@r.lazy_block_tag@@@ @ACo~@A[][@@@wf@@''''''@@@@@G4@@@@@:5@@:5@@@ภ%Block''''''@ภ*Lazy_block''''''@n@@@"@@@NK@NL@@@@?M@Ġ*Pmakearray''''''@;*Pmakearray@@@@ ,mutable_flag@@@ @BSo~@Ae  e  @@@[@ఠ$kind(''(''@(0`A@@@@@G3((((((((@/@@@@("''(#''@@@@@G @@@+((''@@ @@ @@@@ఠ$sizej(3''(4''@(LcA@@@@@N+L@N3(9(8(8(9(9(9(9(9@N+$@%@&@@@డ&$List&length(L''(M''@ (P''(Q''@@@@@F@N$@@@N#@@N"@@@N!@@N $@@ఐ$args(j''(k'(@{@@1@@"@@52@A@(o''@@ఐb$kind(y(((z((@=@@V@@@N03(|({({(|(|(|(|(|@DRK@L@M@@@Ġ)Pgenarray(($(.(($(7@;)Pgenarrayn@@@ 6@@@@D@@A@@@ A@@@  @@w@@@N4!@@!@Ġ*Paddrarray(($(:(($(D@;*Paddrarray@@@AD@@A@@@ V@@@  @@@@@N76@@6@@& @@@@@N8:@Ġ)Pintarray(($(G(($(P@;)Pintarray1@@@BD@@A@@@ o@@@  @@@@@N;O@@O@@? @@@@@N=S@@@ภ%Block((T(`((T(e@ภ-Regular_block((T(g((T(t@ఐ$size((T(u((T(y@l@@$[@@@NNM@NPM@NOv@@((T(f((T(z@@#@@@NHM@NM~@@&@@J@Ġ+Pfloatarray)({() ({(@;+Pfloatarrayx@@@CD@@A@@@ @@@  @@@@@NA@@@@@NB@@@ภ%Block)(()((@נภ,Float_record)'(()(((@&ఐ$size)1(()2((@@@$@@@N[M@N]M@N\@@)<(()=((@@$@@@NUM@NZ@@&@@@@@A)E(()F((@@@@@ @Ġ)Pduparray)R(()S((@;)Pduparray4@1@@@ ?,mutable_flag@@@ @BTo~@AYf  Zf @@@! \@@)h(()i((@@D@@@G3)j)i)i)j)j)j)j)j@~@@@@ @@@@G@@@" @@@@@@@ఐ$args)})$)8)~)$)<@@@@Ġ) )B)M) )B)QAఠ#argk ) )B)P@)dA @@F@Nd)@Ġ5 A4@@ A@( @@@Ni4@@@) )B)L@@6@@6@@@ఐˠ7compute_expression_size)!)U)a)!)U)x@@@@@@N{@@@Nz@@Ny@@Nx3))))))))@+%@&@'@@@@ఐ #env)!)U)y)!)U)|@@@.@@ఐ?#arg)!)U)})!)U)@@@?@@)@@!@Ġ)")))"))@z@@@@5v@@5v@Ġ"::)")))"))@@)")))"))@@aF@Nm@Ġ)")))"))@ @)"))*"))@@pQ@Nq@@*"))*"))@@)i @@@Ns@@@@@)n@@@Nt@@@" @@d@@d@@3 @@e@@@డ#^+fatal_error$Misc* #))*!#))@ *$#))*%#))@@#\@@@#\@@@N@@N*N@N@@N@@1size_of_primitive*9#))*:#))@@*<#))*=#))@@#r@@@NN@NN@N@@& @@@@@A*G)$),*H$))@@+@Ġ&Praise*S&))*T&))@;&Praise5@"*raise_kind@@@ @AKo~@A VO   WO  @@@"t@@*e&))*f&))@@@@@H@@@@@@@@@@ภ+Unreachable*q'))*r')*@"@@@@Ġ(Pctconst*~)** *)**@;(Pctconst`@"-5compile_time_constant@@@ -@A|o~@A   -@@@"2@@*)***)**@@@@@H(@@@@@)@@)@@@ภ(Constant*,***,**@[@@@2@Ġ&Pccall*.***.**@;&Pccall@)Primitive+description@@@ @AJo~@A M N P M N q@@@"`s@ఠ$prim*.***.**@*aA@@@@@H@@@!@@)@@)@@@ఐ"7find_size_of_alloc_prim*/***/*+@@@@(@@@N@@N@""@@@N@@@N@@N""@@@N@@@N@@N@@N3********@5.@/@0@@@@ఐ<$prim*/*+*/*+@ @@)(@@@NM@NM@N@@ఐ;$args+/*++/*+ @#@@g$@@A@@""@@@N@@@N,@Ġ$Some+'0+++(0++@ ఠ$sizel+00+++10++#@+IeA@@"@@@NF@@@@@"נ"@@@N@@@NN@@"ޠ"@@@N@@@NU@@@ภ%Block+L0++'+M0++,@ఐ&$size+V0++-+W0++1@%@&@'@@&@@@NM@NM@N3+^+]+]+^+^+^+^+^@q7 @@@@ @@@Ġ$None+n1+2+<+o1+2+@@ @@@@## @@@N@@@N@@##@@@N@@@N@@@ఐ%,dynamic_size+1+2+D+1+2+P@$a@@@%@@@N@@NN@N@@N@@ภ$+1+2+Q+1+2+S@$@@@%@@@NN@N@@@@@@@A+/**+2+T+_@@3++++++++@@@@Ġ0Pbytes_to_string,W4+a+g,X4+a+w@;0Pbytes_to_string 9@@@@o~@A"Tw"Uw@@@$`@@@  @@ r@@ r@Ġ0Pbytes_of_string,i5+x+~,j5+x+@;0Pbytes_of_string K@@@Ao~@A"fx"gx@@@$a@@@  @@ @@ @@ @@ @Ġ*Pgetglobal,|6++,}6++@;*Pgetglobal ^@!t@@@ @A@o~@A"{"{@@@$1c@@,6++,6++@@@@@H  @@@@@ @@ @@?@@ @Ġ*Psetglobal,7++,7++@;*Psetglobal @!t@@@ @AAo~@A"|"|@@@$Sd@@,7++,7++@@@@@H @@@@@ @@ @@a@@ @Ġ&Pfield,8++,8++@;&Pfield @t@@@  @@@ ",mutable_flag@@@ @CDo~@A"@"@@@@$}g@@,8++,8++@@@@@H @@@ @@@H @@ @@@@H @@@+@@J @@J @@@@K @Ġ/Pfield_computed,9++,9++@;/Pfield_computed @@@Co~@A"A"A@@@$h@@@  @@] @@] @@ @@^ @Ġ+Pfloatfield-:++-:++@;+Pfloatfield @@@@ @AGo~@A# D e g# D e {@@@$k@@-:++-:++@@@@@H .@@@@@} /@@} /@@@@~ 0@Ġ)Prunstack-';++-(;++@;)Prunstack @@@Do~@A#$H  #%H  @@@$o@@@  @@ B@@ B@@ @@ C@Ġ(Pperform-:<+,-;<+, @;(Pperform @@@Eo~@A#7I  #8I  @@@$p@@@  @@ U@@ U@@ @@ V@Ġ'Presume-M=, ,-N=, ,@;'Presume /@@@Fo~@A#JJ  #KJ  (@@@$q@@@  @@ h@@ h@@ @@ i@Ġ*Preperform-`>,,!-a>,,+@;*Preperform B@@@Go~@A#]K ) +#^K ) 7@@@%r@@@  @@ {@@ {@@ @@ |@Ġ(Psequand-s?,,,2-t?,,,:@;(Psequand U@@@Ho~@A#pQ  #qQ  @@@%!u@@@  @@ @@ @@' @@ @Ġ'Psequor-?,,,=-?,,,D@;'Psequor h@@@Io~@A#Q  #Q  @@@%4v@@@  @@ @@ @@: @@ @Ġ$Pnot-?,,,G-?,,,K@;$Pnot {@@@Jo~@A#Q  #Q  @@@%Gw@@@  @@  @@  @@M @@  @Ġ'Pnegint-@,L,R-@,L,Y@;'Pnegint @@@Ko~@A#S  #S  @@@%Zx@@@  @@  @@  @@` @@  @Ġ'Paddint-@,L,\-@,L,c@;'Paddint @@@Lo~@A#S  #S  @@@%my@@@  @@ ( @@ ( @@s @@ ) @Ġ'Psubint-@,L,f-@,L,m@;'Psubint @@@Mo~@A#S  #S  @@@%z@@@  @@ ; @@ ; @@ @@ < @Ġ'Pmulint-@,L,p-@,L,w@;'Pmulint @@@No~@A#S  #S  @@@%{@@@  @@ N @@ N @@ @@ O @Ġ'Pdivint-A,x,~-A,x,@;'Pdivint @%'is_safe@@@ @ALo~@A#T  #T  2@@@%|@@. A,x,. A,x,@@@@@H( @@@@@ o !@@ o !@@@@ p "@Ġ'Pmodint.A,x,.A,x,@;'Pmodint @!@@@ @AMo~@A$T  3$T  G@@@%}@@.)A,x,.*A,x,@@.@@@H+ ?@@@@@  @@@  @@@@@  A@Ġ'Pandint.8B,,.9B,,@;'Pandint @@@Oo~@A$5U H J$6U H S@@@%~@@@  @@  S@@  S@@ @@  T@Ġ&Porint.KB,,.LB,,@;&Porint -@@@Po~@A$HU H T$IU H \@@@%@@@  @@  f@@  f@@ @@  g@Ġ'Pxorint.^B,,._B,,@;'Pxorint @@@@Qo~@A$[U H ]$\U H f@@@& @@@@  @@  y@@  y@@ @@  z@Ġ'Plslint.qC,,.rC,,@;'Plslint S@@@Ro~@A$nV g i$oV g r@@@&A@@@  @@  @@  @@% @@  @Ġ'Plsrint.C,,.C,,@;'Plsrint f@@@So~@A$V g s$V g |@@@&2B@@@  @@  @@  @@8 @@  @Ġ'Pasrint.C,,.C,,@;'Pasrint y@@@To~@A$V g }$V g @@@&EC@@@  @@! @@! @@K @@! @Ġ(Pintcomp.D,,.D,,@;(Pintcomp @&Y2integer_comparison@@@ @ANo~@A$W  $W  @@@&^D@@.D,,.D,,@@@@@H4 @@@@@!! @@!! @@l@@!" @Ġ-Pcompare_ints.E,,.E,,@;-Pcompare_ints @@@Uo~@A$Y  $Y  @@@&yE@@@  @@!4 @@!4 @@ @@!5 @Ġ/Pcompare_floats.E,,.E,- @;/Pcompare_floats @@@Vo~@A$Y  $Y  @@@&F@@@  @@!G @@!G @@ @@!H @Ġ.Pcompare_bints.E,-.E,-@;.Pcompare_bints @&-boxed_integer@@@ @AOo~@A$Y  $Y  6@@@&G@@/E,-/E,- @@@@@H9 @@@@@!h @@!h @@@@!i @Ġ+Pintoffloat/F-!-'/F-!-2@;+Pintoffloat @@@Wo~@A%] | ~%] | @@@&J@@@  @@!{ -@@!{ -@@ @@!| .@Ġ+Pfloatofint/%F-!-5/&F-!-@@;+Pfloatofint @@@Xo~@A%"] | %#] | @@@&K@@@  @@! @@@! @@@ @@! A@Ġ)Pnegfloat/8G-A-G/9G-A-P@;)Pnegfloat @@@Yo~@A%5^  %6^  @@@&L@@@  @@! S@@! S@@ @@! T@Ġ)Pabsfloat/KG-A-S/LG-A-\@;)Pabsfloat -@@@Zo~@A%H^  %I^  @@@&M@@@  @@! f@@! f@@ @@! g@Ġ)Paddfloat/^H-]-c/_H-]-l@;)Paddfloat @@@@[o~@A%[_  %\_  @@@' N@@@  @@! y@@! y@@ @@! z@Ġ)Psubfloat/qH-]-o/rH-]-x@;)Psubfloat S@@@\o~@A%n_  %o_  @@@'O@@@  @@! @@! @@% @@! @Ġ)Pmulfloat/H-]-{/H-]-@;)Pmulfloat f@@@]o~@A%_  %_  @@@'2P@@@  @@! @@! @@8 @@! @Ġ)Pdivfloat/H-]-/H-]-@;)Pdivfloat y@@@^o~@A%_  %_  @@@'EQ@@@  @@" @@" @@K @@" @Ġ*Pfloatcomp/I--/I--@;*Pfloatcomp @'Y0float_comparison@@@ @ARo~@A%`  %`  @@@'^R@@/I--/I--@@@@@HD @@@@@"! @@"! @@l@@"" @Ġ-Pstringlength/J--/J--@;-Pstringlength @@@_o~@A%b # %%b # 4@@@'yS@@@  @@"4 @@"4 @@ @@"5 @Ġ+Pstringrefu/J--/J--@;+Pstringrefu @@@`o~@A%b # 5%b # B@@@'T@@@  @@"G @@"G @@ @@"H @Ġ+Pstringrefs/J--/J--@;+Pstringrefs @@@ao~@A%b # D%b # Q@@@'U@@@  @@"Z @@"Z @@ @@"[ @Ġ,Pbyteslength0K--0K--@;,Pbyteslength @@@bo~@A&c R T&c R b@@@'V@@@  @@"m @@"m @@ @@"n @Ġ*Pbytesrefu0K--0K--@;*Pbytesrefu @@@co~@A&c R c&c R o@@@'W@@@  @@" 2@@" 2@@ @@" 3@Ġ*Pbytesrefs0*K--0+K-.@;*Pbytesrefs @@@eo~@A&'c R }&(c R @@@'Y@@@  @@" E@@" E@@ @@" F@Ġ,Parraylength0=L..0>L..@;,Parraylength @ @@@ @AUo~@A&>j&?j@@@']@@0ML..0NL..@@ )@@@HM c@@@@@" d@@" d@@@@" e@Ġ*Parrayrefu0\M..0]M..'@;*Parrayrefu >@ ;@@@ @AVo~@A&]k&^k@@@(^@@0lM..(0mM..)@@ H@@@HP @@@@@" @@" @@@@" @Ġ*Parrayrefs0{N.*.00|N.*.:@;*Parrayrefs ]@ Z@@@ @AXo~@A&|m&}m7@@@(-`@@0N.*.;0N.*.<@@ g@@@HS @@@@@" @@" @@;@@" @Ġ&Pisint0O.=.C0O.=.I@;&Pisint |@@@go~@A&p&p@@@(Hb@@@  @@# @@# @@N @@# @Ġ&Pisout0P.J.P0P.J.V@;&Pisout @@@ho~@A&r&r@@@([c@@@  @@# @@# @@a @@# @Ġ*Pbintofint0Q.W.]0Q.W.g@;*Pbintofint @@@@ @AZo~@A&t.0&t.M@@@(rd@@0Q.W.h0Q.W.i@@@@@HX @@@@@#5 @@#5 @@@@#6 @Ġ*Pintofbint0R.j.p0R.j.z@;*Pintofbint @@@@ @A[o~@A&uNP&uNm@@@(e@@0R.j.{0R.j.|@@@@@H[@@@@@#T@@#T@@@@#U@Ġ(Pcvtbint0S.}.0S.}.@;(Pcvtbint @ @@@ @@@ @B\o~@A'vnp'vn@@@(f@@1S.}.1S.}.@@@@@H_(@@@#@@@H`-@@@ @@#|.@@#|.@@ @@#}/@Ġ(Pnegbint1&T..1'T..@;(Pnegbint@5@@@ @A]o~@A''w'(w@@@(g@@16T..17T..@@B@@@HcL@@@@@#M@@#M@@@@#N@Ġ(Paddbint1EU..1FU..@;(Paddbint'@T@@@ @A^o~@A'Fx'Gx@@@(h@@1UU..1VU..@@a@@@Hfk@@@@@#l@@#l@@@@#m@Ġ(Psubbint1dV..1eV..@;(PsubbintF@s@@@ @A_o~@A'ey'fy@@@)i@@1tV..1uV..@@@@@Hi@@@@@#@@#@@$@@#@Ġ(Pmulbint1W..1W..@;(Pmulbinte@@@@ @A`o~@A'z'z.@@@)5j@@1W..1W..@@@@@Hl@@@@@#@@#@@C@@#@Ġ(Pdivbint1X..1X..@;(Pdivbint@$@@@ 3@Aao~@A'{/1'{/j@@;@@$size0@@@@@ '{/A'{/V@@)ck@'is_safe1@@@@@ '{/W'{/h@@)nl@@aA@@@@@1@@@1AA)qm@@1X..1X..@@*@@@Ho@@@3@@$4@@$4@@@@$5@Ġ(Pmodbint1Y..1Y..@;(Pmodbint@$A@@@ 1@Abo~@A'|km'|k@@;@@$size3@@@@@ '|k}'|k@@)n@'is_safe4@@@@@ '|k'|k@@)o@@bA@@@@@2@@@2@A)p@@2 Y..2 Y..@@*@@@Hr!@@@3@@$p"@@$p"@@@@$q#@Ġ(Pandbint2Z..2Z./@;(Pandbint@)@@@ @Aco~@A(}(}@@@)q@@2*Z./2+Z./@@6@@@Hu@@@@@@$A@@$A@@@@$B@Ġ'Porbint29[// 2:[//@;'Porbint@H@@@ @Ado~@A(:~(;~@@@)r@@2I[//2J[//@@U@@@Hx_@@@@@$`@@$`@@@@$a@Ġ(Pxorbint2X\//2Y\//#@;(Pxorbint:@g@@@ @Aeo~@A(Y(Z@@@* s@@2h\//$2i\//%@@t@@@H{~@@@@@$@@$@@@@$@Ġ(Plslbint2w]/&/,2x]/&/4@;(PlslbintY@@@@ @Afo~@A(x(y@@@*)t@@2]/&/52]/&/6@@@@@H~@@@@@$@@$@@7@@$@Ġ(Plsrbint2^/7/=2^/7/E@;(Plsrbintx@@@@ @Ago~@A( (;@@@*Hu@@2^/7/F2^/7/G@@@@@H@@@@@% @@% @@V@@% @Ġ(Pasrbint2_/H/N2_/H/V@;(Pasrbint@@@@ @Aho~@A(<>(<Y@@@*gv@@2_/H/W2_/H/X@@@@@H@@@@@%*@@%*@@u@@%+@Ġ)Pbintcomp2`/Y/_2`/Y/h@;)Pbintcomp@@@@ .@@@ @Bio~@A(Z\(Z@@@*w@@2`/Y/i2`/Y/j@@@@@H@@@@@@@H@@@ @@%R@@%R@@ @@%S@Ġ,Pbigarrayref2a/k/q2a/k/}@;,Pbigarrayref@@@@ @@@ @@@ @@@ @Djo~@A) ) @@@*x@@3a/k/~3a/k/@@@@@H0@@@@@@H5@@ @@@@H:@@@@@@H?@@@3@@%@@@%@@@@@%A@Ġ,Pbigarraydim38b//39b//@;,Pbigarraydim@@@@ @Alo~@A):);@@@*z@@3Ib//3Jb//@@@@@H_@@@@@%`@@%`@@@@%a@Ġ/Pstring_load_163Xc//3Yc//@;/Pstring_load_16:@@@@ @Amo~@A)Z)[@@@+ {@@3ic//3jc//@@@@@H@@@@@%@@%@@@@%@Ġ/Pstring_load_323xd//3yd//@;/Pstring_load_32Z@@@@ @Ano~@A)z){ @@@++|@@3d//3d//@@@@@H@@@@@%@@%@@9@@%@Ġ/Pstring_load_643e//3e//@;/Pstring_load_64z@7@@@ @Aoo~@A)  ) &@@@+K}@@3e//3e//@@@@@H@@@@@&@@&@@Y@@&@Ġ.Pbytes_load_163f//3f//@;.Pbytes_load_16@W@@@ !@Apo~@A)'))'A@@@+k~@@3f//3f//@@@@@H@@@@@&.@@&.@@y@@&/@Ġ.Pbytes_load_323g//3g/0@;.Pbytes_load_32@w@@@ "@Aqo~@A)BD)B\@@@+@@3g/0 3g/0 @@@@@H@@@@@&N@@&N@@@@&O@Ġ.Pbytes_load_643h0 03h0 0@;.Pbytes_load_64@@@@ #@Aro~@A)]_)]w@@@+@@4 h0 0 4 h0 0!@@@@@H@@@@@&n @@&n @@@@&o!@Ġ2Pbigstring_load_164i0"0(4i0"0:@;2Pbigstring_load_16@@@@ '@Avo~@A*24*2P@@@+@@4)i0"0;4*i0"0<@@@@@H?@@@@@&@@@&@@@@@&A@Ġ2Pbigstring_load_3248j0=0C49j0=0U@;2Pbigstring_load_32@@@@ (@Awo~@A*:QS*;Qo@@@+@@4Ij0=0V4Jj0=0W@@@@@H_@@@@@&`@@&`@@@@&a@Ġ2Pbigstring_load_644Xk0X0^4Yk0X0p@;2Pbigstring_load_64:@@@@ )@Axo~@A*Zpr*[p@@@, @@4ik0X0q4jk0X0r@@@@@H@@@@@&@@&@@@@&@Ġ(Pbswap164xl0s0y4yl0s0@;(Pbswap16Z@@@io~@A*u@B*v@L@@@,&@@@  @@&@@&@@, @@&@Ġ'Pbbswap4m004m00@;'Pbbswapm@@@@ .@A}o~@A*MO*Mi@@@,=@@4m004m00@@@@@H@@@@@'@@'@@K@@'@Ġ/Pint_as_pointer4n004n00@;/Pint_as_pointer@@@jo~@A**@@@,X@@@  @@'@@'@@^ @@'@Ġ,Patomic_load4o004o00@;,Patomic_load@@@ko~@A**@@@,k@@@  @@'&@@'&@@q @@''@Ġ'Popaque4p004p00@;'Popaque@@@lo~@A**@@@,~@@@  @@'9@@'9@@ @@':@Ġ(Pdls_get4q004q00@;(Pdls_get@@@mo~@A* "* ,@@@,@@@  @@'L@@'L@@ @@'M@@@ఐ.v,dynamic_size4r004r00@-а@@@.q@@@O@@O'L@O@@O@@ภ.g5 r005 r00@.f@@@.@@@O L@O$@@@@'`%@@@A5"" @@'b@] A@@'@@O~@'@@O}@'w@@O|'q@@O{@@Oz@@OyF@Osg@@@5&""@@ఐ(O7compute_expression_size50t0051t01@(@@@(L(C@@@O@@@O@@O@,@@@O@@O(@@@O@@O@@O35E5D5D5E5E5E5E5E@(,@@@@డ/'#Map%empty%Ident5[t015\t01@ 5_t015`t01@@5dt015et01!@ @(}!a@4@@@:@'-@')E@ @@((@@@OF@OF@O@@@O5@@ఐ(#lam5t01"(@(|(@@(A@@Z(@@(B@T(@@((@((A@(D@O(@A@(@((@(Ҡ@ఠ3lfunction_with_bodym5v1'1+5v1'1>@5fA@@@% @@@OD@O@@O@-[@@@PVD@P@@P%@@@PPD@P@@PD@O@@OD@O355555555@())@)@)@@@࣠@/$uAঠ$kind5v1'1A5v1'1EA3$kind%1@@@ -{-function_kind@@@ @@@ 3¶ms "ߠ@'!t@@@ ؠ@%@@@ @@ @@@ @@A@@+K+++K+,@@-#@3&return%%#@@@ @@B @@+L,,"+L,,5@@-$@3$body.-@@@ @@C)@@+M,6,:+M,6,G@@-%@3$attr7-2function_attribute@@@ @@D4@@,N,H,L,N,H,e@@-&@3#locB @@@ @@E=@@, O,,, O,,@@-'@@@,J++,J++@@-"@ఠVoWVU@67gA@P@@@O36!6 6 6!6!6!6!6!@l6(v1'1'6)w1t1@@@@¶ms60v1'1G61v1'1MA[ఠp@6NhA@_@^@@@O@%t@@@O@@O@@@O$@&return6Nv1'1O6Ov1'1UA_ఠq@6liA@%@@@P5@$body6_v1'1W6`v1'1[@g@6cv1'1^6dv1'1_@@.@@@PD@$attr6nv1'1a6ov1'1eAmఠr@6jA@q@@@PU@#loc6v1'1g6v1'1jAsఠs@6kA@!R@@@P f@@@6v1'1?6v1'1l@@F@Ok@@@@$bodytA6v1'1m6v1'1q@6lA@@366666666@~@@pm@o@nSP@R@Q41@3@2$!@#@"@@@@@@డ5*lfunction'6w1t1v6w1t1@$kind@@@ R@@ Q¶ms#ˠ@(!t@@@ O@&@@@ P@@ N@@@ M@@ L&return&@@@ K@@ J$body.@@@ I@@ H$attr@@@ G@@ F#loc!@@@ E@@ D&`@@@ C@@ B@@ A@@ @@@ ?@@ >@@ =@,55,66@@.K@RQ@@O8@@@P-@@P,MK@J@@@P*@&L@@@P+@@P)@@@P(@@P'G&T@@@P&@@P%E.@@@P$@@P#C-@@@P"@@P!A"@@@P @@P&@@@P@@P@@P@@P@@P@@P@@P37<7;7;7<7<7<7<7<@@@@@@ఐ+$kind7Lw1t17Mw1t1@@@@@@P_G@PaG@P`@ఐ(¶ms7`w1t17aw1t1@@@@@@@P\@&@@@P]@@P[@@@PZG@PfG@Pb8@ఐ+&return7w1t17w1t1@ް@@&@@@PXG@PkG@PjL@ఐ$body7w1t17w1t1@V@@Y@ఐ,$attr7w1t17w1t1@@@@@@PTG@PnG@Pmm@ఐ/#loc7w1t1@@@"@@@PRG@PrG@Pq@@ @@ @6A@#D@Pv@A@@@ 77֐7 {1. Function Lifting} 7y117y11@@@@@@377777777@A:@;@<@@A+/lifted_functionvD788788@@;@@$lfunw@@6C)lfunction@@@Pw7887883@@8 nA4free_vars_block_sizex@@7@@@Pz784887848S@@8oA@@A@@@@@88888T8W@@@@8mA@#888@@@Ш@г"&Lambda888"888(@)888)8882@@@1388888888@F?;@@@A@@@@@@@@@@ @@8@@Px@2@#..)8%848L@(@@Ш@г1#int8.848O8/848R@@9@@<@@P{@8@@A@4@@43@_A+,split_resultyE8=8Y8a8>8Y8m@А!a@P38D8C8C8D8D8D8D8D@tmg;@@P@A@A@G@B@@@8R8Y8Y8S88@@@@8kpA@@8V8Y8^8W8Y8`@@BA@;@A+Unreachablez@@8b8p8r8c8p8@@8{qA)Reachable{@@@P.F@P@@8s88!@@8rA@@A@Y@@@@@&@@@#@#8|8p8t@@@@@#888888@@г/lifted_function888888@@#G@@А!a#L888B@@@@#@@A@D@@DC@388888888@N@@@ఠ$let+|888888@8sA@@@x@@PF@P@@@PF@P@@P@@@@P@@PF@PA@PF@P@@P@@@PF@P@@PF@P@@PF@P388888888@w@@@࣠@#res~A888888@8tA@@3388888888@B888889 @@@@@  @@!fA888888@9uA@@6388888888@!J@@@@@@@@ఐ)#res988988@@@X399999999@J@@@@@Ġ+Unreachable988988@;f@@P@@@@AA@A@@@@@@m399999999@@@@@n@@@ภ+Unreachable9 889!88@@@@[ @Ġ)Reachable9-889.88@;@B@AA@A@@ఠ$func98889988@9QvA@@@@@P;@ఠ#lam9F899G89@9_wA@@F@PH@@@ 9M89@@J@@J@@@ภ)Reachable9T89 9U89@'ఐ&$func9^899_89@%@&@'@@@@@PJ@PJ@P39f9e9e9f9f9f9f9f@g8 *#@$@%@@@ఐ!f9w899x89@s@@@@ఐ>#lam989989@@@=@@@@@@5@@ @@@A988@@r@A@F@Q@A@@@@@99999: @@(Asttypes,mutable_flag@@@Q399999999@@@@@@0lifted_block_mut@9xA@@@Qг(Asttypes99:99:@99:99:%@@@%@@@Q  @@,+A@@*@@@Q%@ภ)Immutable99:(99:1@;)Immutable/,mutable_flag@@@(@@@@B@@A/gWk/gWt@@@/R@@@гEC10H-*@ @@@QI)@A@@T@@@Q"F@Q!O@A@999%@@&@R@ఠ&no_loc9:3:7::3:=@:yA@@)Debuginfo/Scoped_location!t@@@Q%F@Q#3: : : : : : : : @nlx@{@i@@@ภ)Debuginfo::3:@::3:I@/Scoped_location:!:3:J:":3:Y@@+Loc_unknown:':3:Z:(:3:e@@;+Loc_unknown'@@@6@@@@AA@A4lambda/debuginfo.mli\\@@@*I@@@@1@@@Q&*@A@:::3:3@@@-Aఠ5split_static_function:G:g:o:H:g:@:`zA@@@,g@@@`F@QY@@Qx@-o#Set!t@@@_F@Q]@@Qw@2@@@QF@Qa@@Qv48&lambda@@@Qu@@@Qt@@Qs@@Qr@@Qq3:r:q:q:r:r:r:r:r@g|u@v@w@@@࣠@)block_varA::g:::g:@:|A@@83::::::::@G@B@@QZ@?@@Q^@8@@Qb54@@@Qe@@@QfG@Qc@@QdG@Q_@@Q`G@Q[@@Q\G@Q'@\@],rebuild_arms@^F@QN@@QM@[F@QL@@QK@:1@!a@QO@9!&lambda@@@QJ@@QX@@@QW@@QV:J@@96&lambda@@@QF@@QU@@@QT@@@QS@@QR@@QQ@@QP@:xUU:xUU@@:{A@@@@fe@@,local_identsA::g:::g:@; }A@@3::::::::@p|@s@t@@@@@@#lamA;:g:;:g:@;~A@@3;;;;;;;;@@@@@@@@@ఐ#lam;::;::@@@@@3;;;;;;;;@@@@Ġ$Lvar;%::;&::@-@ఠ!v;.::;/::@;GA@@-H@@@Q3;2;1;1;2;2;2;2;2@@@@@@@@@@@@@@ఠ%param;A;B;J;B;B;O@;ZA@@.[!t@@@RL@R3;I;H;H;I;I;I;I;I@4$@@@@@డ5+,create_local%Ident;\;B;R;];B;W@ ;`;B;X;a;B;d@@@&stringQ@@@\@@['@@@Z@@Y@-.b##-/b#@@@.E@@@@@@@R@@R6@@@R@@R4@@-let_rec_param;;B;f;;B;s@@;;B;e;;B;t@@)@@@RM@RM@RH@@9 @@NI@A@;;B;F @@@ఠ'ap_func;;x;;;x;@;A@@3Q@@@RL@R3;;;;;;;;@_oh@i@j@@@ภ%Lprim;;;;;;@&ภ&Pfield;;;;;;@@;;;;;;@@@@@RL@RL@R"@ภ'Pointer;;;;;;@;'Pointer@@@ @@@AB@@A1aVX1aVa@@@3K@@  @@@@@RL@R;@ఐD0lifted_block_mut;;;;;;@ް@@&@@@RL@RL@RM@@<;;;@@.X@@@RL@RT@ภ%<;;<;;A2ภ$Lvar < ;;@.'ఐ)block_var<;;<;;@ @@o@@@@3@@@RL@RL@Rw@ภ%"A1@#A@;@@@RL@R@@;;@@S=I@8ภ'Curried=<==<=@;'Curried*@@@ s@@@@B@@A3!D!Y3!D!`@@@5@@  @@5@@@SM@Sd@Jภ'>= =>= =)A4$@ఐޠ%param>= =@t@@Z@@@SM@SM@SM@S@@ภ'Pgenval>2= =!>3= =(@;'Pgenval-f@@@ 8@@@@CA@A4243 @@@5@@  @@-s@@@SM@SM@S@@6@@@(@@@SM@SM@S@ภ'?$EA3@%FA@=@@@SM@S@@>_= =N@@@@@SM@S@ภ'Pgenval>o=*=:>p=*=A@=@@@-@@@S}M@S@ఐ*$body>=B=K>=B=O@ܰ@@62@@@S{M@SM@S@డ<6default_stub_attribute>=P=^>=P=t@@@@ @4AA4AB@@6Dc@  @@@@@SyM@SM@S@ఐ&no_loc>=u=>=u=@<@@)@@@SM@S@@ @@@A@><< @@@ఠ&lifted>==>==@>A@@@@@SL@S3>>>>>>>>@,:3@4@5@@@ຠ3 @@@P@@@3@@A@A@@A@론$lfun>==>==@ఐO'wrapper>==>==@@@@@@SL@S#@4free_vars_block_size>==>==@A>==?==@@ @@@SL@S6@@@?==?==@@?9@A@? ==@@ภ)Reachable?==?==@ఐU&lifted?==?==@T@U@V@@@@@SK@SK@S3?#?"?"?#?#?#?#?#@Wf @@@ภ%Lprim?/==?0==@* ภ*Pmakeblock?8==?9=>@@??=> ?@=> @@"@@@SK@SK@S"@ఐ0lifted_block_mut?P=> ?Q=>@A@@/@@@SK@SK@S4@ภ$None?a=>?b=>#@4@@@8@@@SK@SC@@2?j=>$@@1@@@SK@SJ@ภ(?v=>'?w=>.A5ภ$Lvar ?=>+@1ఐZ!v?=>,?=>-@<@@1@@@TK@TK@Tl@@ @@7A@@@SK@T K@Tt@ภ()A58@*A@?@@@TK@T@@?=>&2@@*@@@SK@T @ఐ&no_loc?=>0?=>6@B@@*@@@T!K@T @@?=>7@@>U@@@SK@S@@?=>8@@ @@@S@@@@@@+@@@@q@ @@(@= @@@@@R@@@R@Ġ)Lfunction?>9>=?>9>F@/Mఠ$lfun?>9>G?>9>K@@A@@/U@@@Q3????????@@@@@@@@@@@@@@ఠ)free_vars@>O>W@>O>`@@A@@2#Set!t@@@_hL@T&3@ @ @ @ @ @ @ @ @' @!@"@@@డ>n.free_variables&Lambda@>O>c@ >O>i@ @#>O>j@$>O>x@@@7@@@ {@@ z'@@@ y@@ x@6)996*99@@7P@@@@7@@@T+@@T*6@@@T)@@T(1@@ఐ^$lfun@L>O>y@M>O>}@=@@/@@@_n@_lE@$body@X>O>~@Y>O>@ `@@8 @@@_jM@_oM@_mS@@D @@\T@A@@d>O>S @@@ఠ/local_free_varsѠ@o>>@p>>@@A@@@@@_L@_p3@u@t@t@u@u@u@u@u@j}v@w@x@@@డ:X#Set%inter%Ident@>>@>>@ @>>@>>@@@>>@>>@ @@C@@@U@@U@J@@@U@@UM@@@U@@U@@U@2g@+Stdlib__SetJ@!@@@W@@@_x@@_w@^@@@_v@@_ua@@@_t@@_s@@_rF@@ఐǠ)free_vars@>>@>>@P@@u@@@_M@_M@_Z@@ఐ,local_idents@>>@>>@հ@@g@@T@@kh@A@@>>@@@@ఠ4free_vars_block_sizeҠ@>>@>>@A A@@#intA@@@`1L@_3@@@@@@@@@@@@@@@ఠ%substӠA>>A>>@A A@@4"8@@@`qO@`8@@@`xL@_@@ఠ0block_fields_revԠA>>A>>@A7A@@@8@@@`L@`@@@`L@_1@@>@@@>@)@@@_:@డ;#Set$fold%IdentAG??AH?? @ AK??AL??@@AP??AQ??@ @@@#elt@@@V!@@V @#acc@T@@V@@V@@V@@V@@@@V@@V@@@V@@V@@V@@V@31@\@/%@@@@"@@@_@@_@@@@o@@`L@_L@_@@_ @@_@@_@@_@;@@@_@@_@@@_@@_@@_@@_3AAAAAAAA@@@@@࣠@#varAA??A??@AA@@S@@@_@@@@;A@ఠ!i֠A??!A??"@AA@@L@_3AAAAAAAA@%n@@@_@@ @@@@ఠ%substנA??$A??)@AA@@L@_@@ఠ&fieldsؠA??+A??1@AA@@L@_"@@A?? A??2@@@+@@ @@_-@@  @@@ఠ&access٠B?6?DB?6?J@BA@@9@@@_P@_3BBBBBBBB@EPI@J@K=6@7@80)@*@+@@@ภ%LprimB?M?YB?M?^@,ภ&PfieldB?M?`B ?M?f@_ఐh!iB)?M?hB*?M?i@@@g#@ภ'PointerB3?M?kB4?M?r@`@@@@@@_P@_2@ఐ0lifted_block_mutBC?M?tBD?M?@4@@|@@@_P@`P@_D@@/BN?M?@@4@@@_P@_K@ภ+gBZ??B[??A8mภ$Lvar Bc??@4}ఐ점)block_varBl??Bm??@v@@ f@@@@:@@@_P@`P@`n@ภ+e"A8@#A@A@@@` P@`{@@B??+@@-\@@@_P@`@ఐ&no_locB??B??@@@-d@@@`P@`@@B??@@:H@@@_@A@B?6?@@@@డA$succB??B??@@@@@@@@@@@@(%succintAA @@@*stdlib.mli*+_+_*+_+@@9l@@@@@@@`(@@`'@@@`&@@`%3BBBBBBBB@@@@@@@ఐ!iB??B??@հ@@@@4@@P@`/@@డ<#Map#add%IdentB??B??@ B??B??@@C??C??@ @1 @@@4@@@`=@@`<@@@`;@6*@@@`:@@`96. @@@`7@@`6@@`5@@`4J@@ఐ#varC'??C(??@`@@@@@`cZ@@ఐ7&accessC7??C8??@d@@(g@@ఐo%substCD?@CE?@@8@@nt@@O@@6];@@@`Yy@@ภ"::CT?@CU?@@9gภ$LvarC]?@C^?@ @5xఐ#varCg?@ Ch?@@@@@@@`@@@@GO@`@ఐ&fieldsCx?@Cy?@@k@@@@@@;,X@@@`@@C??C?@@@@@A@@@`@ @@ @C??C?@@@@;@@@_@@_@@@_@@_@@_M@`M@`@@ఐ9/local_free_varsC@@$C@@3@@@ U@@@_M@`M@`@@@@C@@5C@@6@@M@`%@@డ=#Map%empty%IdentC@@8C@@=@ C@@>C@@A@@C@@BC@@G@ @w @@6L@`@@@`I@@ภ-+C@@IC@@K@9@@@L@`U@@C@@4C@@L@@oL@`Z@@@@r@A@C>>@@@ఠ'new_fun۠DAADAA@DA@@3l@@@`L@`3D DDD D D D D @$@@@@ @@@@@ఐ3lfunction_with_bodyDAADAA@ G@@@3@@@`@@`@;@@@`@@`3@@@`@@`@@`3D-D,D,D-D-D-D-D-@$@@@@ఐM$lfunD;AAD<AA@,@@3@@@`M@`M@`9@@డB%subst&LambdaDUAADVAA@ DYAADZAA@@@@6{!t@@@ @@ @1value_description@@@ @@ @#Env!t@@@ @@ !t@@@ @@ @@ @@ @@ 7freshen_bound_variables.I +@@@ @@@ @@ @6#Map!t\A@DAADAA@@@@@a;@@@@>hA@EAAE AA@@@@@aM@@@@#envAEAAEAA@E0A@@@@@aY@@@@ఐ#envE'AAE(AA@@@@aX@@@@@@@a^Q@a]3E0E/E/E0E0E0E0E0@(% @@@E6AAE7AA@@@@@@a.@@a-@@@@a,@@a+@@@@a*@@a)@@@a(@@a'@@a&@@a%N@aN@axH@͐ภ$NoneEi:@Ei@Ѡ@@@a@@@a@@a5@@ఐh%substEoAAEpAA@`@@8=#@@@a N@aN@a@@@aM@@ఐ$lfunEAAEAA@z@@4@@@a@aa@$bodyEAAEAA@@@=F@@@aN@aN@ao@@EAAEAA@@=P@@@`@aN@a@@ @@@A@EAA @@@ఠ&liftedߠEBB EBB@EA@@@@@aL@a3EEEEEEEE@@@@@@ຠ$lfunEBBEBB@ఐѠ'new_funEBBEBB$@@@ @@@aL@a@4free_vars_block_sizeEBB&EBB:Aఐ @@ @@@aL@a0@@@EBBEBB<@@83@A@EBB@@@ఠ%blockEB@BHEB@BM@FA@@=@@@aL@a3FFFFFFFF@IWP@Q@R@@@ภ%LprimFBPBVFBPB[@0ภ*PmakeblockFBPB]FBPBg@@F BPBiF!BPBj@@@@@aL@aL@a"@ఐ 0lifted_block_mutF1BPBlF2BPB|@ "@@@@@aL@aL@a4@ภ$NoneFBBPB~FCBPB@;@@@@@@aL@aC@@2FKBPB@@8@@@aL@aJ@డD$List#revF_BBF`BB@ FcBBFdBB@@@9*!a@0H@@@0@@093 @@@0@@0@2e2e@@2M@@@@>5@@@aL@bL@aL@a@@@a@@a @@@a@@a@@ఐ0block_fields_revFBBFBB@@@9"@@@aM@aM@a@@J @@1%@@@aL@bM@a@ఐ &no_locFBBFBB@ D@@1@@@bL@b@@FBB@@>m@@@a@A@FB@BD@@ภ)ReachableFBBFBB@ ఐ"&liftedFBBFBB@Ѱ@@t@@@bK@bK@b3FFFFFFFF@@@@@@ఐ%blockFBBFBB@ @@1@@@bK@bK@b@@*FBB@@K@@@b@7@@@ @@@@U@@@  @@@! @@ @ @@0@Ġ$LletG BBGBB@6Hఠ%lkindGBBGBB@G/A@@6P@@@Q3GGGGGGGG@ @@@ఠ%vkindG%BBG&BB@G>A@@6Y@@@Q@ఠ#varG3BBG4BC@GLA@@6a@@@Q@ఠ#defGABCGBBC@GZA@@>@@@Q+@ఠ$bodyGOBC GPBC @GhA@@>@@@Q9@@@JGWBC@@ ;@@ ;@@@$let+G_CCG`CC@ @?@@@bK@bK@b!L@b@@@b L@b&@@b)@@@@b#@@@bK@bK@b"@@b$@@b'٠ L@b@@@bL@b%@@b(@@b*L@bఐ N5split_static_functionGC"C(GC"C=@ @@@ M@@b3@ H@@b2@ ?@@b1 : 9@@@b0@@@b/@@b.@@b-@@b,3GGGGGGGG@ @@@@}@~@wp@q@rjc@d@e@@@@ఐ @)block_varGC"C>GC"CG@ ʰ@@ t@@డA#Set#add%IdentGC"CIGC"CN@ GC"COGC"CR@@GC"CSGC"CV@ @@@@@U@@U@ @@@U@@U @@@U@@U@@U@9@KF@ @@@@@@bR@@bQ@ @@@bP@@bO @@@bN@@bM@@bL]@@ఐߠ#varHC"CWHC"CZ@a@@@@@bpM@boo@@ఐ 5,local_identsH$C"C[H%C"Cg@ @@ |@@H(C"CHH)C"Ch@@ @@@bf@@ఐ蠐$bodyH7C"CiH8C"Cm@@@ L@b@@@@@@@bL@bB@HDCuC@@$bodyHLCCHMCC@HeA@@@@@ภ$LletHVCuCyHWCuC}@7ఐJ%lkindH`CuCHaCuC@@@7@@@bL@bL@b3HgHfHfHgHgHgHgHg@'@@@@@ఐP%vkindHuCuCHvCuC@Ű@@7@@@bL@bL@b@ఐT#varHCuCHCuC@ְ@@7@@@bL@bL@b'@ఐX#defHCuCHCuC@@@@J@@@bL@bL@b9@ఐb$bodyHCuCHCuC@A@@@D@@Yk@@1E@AQl@@3HHHHHHHH@@@@Ġ'LmutletH CCH CC@6Iఠ%vkindH CCH CC@HA@@7@@@Q3HHHHHHHH@ @@@ఠ#varH CCH CC@HA@@6\@@@Q@ఠ#defH CCH CC@HA@@@@@@Q@ఠ$bodyH CCH CC@IA@@@@@@Q+@@@<H CC@@-@@-@@@^$let+H CCI CC@]@[@@@@c$K@c+K@bL@b@@@bL@b@@b@@@@b _@@@c.K@cK@b@@b@@by L@b@@@bL@b@@b@@bL@bఐ5split_static_functionI5 CCI6 CC@@@@@@b@@@b@@@bڠ@@@b@@@b@@b@@b@@b3IHIGIGIHIHIHIHIH@6@@{@|@}un@o@pha@b@c@@@@ఐޠ)block_varI^ CCI_ CC@h@@@@డCA#Set#add%IdentIu CCIv CD@ Iy CDIz CD@@I~ CDI CD@ @ @@@*@@@b@@b@3@@@b@@b6@@@b@@b@@bH@@ఐʠ#varI CD I CD @N@@F@@@bM@bZ@@ఐ,local_identsI CD I CD@@@Zg@@I CCI CD@@[@@@bm@@ఐӠ$bodyI CDI CD@q@@`L@c|@@@@@@@cL@b@I D'DJ@@$bodyI CCI CC@IA@@@@@ภ'LmutletI D'D+I D'D2@7oఐ'%vkindI D'D4I D'D9@@@9"@@@c!L@c&L@c%3IIIIIIII@'@@@@@ఐ-#varJ D'D;J D'D>@@@7@@@c"L@c(L@c'@ఐ1#defJ D'D@J D'DC@°@@A@@@c#L@c*L@c)'@ఐP$bodyJ$ D'DEJ% D'DI@/@@2@@GY@@ 3@A*Z@@ V3J&J%J%J&J&J&J&J&@@@@Ġ'LletrecJ4DKDOJ5DKDV@7?ఠ(bindingsJ=DKDXJ>DKD`@JVA@@7G7D@@@Q@@@Q3JEJDJDJEJEJEJEJE@/@@@ఠ$bodyJPDKDbJQDKDf@JiA@@A@@@Q@@@$JXDKDg@@@@@@@@ఠ,local_identsJcDkDsJdDkD@J|A@@@@@cL@c/3JiJhJhJiJiJiJiJi@U6/@0@1$@@@@@డH$List)fold_leftJ~DDJDD@ JDDJDD@@7$@@@@'L@c4@@c=@7@@@ccL@c7@@c< @@c;@@c:@@c9@@@c8@=`@@@c6@@c5@@c3@@c2@@c13JJJJJJJJ@9@@@@࣠@#idsAJDDJDD@JA@@*L@@@@DAঠ"idJDDJDDA6ఠ@JA@6@@@cd3JJJJJJJJ@e%E@@@@@@@JDDJDD@@BP@ca@@@@డD#Set#add%IdentJDDJDD@ JDDJDD@@JDDJDD@ @ @@@ @@@cn@@cm@@@@cl@@ck@@@cj@@ci@@ch3KKKKKKKK@:B?@A@@@@@@ఐI"idKDDKDD@ @@ @@@cP@c@@ఐw#idsK(DDK)DD@X@@"@@A@@P@c%@K/DDK0DD@@@@@cV@@@cU@@cT@@cSM@cM@c@@ఐX,local_identsKGDDKHDD@@@@@@ఐ(bindingsKTDDKUDD@@@>@@@cPM@cM@c@@ @@@A@KaDkDo @@Ƞ$let+KiDDKjDD@@ŠC&@@@cK@cK@cL@c@@@cL@c@@c@@@@c @@@cK@cK@c@@c@@c L@c@@@cL@c@@c@@cL@cఐX5split_static_functionKDDKDE@@@@W@@c@R@@c@I@@cDC@@@c@@@c@@c@@c@@c3KKKKKKKK@JXQ@R@S@@@@ఐB)block_varKDEKDE@̰@@v@@ఐl,local_identsKDEKDE'@@@k@@ఐ$bodyKDE(KDE,@n@@zL@c,@@C@@6q@@@cL@c3@KE4EP@@$bodyKDDKDD@L A@@}@@@@ภ'LletrecKE4E8KE4E?@9ఐȠ(bindingsLE4EALE4EI@@@99@@@c@@@cL@cL@c3LLLLLLLL@_+@"@#@@@ఐ0$bodyLE4EKLE4EO@ @@@@'9@@@A:@@ R@@@cK@c3L&L%L%L&L&L&L&L&@t@@@B@@ X@Ġ%LprimL5EQEUL6EQEZ@7Ġ&PraiseL>EQE\L?EQEb@!@LCEQEcLDEQEd@@!@@@Q@@@ @@>@@@Q@@LOEQEfLPEQEg@@7%C@@@Q@@@Q@@L[EQEiL\EQEj@@7(@@@Q@@@,LaEQEk@@@@@@@ภ+UnreachableLhEQEoLiEQEz@W@@@ #@Ġ,LstaticraiseLuE{ELvE{E@2@LzE{EL{E{E@@2@@@Q7@@@2D.@@@Q@@@Q@@@@@@$A@@$A@@@ภ+UnreachableLE{ELE{E@~@@@ J@Ġ'LswitchLEELEE@6ؠఠ#argLEELEE@LA@@DS@@@Q3LLLLLLLL@@@@ఠ"swLEELEE@LA@@6@@@Q@ఠ#locLEELEE@LA@@7@@@Q@@@.LEE@@f@@f@@@@ఠ-sw_consts_resLEELEE@LA@@  @6@@@d3L@d @@@@d(@@d'@@@d&@@@d%L@d3LLLLLLLL@TM@N@OF?@@@A92@3@4@@@ఐW,rebuild_armsMEEMEE@[@@@[@@d@Y@@d@W@2@R@@@d@@d@@@d @@d ON@B@M@@@d @@d @@@d@@@d@@d@@d@@d=@@ఐ)block_varM8EEM9EE@B@@J@@ఐV,local_identsMEEEMFEE@>@@W@@ఐ"swMTEEMUEE@`@@7@@@d5@d0k@)sw_constsM`EEMaEF@7@@@@@@@d,@@d+@@@d*M@d6M@d1@@t@@@A@MvEE@@@ఠ-sw_blocks_resMFFMFF@MA@@@7 @@@djL@dA@@@@d_@@d^@@@d]@@@d\L@d93MMMMMMMM@@@@@@ఐ,rebuild_armsMFFMFF+@@@@@@dH@@@dG@@.@@@@dF@@dE@@@dD@@dC@>@@@@dB@@d@@@@d?@@@d>@@d=@@d<@@d;9@@ఐ`)block_varMFF,MFF5@@@F@@ఐ,local_identsMFF6MFFB@@@S@@ఐH"swMFFCMFFE@@@84@@@dl@dgg@)sw_blocksNFFFN FFO@7@@V@@Q@@@dc@@db@@@daM@dmM@dh@@t@@@A@NFF @@@ఠ1sw_failaction_resN)FSF[N*FSFl@NBA@@EΠʠ@@@d@@@dL@du@@@dL@dp3N9N8N8N9N9N9N9N9@@@@@@డL&Option#mapNLFoFuNMFoF{@ NPFoF|NQFoF@@Ce@@@@L@dx@@d{,@@dz@@dy@C_ @@@dw@@dvF7@@@dt@@ds@@dr.@@ఐ/5split_static_functionNvFoFNwFoF@@@@.@@d@)@@d@ @@d@@@d@@@d@@d@@d@@dP@@ఐ)block_varNFoFNFoF@@@J]@@ఐ,local_identsNFoFNFoF@@@Nj@@NFoFNFoF@@@H@@dCB@@@d@@@d@@dx@@ఐ "swNFoFNFoF@̰@@8@@@d@d@-sw_failactionNFoFNFoF@8@@CРz@@@dM@dM@d@@ @@@A@NFSFW @@@ఐ-sw_consts_resNFFNFF@J@@@8@@@d@@@@d@@d@@@d@@@d3NNNNNNNN@@@@@@@ఐ-sw_blocks_resO FFO FF@ΰ@@?>@8@@@dƠ@@@@@d@@d@@@d@@@d#@@ఐ1sw_failaction_resO*FFO+FG@,@@F̠Ơ@@@d@@@d@@@d:@@R@@@S@2@@@dC@@Ġ+UnreachableOO G GOP G G@>@@@@@8@@@d@@@@d@@d@@@d@@@d3OcObObOcOcOcOcOc@h@@@@Ġ+UnreachableOo G GOp G G*@^@@@@@8@@@e@@@@e@@e@@@e@@@d @@Ġ$NoneO G G-O G G1@D@@@@G2,+@@@e @@@e @@@e 8@Ġ$SomeO G G4O G G8@E-Ġ+UnreachableO G G9O G GD@@@@@FE@@@e@@@eQ@@@ @@GWQP@@@e@@@e@@@e]@@O G G,O G GE@@Ge_^@@@e@@@e@@@ek@@ @@@@f@@@et@ @@@9@@@e"@@@@e#@@e!@@@e @@@e@&%@9w@@@e'@'@@@e(@@e&@@@e%@@@e$@G@@@e+@@@e*@@@e)@@e@@@ภ+UnreachableP G GIP G GT@ @@@K^@@@g@@@@g?@@Ġ)ReachableP3!GUG[P4!GUGd@ఠ$lfunP<!GUGfP=!GUGj@PUA@@@@@eT3P@P?P?P@P@P@P@P@@E@@@ఠ)sw_constsPK!GUGlPL!GUGu@PdA@@}@9@@@eW@@@@eX@@eV@@@eU@@@-P`!GUGv@@@:@@@e\@@@@e]@@e[@@@eZ@@@eY2@@Ġ+UnreachableP}!GUGxP~!GUG@l@@@@@:@@@eh@@@@ei@@eg@@@ef@@@eeQ@@Ġ$NoneP!GUGP!GUG@F@@@@H@:9@@@eq@@@ep@@@eoi@Ġ$SomeP!GUGP!GUG@F;Ġ+UnreachableP!GUGP!GUG@@@@@TS@@@e|@@@e{@@@ @@He_^@@@e@@@e~@@@e}@@P!GUGP!GUG@@Hsml@@@e@@@e@@@e@@ @@@@f@@@e@ @@@:@@@e@@@@e@@e@@@e@@@e@43@:@@@e@5@@@e@@e@@@e@@@e@H@@@e@@@e@@@e@@e@@@ภ)ReachableQ)"GGQ*"GG@ఐ$lfunQ3"GGQ4"GG@@@@@@@@gPM@gRM@gQ3Q;Q:Q:Q;Q;Q;Q;Q;@B  @@@@@ภ'LswitchQI"GGQJ"GG@;ఐ#argQS"GGQT"GG@`@@I@@@gZM@g^M@g]@Р;;@@@g}M@g{@;)sw_constsQn"GGQo"GGAఐ, @5@;@;@@@gn@I.@@@go@@gm@@@glM@gpJ@;;@@@gM@g@;;@;@@@g@II@@@g@@g@@@gM@g@;e;cIT@@@g@@@gM@g@@ఐ"swQ"GGQ"GG@°@@;@@@gM@gM@gz@Q"GGQ"GG@@;@@@g[M@g@ఐ#locQ"GGQ"GG@۰@@<@@@g\M@gM@g@@Q"GG@@@@@gOM@gY@@Q"GG@@@@Ġ+UnreachableQ#GGQ#GG@@@@@&%@;@@@e@'@@@e@@e@@@e@@@e3RRRRRRRR@ @@@@Ġ)ReachableR#GGR#GH@ఠ$lfunR#GHR#GH@R3A@@@@@e@ఠ)sw_blocksR(#GHR)#GH@RAA@@Z@;@@@eɠ@\@@@e@@e@@@e4@@@,R=#GH@@po@;@@@eΠ@q@@@e@@e@@@e@@@eJ@@Ġ$NoneR\#GHR]#GH@G@@@@I@@@e@@@e@@@eb@Ġ$SomeRp#GHRq#GH @GĠ+UnreachableRy#GH!Rz#GH,@h@@@@@@@e@@@e{@@@ @@J#@@@e@@@e@@@e@@R#GHR#GH-@@J1+*@@@e@@@e@@@e@@ @@@@f@@@e@ @@ܠ۠@`@@@gM@gM@g@@S$H1Hq@@@@@gM@g@@S$H1Hr@@@@Ġ+UnreachableS%HsHyS%HsH@@@@@@=W@@@f"@@@@f#@@f!@@@f @@@f@@Ġ+UnreachableS%HsHS%HsH@@@@@@=T@@@f.@@@@f/@@f-@@@f,@@@f+@@Ġ$SomeS%HsHS%HsH@IvĠ)ReachableS%HsHS%HsH@ɠఠ$lfunS%HsHT%HsH@TA@@@@@f:@ఠ*failactionT %HsHT%HsH@T&A@@@@@f;@@@T%HsHT%HsH@@@@@f=@@@f< @@@2 @@K@@@f@@@@f?@@@f>,@@|@@@}@`@@@fA5@ @@ih@=@@@fF@j@@@fG@@fE@@@fD@@@fC@~@=@@@fK@@@@fL@@fJ@@@fI@@@fH@L@@@fO@@@fN@@@fM@@fBp@@@@ఠ&switchTx&HHTy&HH@TA@@L(@@@gN@g3T~T}T}T~T~T~T~T~@@@|u@v@w@@@ภ'LswitchT'HHT'HH@>Ƞఐ#argT'HHT'HH@@@LG@@@hN@hN@h@Р>V>W@@@hN@h@>Q>R@>Q@@@h)@Le@@@h*@@h(@@@h'N@h"@>M>N@@@h/N@h-@>J>K@>J@@@h9@L@@@h:@@h8@@@h7N@h2@>-sw_failactionT'HHT'HH@ภ$SomeT'HHT'HI@Jqఐ堐*failactionT'HIT'HI @o@@L@@@hN@hN@hN@h}@@ @@> @@@hN@h@@ఐY"swU 'HHU'HH@@@?G@@@h?N@h6N@h@U'HHU'HI@@?O@@@hN@h@@ఐe#locU''HIU('HI@2@@?@@@hN@hDN@hC@@U2'HI@@L@@@h@A@U7&HH@@ภ)ReachableU>)II$U?)II-@ఐI$lfunUH)II/UI)II3@ư@@@@@hMM@hOM@hN3UOUNUNUOUOUOUOUO@@@@@@ఐ堐&switchU])II5U^)II;@ @@@@@hLM@hQM@hP@@*Uh)II<@@@@@hK@7@@P@@Ġ)ReachableU*I=ICU*I=IL@S@U*I=IMU*I=IN@@@@@fx@@@@?.@@@f{@@@@f|@@fz@@@fy@@@@@ϠΠ@?B@@@f@@@@f@@f@@@f~@@@f}@@Ġ)ReachableU*I=IPU*I=IY@@U*I=IZU*I=I[@@U@@@f@@@@?E@@@f@@@@f@@f@@@f@@@@@@?Y@@@f@ @@@f@@f@@@f@@@f@@@U*I=I]U*I=I^@@M@@@f@@@f@@@f@@| @@@c@,@@@f@ @@@Ġ)ReachableV*I=IaV*I=Ij@@V*I=IkV*I=Il@@@@@f@@@J@?@@@f@L@@@f@@f@@@f.@@@@@_^@?@@@f@`@@@f@@f@@@f@@@fC@@@VE*I=InVF*I=Io@@yx@?@@@f@z@@@f@@f@@@f@@@f]@@Ġ$SomeVc*I=IqVd*I=Iu@KĠ)ReachableVl*I=IwVm*I=I@?@Vq*I=IVr*I=I@@@@@fx@@@ @@@f}@@@V|*I=IvV}*I=I@@@@@f@@@f@@@# @@N%@@@f@@@f@@@f@@@@@i@Q@@@f@ @@@@@@ѠР@@D@@@fנ@@@@f@@f@@@f@@@fԠ@@@8@@@fܠ@@@@f@@f@@@f@@@f٠@Njdc@@@f@@@f@@@f@@f@@@V+IIV+II@@@@@@@f@@@@f@@f@@@f@@@f@@Ġ)ReachableV+IIV+II@Ϡ@W+IIW+II@@@@@g@@@6@@@@@g@8@@@g@@g@@@g@@@@@KJ@@@@@g@L@@@g @@g@@@g@@@g/@@Ġ$SomeW5+IIW6+II@LĠ)ReachableW>+IIW?+II@@WC+IIWD+II@@@@@gJ@@@@@@gO@@@WN+IIWO+II@@@@@g@@@gY@@@# @@N@@@g@@@g@@@ge@@@@@@Q@@@gn@ @n@@@@@@A@@@g.@@@@g/@@g-@@@g,@@@g+@@A @@@g3@@@@g4@@g2@@@g1@@@g0@O<65@@@g7@@@g6@@@g5@@g*@@@డP+fatal_error$MiscW,IIW,II@ W,IIW,II@@P@@@P@@@hV@@hU@@@ha@@@h`N@hT@@hS@@:letrec: multiple functionsW,IIW,II@@W,IIW,II@@Q@@@h]N@h_N@h^@@- @@@@@AWFFW-II@@%@@@j@@@j@  @@ @  @@  Q@ y @@ @Ġ-LstringswitchW.IIW.II@?ఠ#argX.IIX.IJ@XA@@O@@@Q3XXXXXXXX@@@@ఠ$armsX.IJX.IJ@X*A@@?@?@@@Q@O@@@Q@@Q@@@Q@ఠ*failactionX,.IJ X-.IJ@XEA@@@O@@@Q@@@Q.@ఠ#locX>.IJX?.IJ@XWA@@C @@@Q<@@@MXF.IJ@@>@@>@@@@ఠ(arms_resXQ/JJ&XR/JJ.@XjA@@@@E@@@jL@j̠@@@@j@@j@@@j@@@jL@j3XjXiXiXjXjXjXjXj@Xtm@n@of_@`@aLE@F@G;4@5@6@@@ఐՠ,rebuild_armsX/JJ1X/JJ=@ٰ@@@@@j@@@j@ՠ@4@@@@j@@j@@@j@@j̠͠@D@@@@j@@j@@@j@@@j@@j@@j@@j?@@ఐ6)block_varX/JJ>X/JJG@@@jL@@ఐԠ,local_identsX/JJHX/JJT@@@nY@@ఐ$armsX/JJUX/JJY@_@@@}@@@@j@@j@@@jM@jM@jw@@f@@x@A@X/JJ"@@@ఠ.failaction_resX0J]JeX0J]Js@Y A@@P@@@k=@@@k1JvJY?1JvJ@@@@@@k#@@@k"@@@k!@@@k @@@k@@k@@k@@kP@@ఐޠ)block_varY^1JvJY_1JvJ@h@@]@@ఐ|,local_identsYk1JvJYl1JvJ@d@@j@@Yo1JvJYp1JvJ@@@@@k:  @@@k9@@@k8@@k7x@@ఐZ*failactionY1JvJY1JvJ@@@Nl@@@kM@kAM@k?@@~ @@@A@Y0J]Ja @@@ఐP(arms_resY3JJY3JJ@@@֠ՠ@A@@@kI@@@@kJ@@kH@@@kG@@@kF3YYYYYYYY@@@@@@@ఐӠ.failaction_resY3JJY3JJ@ @@Qf`_@@@kM@@@kL@@@kK@@2@@@3@@@kN!@@Ġ+UnreachableY4JJY4JK@ @@@@@A@@@kn@@@@ko@@km@@@kl@@@kk3YYYYYYYY@F@@@@Ġ$NoneZ 4JK Z 4JK@On@@@@Q@@@kw@@@kv@@@ku@Ġ$SomeZ4JKZ4JK@OĠ+UnreachableZ&4JKZ'4JK!@!@@@@@@@k@@@k2@@@ @@QРʠ@@@k@@@k@@@k>@@Z=4JK Z>4JK"@@Qޠؠ@@@k@@@k@@@kL@@d @@@e@@@kS@@@@BA@@@k@@@@k@@k@@@k@@@k@R   @@@k@@@k@@@k@@kx@@@ภ+UnreachableZ|4JK&Z}4JK1@!k@@@@@@la@@@l`@@Ġ)ReachableZ5K2K8Z5K2KA@!gఠ$lfunZ5K2KCZ5K2KG@ZA@@"6@@@k3ZZZZZZZZ@@@@ఠ$armsZ5K2KIZ5K2KM@ZA@@ޠ@B@@@k@@@@k@@k@@@k@@@-Z5K2KN@@@B@@@k@@@@k@@k@@@k@@@k2@@Ġ$NoneZ5K2KQZ5K2KU@PE@@@@R | {@@@k@@@k@@@kJ@Ġ$SomeZ5K2KXZ5K2K\@P}Ġ+UnreachableZ5K2K]Z5K2Kh@!@@@@  @@@k@@@kc@@@ @@R  @@@k@@@k@@@ko@@[5K2KP[5K2Ki@@R  @@@k@@@k@@@k}@@ @@@d@@@k@@@ ^ ]@C@@@kؠ@ _@@@k@@k@@@k@@@kՠ@R ۠ @@@k@@@k@@@k@@k@@@ภ)Reachable[S6KmKs[T6KmK|@"&ఐ$lfun[]6KmK~[^6KmK@@@@@"@@@lqM@lsM@lr3[e[d[d[e[e[e[e[e@ @@@@@ภ-Lstringswitch[s6KmK[t6KmK@Cfఐ{#arg[}6KmK[~6KmK@ @@S.@@@lM@lM@l@ఐ㠐$arms[6KmK[6KmK@&@@C@C@@@l@SL@@@l@@l@@@lM@lM@l>@ఐ*failaction[6KmK[6KmK@<@@CSb@@@l@@@lM@lM@lT@ఐ#loc[6KmK[6KmK@Q@@F@@@lM@lM@lf@@\[6KmK@@@@@lpM@lm@@[6KmK@@Xo@@Ġ+Unreachable[7KK[7KK@"@@@@!!@C@@@k@!@@@k@@k@@@k@@@kD@@Ġ$Some\7KK\7KK@QĠ)Reachable\ 7KK\7KK@"ఠ$lfun\7KK\7KK@\/A@@#@@@le@ఠ*failaction\$7KK\%7KK@\=A@@!@@@l s@@@\,7KK\-7KK@@!Ġ!@@@l @@@l }@@@2 @@Sՠ!Ϡ!@@@l@@@l @@@l @@]@@@^@@@l@@@!~!}@D8@@@l@!@@@l@@l@@@l@@@l@T!!@@@l@@@l@@@l@@l@@@ภ)Reachable\s8KK\t8KK@#Fఐg$lfun\}8KK\~8KK@f@g@h@@$@@@lM@lM@l3\\\\\\\\@y kd@e@f@@@ภ-Lstringswitch\8KL\8KL@Dఐ#arg\8KL\8KL@-@@TN@@@lM@lM@l@ఐ$arms\8KL\8KL@>@@D@D@@@l@Tl@@@l@@l@@@lM@lM@l>@ภ$Some\8KL\8KL@RVఐ*failaction\8KL \8KL*@N@@T@@@lM@lM@lM@l[@@ @@D @@@lM@lb@ఐ#loc\8KL,\8KL/@@@G@@@lM@lM@lt@@j\8KL0@@=@@@lM@l{@@]8KL1@@}@@Ġ)Reachable]9L2L8]9L2LA@#@]9L2LB]9L2LC@@$@@@l6e@@@"M@E@@@l9@"O@@@l:@@l8@@@l7w@@@@@"b"a@E@@@l>@"c@@@l?@@l=@@@l<@@@l;@@Ġ$Some]L9L2LE]M9L2LI@RՠĠ)Reachable]U9L2LK]V9L2LT@$(@]Z9L2LU][9L2LV@@$@@@lJ@@@"@@@lK@@@]e9L2LJ]f9L2LW@@""@@@lM@@@lL@@@# @@U##@@@lP@@@lO@@@lN@@h@@@O@@@lQ@@@""@Eq@@@lV@"@@@lW@@lU@@@lT@@@lS@U:#4#3@@@lZ@@@lY@@@lX@@lR@@@డV+fatal_error$Misc]:L[La]:L[Le@ ]:L[Lf]:L[Lq@@V@@@V@@@l@@l@@@l@@@lN@l@@l@@:letrec: multiple functions]:L[Ls]:L[L@@]:L[Lr]:L[L@@W @@@lN@lN@l'@@- @@a(@@@A]3JJ];LL@@#@@@n@@@n@X @@@ @@@Ġ,Lstaticcatch]<LL]<LL@Cˠఠ$body]<LL^<LL@^A@@U@@@R3^^^^^^^^@"@@@@ఠ%nfail^<LL^<LL@^+A@@C@@@R@@ఠ¶ms^!<LL^"<LL@^:A@@C@C@@@R@Ma@@@R@@R@@@R/@@^6<LL^7<LL@@@&@@@R8@ఠ'handler^E<LL^F<LL@^^A@@U@@@RF@@@W^M<LL@@#H@@#H@@@@ఠ(body_res^X=LL^Y=LL@^qA@@##@@@n@@@nL@n3^b^a^a^b^b^b^b^b@#Poh@i@j]V@W@XOH@I@J,%@&@'@@@ఐ$05split_static_function^w=LL^x=LL@#@@@$/@@n@$*@@n@$!@@n$$@@@n@@@n@@n@@n@@n(@@ఐ$)block_var^=LL^=LL@#@@$K5@@ఐ#,local_idents^=LL^=LM @#@@$OB@@ఐ$body^=LM ^=LM@I@@$OM@nQ@@@@@YR@A@^=LL@@@ఠ+handler_res^>MM^>MM'@^A@@$_$^@@@oI@@@oHL@n3^^^^^^^^@l~w@x@y@@@@ఠ,local_idents^?M*M4^?M*M@@^A@@$@@@o M@n@డ]]$List)fold_left^@MCMK^@MCMO@ ^@MCMP^@MCMY@@K@@@@"M@n@@n@@@@@o M@n堠@NH@@@o+M@n@@nM@n@@n@@n@@n@@n@@@n@Q@@@n@@n$@@n@@n@@n3_$_#_#_$_$_$_$_$@W@@@@࣠@$varsA_6@MCM__7@MCMc@_OA@@7j@@@@XA@ఠ#var_I@MCMe_J@MCMh@_bA@@>3_J_I_I_J_J_J_J_J@~ M@@@@@@@_T@MCMj_U@MCMk@@@ @@_W@MCMd_X@MCMl@@@N@I@@n@@ @@డY>#Set#add%Ident_r@MCMp_s@MCMu@ _v@MCMv_w@MCMy@@_{@MCMz_|@MCM}@ @ @@@'@@@n@@n@%0@@@n@@n%3@@@n@@n@@n3________@DM@G@H@@@@ఐT#var_@MCM~_@MCM@ @@@@ఐw$vars_@MCM_@MCM@]@@@@<@@Q@o @_@MCMZ_@MCM@@@@@n@@@n@@n@@nN@o N@o@@ఐ$ڠ,local_idents_AMM_AMM@$°@@%t@@ఐ¶ms_AMM_AMM@l@@R@@@nN@o,N@o(@@ @@@A@_?M*M0 @@ఐ%5split_static_function_CMM_CMM@%e@@@%@@o9@%@@o8@%@@o7%%@@@o6@@@o5@@o4@@o3@@o23`__`````@4,%@&@'@@@@ఐ%)block_var`CMM`CMM@%@@%@@ఐ@,local_idents`CMM`CMM@@@?@@ఐ堐'handler`*CMM`+CMM@@@%M@oM,@@C@@g-@N@@ha@A@`2>MM@@@ఐ蠐(body_res`@EMN`AEMN @p@@%٠%@@@oS@@@oR3`G`F`F`G`G`G`G`G@{@@@@@@ఐ+handler_res`VEMN `WEMN@ @@%%@@@oU@@@oT@@! @@@"@@@oV@@Ġ+Unreachable`uFNN"`vFNN-@'d@@@@&& @@@oi@@@oh3`|`{`{`|`|`|`|`|@5@@@@Ġ+Unreachable`FNN/`FNN:@'w@@@@&!& @@@oo@@@on@@ @@@@@@op@@@&3&2@@@os@@@or@&<&;@@@ou@@@ot@@oq.@@@ภ+Unreachable`FNN>`FNNI@'@@@  @@@o@@@o>@@Ġ)Reachable`GNJNP`GNJNY@'ఠ$lfun`GNJN[`GNJN_@`A@@(m@@@o3````````@@@@ఠ$body`GNJNa`GNJNe@`A@@&y@@@o@@@ `GNJNf@@&&@@@o@@@o@@Ġ+Unreachable`GNJNh`GNJNs@'@@@@&&@@@o@@@o*@@; @@@@@@o1@@@&&@@@o@@@o@&&@@@o@@@o@@oE@@@ภ)Reachablea&HNwN}a'HNwN@'ఐ\$lfuna0HNwNa1HNwN@[@\@]@@(@@@oM@oM@o3a8a7a7a8a8a8a8a8@n _X@Y@Z@@@ภ,LstaticcatchaFHNwNaGHNwN@Gఐm$bodyaPHNwNaQHNwN@@@Y@@@pM@p M@p @@ఐT%nfailafHNwNagHNwN@@@G5@@@pM@pM@p5@@ఐX¶msayHNwNazHNwN@@@GB@GA@@@p @P@@@p @@p@@@pM@pM@pU@@aHNwNaHNwN@@@,@@@pM@p!`@ఐ^'handleraHNwNaHNwN@8@@YT@@@p M@p#M@p"r@@haHNwN@@!@@@oM@py@@aHNwN@@{@@Ġ+UnreachableaINNaINN@(@@@@']'\@@@o@@@o@@Ġ)ReachableaINNaINN@(ఠ$lfunaINNaINN@aA@@)x@@@o@ఠ'handleraINNaINN@bA@@'@@@o@@@aINN@@''@@@o@@@o@@: @@@;@@@o@@@''@@@o@@@o@''@@@o@@@o@@o@@@ภ)ReachablebJNNbJNN@(ఐI$lfunb(JNNb)JNO@H@I@J@@)@@@p,M@p.M@p-3b0b/b/b0b0b0b0b0@[ MF@G@H@@@ภ,Lstaticcatchb>JNOb?JNO@HఐI$bodybHJNObIJNO@@@Y@@@p;M@pDM@pC@@ఐL%nfailb^JNOb_JNO@@@H-@@@p=M@pOM@pN5@@ఐP¶msbqJNO brJNO&@@@H:@H9@@@p@@Q@@@pA@@p?@@@p>M@pTM@pPU@@bJNObJNO'@@@,@@@pLOUO@@\s@@@pfN@phN@pg@@- @@@@@AcHEMMcIMOO@@#w#@@@q@@@q@  @@@ @@#@Ġ(Ltrywithc]NOOc^NOO@Hఠ$bodycfNOOcgNOO@cA@@[@@@R3cjcicicjcjcjcjcj@(T@@@ఠ'exn_varcuNOOcvNOO@cA@@H@@@R@ఠ'handlercNOOcNOO@cA@@[1@@@R@@@.cNOO@@)'@@)'@@@@ఠ(body_rescOOOcOOO@cA@@)2)1@@@q@@@qL@q3cccccccc@(E>@?@@70@1@2*#@$@%@@@ఐ)l5split_static_functioncOOOcOOO@)+@@@)k@@q@)f@@q@)]@@q)X)W@@@q@@@q@@q@@q@@q&@@ఐ)S)block_varcOOOcOOO@(ݰ@@)3@@ఐ(,local_identscOOOcOOO@(ٰ@@)@@@ఐ$bodycOOOcOOO@H@@)M@rO@@@@@WP@A@cOOO@@@ఠ+handler_rescPPP dPPP@dA@@))@@@r @@@rL@r3d ddd d d d d @j|u@v@w@@@ఐ)Ѡ5split_static_functiondQPPdQPP3@)@@@)@@r@)@@r@)@@r))@@@r @@@r @@r @@r @@r "@@ఐ))block_vard8QPP4d9QPP=@)B@@)/@@డ^#Set#add%IdentdORP>PGdPRP>PL@ dSRP>PMdTRP>PP@@dXRP>PQdYRP>PT@ @x @@@#@@@r+@@r*@* @@@r)@@r(*@@@r'@@r&@@r%a@@ఐ'exn_vardwRP>PUdxRP>P\@Ѱ@@# @@@rIN@rHs@@ఐ),local_identsdRP>P]dRP>Pi@)@@*4@@dRP>PFdRP>Pj@@*5@@@r?@@ఐ'handlerdRP>PkdRP>Pr@@@*:M@rc@@@@@A@dPPP@@@ఐ(body_resdTPzPdTPzP@@@*J*I@@@ri@@@rh3dddddddd@@@@@@@ఐȠ+handler_resdTPzPdTPzP@ @@*`*_@@@rk@@@rj@@! @@@"@@@rl@@Ġ+UnreachabledUPPdUPP@+@@@@**~@@@r@@@r~3dddddddd@5@@@@Ġ+UnreachabledUPPdUPP@+@@@@**@@@r@@@r@@ @@@@@@r@@@**@@@r@@@r@**@@@r@@@r@@r.@@@ภ+Unreachablee$UPPe%UPP@,@@@%T%g@@@r@@@r>@@Ġ)Reachablee<VPPe=VPP@,ఠ$lfuneEVPPeFVPP@e^A@@,@@@r3eIeHeHeIeIeIeIeI@@@@ఠ$bodyeTVPPeUVPP@emA@@*@@@r@@@ e\VPP@@**@@@r@@@r@@Ġ+UnreachableelVPPemVPP@,[@@@@++@@@r@@@r*@@; @@@@@@r1@@@++@@@r@@@r@+ +@@@r@@@r@@rE@@@ภ)ReachableeWQQeWQQ@,jఐ\$lfuneWQQeWQQ@[@\@]@@->@@@s M@s M@s 3eeeeeeee@n _X@Y@Z@@@ภ(LtrywitheWQQeWQQ@Kఐm$bodyeWQQ!eWQQ%@@@]r@@@sM@sM@s@ఐ^'exn_vareWQQ'eWQQ.@-@@K-@@@sM@sM@s1@ఐb'handlereWQQ0eWQQ7@>@@]@@@sM@sM@sC@@9eWQQ8@@&0@@@s M@sJ@@`eWQQ9@@L@@Ġ+UnreachablefXQ:Q@fXQ:QK@,@@@@++@@@r@@@rU@@Ġ)ReachablefXQ:QMfXQ:QV@,ఠ$lfunf!XQ:QXf"XQ:Q\@f:A@@-@@@rm@ఠ'handlerf/XQ:Q^f0XQ:Qe@fHA@@+@@@r{@@@f7XQ:Qf@@+Π+@@@r@@@r@@: @@@;@@@r@@@++@@@r@@@r̠@++@@@r@@@r@@r@@@ภ)Reachablef`YQjQpfaYQjQy@-3ఐI$lfunfjYQjQ{fkYQjQ@H@I@J@@.@@@s&M@s(M@s'3frfqfqfrfrfrfrfr@[ MF@G@H@@@ภ(LtrywithfYQjQfYQjQ@Kܠఐ$$bodyfYQjQfYQjQ@@@^;@@@s0M@s4M@s3@ఐ''exn_varfYQjQfYQjQ@@@K@@@s1M@s6M@s51@ఐ'handlerfYQjQfYQjQ@8@@^_@@@s2M@s8M@s7C@@9fYQjQ@@&@@@s%M@s/J@@`fYQjQ@@L@@Ġ)ReachablefZQQfZQQ@-@fZQQfZQQ@@.k@@@r@@@,m@@@r#@@@ @@,u,t@@@r@@@r+@@Ġ)ReachablefZQQfZQQ@-@fZQQfZQQ@@.@@@r=@@@,@@@rB@@@ @@,,@@@r@@@rJ@@7@@@+@@@rQ@@@,,@@@r@@@r@,,@@@r@@@r@@re@@@డ`k+fatal_error$Miscg-[QQg.[QQ@ g1[QQg2[QQ@@`i@@@`i@@@s=@@s<'k'~@@@sH@@@sGN@s;@@s:@@:letrec: multiple functionsgM[QQgN[QQ@@gP[QQgQ[QQ@@`@@@sDN@sFN@sE@@- @@3@@@Ag[TPzP~g\\QR@@''@@@t@@@tt@ @@Y@r @@'@Ġ+Lifthenelsegp]RRgq]RR@Lఠ$condgy]RRgz]RR@gA@@_'@@@R$3g}g|g|g}g}g}g}g}@,g@@@ఠ$ifsog]RRg]RR@gA@@_6@@@R%@ఠ%ifnotg]RRg]RR$@gA@@_D@@@R&@@@.g]RR%@@-:@@-:@@@@ఠ(ifso_resg^R)R1g^R)R9@gA@@-E-D@@@t@@@tL@t3gggggggg@,E>@?@@70@1@2*#@$@%@@@ఐ-5split_static_functiong^R)R<g^R)RQ@->@@@-~@@t@-y@@t@-p@@t-k-j@@@t@@@t@@t@@t@@t&@@ఐ-f)block_varg^R)RRg^R)R[@,@@-3@@ఐ-,local_identsg^R)R\g^R)Rh@,@@-@@@ఐx$ifsoh^R)Rih^R)Rm@G@@-M@tO@@@@@WP@A@h^R)R-@@@ఠ)ifnot_res h_RqRyh_RqR@h+A@@--@@@t@@@tL@t3hhhhhhhh@j|u@v@w@@@ఐ-䠐5split_static_functionh+_RqRh,_RqR@-@@@-@@t@-@@t@-@@t-Р-@@@t@@@t@@t@@t@@t"@@ఐ-ˠ)block_varhK_RqRhL_RqR@-U@@-/@@ఐ-i,local_identshX_RqRhY_RqR@-Q@@.<@@ఐϠ%ifnothe_RqRhf_RqR@@@.M@uK@@@@@SL@A@hl_RqRu@@@ఐѠ(ifso_reshz`RRh{`RR@[@@..@@@u@@@u3hhhhhhhh@fxq@r@s@@@@ఐ~)ifnot_resh`RRh`RR@ @@.).(@@@u @@@u @@! @@@"@@@u @@Ġ+UnreachablehaRRhaRR@/@@@@.H.G@@@u@@@u3hhhhhhhh@5@@@@Ġ+UnreachablehaRRhaRS@/@@@@.[.Z@@@u$@@@u#@@ @@@@@@u%@@@.m.l@@@u(@@@u'@.v.u@@@u*@@@u)@@u&.@@@ภ+UnreachablehaRShaRS@/@@@))0@@@u@@@u>@@Ġ)ReachableibSSibSS!@/ؠఠ$lfun ibSS#ibSS'@i'A@@0@@@u=3iiiiiiii@@@@ఠ$ifso ibSS)ibSS-@i6A@@.@@@u>@@@ i%bSS.@@..@@@u@@@@u?@@Ġ+Unreachablei5bSS0i6bSS;@0$@@@@.Π.@@@uF@@@uE*@@; @@@@@@uG1@@@..@@@uJ@@@uI@..@@@uL@@@uK@@uHE@@@ภ)Reachablei`cS?SEiacS?SN@03ఐ\$lfunijcS?SPikcS?ST@[@\@]@@1@@@uM@uM@u3iriqiqiririririr@n _X@Y@Z@@@ภ+LifthenelseicS?SVicS?Sa@N,ఐ$condicS?ScicS?Sg@Ұ@@a;@@@uM@uM@u@ఐ$ifsoicS?SiicS?Sm@&@@aM@@@uM@uM@u1@ఐ%ifnoticS?SoicS?St@@@a_@@@uM@uM@uC@@9icS?Su@@)@@@uM@uJ@@`icS?Sv@@L@@Ġ+UnreachableidSwS}idSwS@0@@@@/h/g@@@u_@@@u^U@@Ġ)ReachableidSwSidSwS@0ఠ$lfun idSwSidSwS@jA@@1@@@uem@ఠ%ifnot idSwSidSwS@jA@@/@@@uf{@@@jdSwS@@//@@@uh@@@ug@@: @@@;@@@ui@@@//@@@ul@@@uk@//@@@un@@@um@@uj@@@ภ)Reachablej)eSSj*eSS@0ఐI$lfunj3eSSj4eSS@H@I@J@@1@@@uM@uM@u3j;j:j:j;j;j;j;j;@[ MF@G@H@@@ภ+LifthenelsejIeSSjJeSS@Nఐڠ$condjSeSSjTeSS@@@b@@@uM@uM@u@ఐݠ$ifsojeeSSjfeSS@@@b@@@uM@uM@u1@ఐ%ifnotjweSSjxeSS@8@@b(@@@uM@uM@uC@@9jeSS@@*@@@uM@uJ@@`jeSS@@L@@Ġ)ReachablejfSSjfSS@1k@jfSSjfSS@@24@@@u@@@06@@@u#@@@ @@0>0=@@@u@@@u+@@Ġ)ReachablejfSSjfSS@1@jfSSjfSS@@2S@@@u=@@@0U@@@uB@@@ @@0]0\@@@u@@@uJ@@7@@@+@@@uQ@@@0o0n@@@u@@@u@0x0w@@@u@@@u@@ue@@@డd4+fatal_error$MiscjgSTjgST @ jgST jgST@@d2@@@d2@@@u@@u+4+G@@@u@@@uN@u@@u@@:letrec: multiple functionskgSTkgST1@@kgSTkgST2@@dO@@@uN@uN@u@@- @@3@@@Ak$`RRk%hT3T:@@+S+f@@@wa@@@w`t@ @@@( @@+\y@Ġ)Lsequencek9iT;T?k:iT;TH@O+ఠ"e1kBiT;TJkCiT;TL@k[A@@b@@@R*3kFkEkEkFkFkFkFkF@00@@@ఠ"e2kQiT;TNkRiT;TP@kjA@@b@@@R+@@@ kYiT;TQ@@0@@0@@@2$let+kajTUTYkbjTUT]@1@2c@@@wK@wK@wlL@wi@@@wkL@wq@@wt@@@@wn+@@@wK@wK@wm@@wo@@wr2۠ L@we@@@wdL@wp@@ws@@wuL@wbఐ1P5split_static_functionkjTUTckjTUTx@1@@@1O@@w~@1J@@w}@1A@@w|1<1;@@@w{@@@wz@@wy@@wx@@ww3kkkkkkkk@0rk@l@md]@^@_@@@@ఐ1<)block_varkjTUTykjTUT@0ư@@1p@@ఐ0ڠ,local_identskjTUTkjTUT@0°@@1t@@ఐ"e2kjTUTkjTUT@'@@1tL@w.@@E@@30s@@@wL@w5@kkTT@@"e2kjTUT^kjTUT`@lA@@B@@@ภ)LsequencekkTTkkTT@Oఐ"e1kkTTlkTT@Q@@c@@@wL@wL@w3llllllll@]'@@@@@ఐ,"e2lkTTlkTT@ @@@@#5@@@A6@@,F3llllllll@l@@@Ġ&Leventl$lTTl%lTT@Nఠ#laml-lTTl.lTT@lFA@@c@@@R/1@ఠ#levl;lTTl<lTT@lTA@@N@@@R01)@@@lClTT@@11+@@11+@@@3$let+lKmTTlLmTT@2@3d@@@wK@wK@wL@w@@@wL@w@@w@@@@w,@@@wK@wK@w@@w@@w3Š L@w@@@wL@w@@w@@wL@wఐ2:5split_static_functionlmTTlmTT@1@@@29@@w@24@@w@2+@@w2&2%@@@w@@@w@@w@@w@@w3llllllll@1qj@k@ld]@^@_@@@@ఐ2&)block_varlmTTlmTT@1@@2Z@@ఐ1Ġ,local_identslmTTlmTU@1@@2^@@ఐ#lamlmTUlmTU@(@@2^L@w.@@E@@4s@@@wL@w5@lnU U@@#lamlmTTlmTT@lA@@B@@@ภ&LeventlnU U lnU U@OKఐ#lamlnU UlnU U@@@@@3llllllll@W!@@@ఐ#levlnU UlnU U@^@@Oa@@@wL@wL@w@@#5@@@A6@@-03mllmmmmm@l@@@Ġ'LmutvarmoUU#moUU*@]7@m#oUU+m$oUU,@@]9@@@R32@@@ @@22@@22@Ġ&Lconstm1pU-U1m2pU-U7@c7@m6pU-U8m7pU-U9@@c6@@@R62"@@@ @@22#@@22#@@@@22$@Ġ&LapplymEqU:U>mFqU:UD@\@mJqU:UEmKqU:UF@@\@@@R926@@@ @@227@@227@@3@@228@Ġ%LprimmYrUGUKmZrUGUP@X6@m^rUGUQm_rUGUR@@_@@@R?2J@@@X9e@@@RA@@@R@2S@@@X9@@@RB2X@@@@@3 2Y@@3 2Y@@U@@32Z@Ġ&Lwhilem{sUSUWm|sUSU]@Q@msUSU^msUSU_@@e,@@@RF2l@@@e1@@@RG2q@@@ @@3&2r@@3&2r@@n @@3'2s@Ġ$LformtU`UdmtU`Uh@P@mtU`UimtU`Uj@@P@@@RN2@@@eJ@@@RO2@@ @eO@@@RP2@@@P@@@RQ2@@@eY@@@RR2@@@@@3N2@@3N2@@@@3O2@Ġ'LassignmuUkUomuUkUv@PӠ@muUkUwmuUkUx@@P@@@RV2@@@er@@@RW2@@@ @@3g2@@3g2@@ @@3h2@Ġ%LsendmvUyU}mvUyU@P@mvUyUmvUyU@@P@@@R_2@@@e@@@R`2@@ @e@@@Ra2@@@Pe@@@Rc@@@Rb2@@@X@@@Rd2@@@#@@32@@32@@@@32@Ġ'LifusednwUUnwUU@P@nwUUnwUU@@P@@@Rh2@@@e@@@Ri2@@@ @@32@@32@@ @@32@@@డg]+fatal_error$MiscnwUUn wUU@ n#wUUn$wUU@@g[@@@g[@@@w@@w.].p@@@w@@@wL@w@@w3@@ 'letrec binding is not a static functionn?wUUn@wUU@@nBwUUnCwUU@@gx@@@wL@wL@w32@@- @@.y33@@@AnM:: @г.~,split_resultnW::nX::@г.&Lambdanb::nc::@3nf::ng::@@@3@@@yI@Q3nknjnjnknknknknk@3U@@ @@@4 @@@yI@Q@@+@@ @35A@@4/@@y@@4*@@y?@4!@@y>44@@@y=@@@y<@@y;@@y:@@y9F@y14@@@n:g:gL@3333@33Ш3@б@@@@Q*3nnnnnnnn@4+@@nyUUnyUU@@б@@@@Q+ nyUUnyUU@@б@г3$listnyUV nyUV@В@А!a3@Q) nyUUnyUU@@@г3&LambdanyUUnyUV@4nyUVnyUV @@@4 @@@Q,7 @@@@@ @@Q-> @@@4& @@@Q/CnyUU0@@г4,split_resultnzVV/nzVV;@г4$listnzVV*nzVV.@В@А!a@^nzVVozVV@@@г4'&Lambdao zVVo zVV!@4.ozVV"ozVV(@@@46@@@Q0u @@@@\@ @@Q1| @@@4K @@@Q3o"zVV.@@@4U @@@Q5<@@@M@@Q6 @@Q7IA@@@@@Q8 @@Q9F@@@@@Q: @@Q;K@@|@@Q<@4VOA@@@4@@Q@4@@Q@4@@Qz@4@@@Q@@Q@@@Q@@Q44@@4@@@Q@@Q@@@Q@@@Q~@@Q}@@Q|@@Q{@@Qy@࣠@)block_varAot{V>VDou{V>VM@oA@@5)H@yU3owovovowowowowow@44H;@@@A@@@A@oyUUoyUU@@@@oA@@@@@@,local_identsAo{V>VNo{V>VZ@oA@@59H@yV3oooooooo@(@@ @@@@  @@$armsAo{V>V[o{V>V_@oA@@o@3@@@yŠ@n 4@@@y@@y@@@y3oooooooo@&4*@+@,@@@@@@ఐ)$armso|VcVko|VcVo@%@$@@@y@#@@@y@@y@@@y@6@7@@6@5@@@yѠ@4@@@y@@y@@@y3oooooooo@3S$@@@ĠY4o}VuVyo}VuV{@e@@@@T@S@@@yߠ@R@@@y@@y@@@y3pppppppp@@@@@e@d@@@y㠠@c@@@y@@y@@@y@@@ภ+Unreachablep}VuVp }VuV@7@@@7o@@@@z @n5X@@@z @@z @@@z @@@z 3@ĠFZpD~VVpE~VV@fW@ఠ!ipQ~VVpR~VV@pjA@@@@@yn@@ఠ#lamp`~VVpa~VV@pyA@@@@@y}@@ph~VVpi~VV@@@@ @@y@ఠ$armspw~VVpx~VV@pA@@oܠ@@@@y@@@@y@@y@@@y@@@$@@@@@@y@@@@z@@y@@@y@@@@@@z@@@@z@@z@@@z@@@@ఠ#respVVpVV@pA@@55@@@@zNN@z#@5@@@zA@@z@@@@z?@@@z>N@z3pppppppp@@@{t@u@ve^@_@`@@@ఐ68,rebuild_armspVVpVV@6<@@@6<@@z*@6:@@z)@68@2@63@@@z(@@z'@@@z&@@z%606/@B@6.@@@z$@@z"@@@z!@@@z @@z@@z@@z=@@ఐ)block_varqVVqVV@@@J@@ఐ,local_identsq&VVq'VV@n@@W@@ఐ$armsq3VVq4VV@]@@6@{@6|@@@zE@@zD@@@zCO@zPO@zLu@@f@@v@A@qIVV@@@ఠ'lam_resqTVVqUVV@qmA@@66@@@zl@@@zkN@zS3q^q]q]q^q^q^q^q^@@@@@@ఐ7&5split_static_functionqmVVqnVW@6@@@7%@@z\@7 @@z[@7@@zZ77@@@zY@@@zX@@zW@@zV@@zU"@@ఐ)block_varqVWqVW@@@/@@ఐ,local_identsqVWqVW@@@ <@@ఐG#lamqVWqVW@Ұ@@7EO@zpK@@@@@SL@A@qVV@@@ఐh'lam_resqW#W-qW#W4@g@h@i@@7V7U@@@zv@@@zu3qqqqqqqq@gy @@@@ఐ#resqW#W6qW#W9@q@@77@3@@@zz@7@@@z{@@zy@@@zx@@@zw"@@.@@@.@@@z|)@@Ġ+UnreachableqW?WEqW?WP@8@@@@77@@@z@@@z3rrrrrrrr@A@@@@Ġ+UnreachablerW?WRrW?W]@9@@@@7F7E@r@@@z@7G@@@z@@z@@@z@@@z @@+@@@,@@@z'@@@7ɠ7@@@z@@@z@7n7m@@@@z@7o@@@z@@z@@@z@@@z@@zH@@@ภ+UnreachablerVW?WarWW?Wl@9E@@@76@5@@@{O@4@@@{P@@{N@@@{M@@@{Le@@Ġ)Reachabler{WmWsr|WmW|@9Nఠ$lfunrWmW~rWmW@rA@@:@@@z3rrrrrrrr@@@@ఠ#lamrWmWrWmW@rA@@8)@@@z@@@ rWmW@@8281@@@z@@@z@@Ġ+UnreachablerWmWrWmW@9@@@@77ߠ@ @@@zѠ@7@@@z@@z@@@z@@@z7@@H@@@+@@@z>@@@8c8b@@@z@@@zՠ@88@4@@@zڠ@8 @@@z@@z@@@z@@@z@@z_@@@ภ)ReachablerWWrWW@9àఐv$lfunrWWrWW@u@v@w@@:@@@{lO@{nO@{m3ssssssss@@ yr@s@t@@@ภ/sWWsWW@i"@ఐ̠!isWWsWW@I@@@@@{jO@{yO@{O@{$@@ఐ#lams2WWs3WW@,@@@@@{kO@{zO@{O@{9@@s?WWs@WW@@@#@@@{iO@{xO@{F@ఐܠ$armssSWWsTWW@}@@r@@@{{O@{O@{Y@@  @@;@@@{hO@{w`@@vsfWW@@b@@Ġ+UnreachablesuWWsvWW@:d@@@@99 @@@z@@@z@@Ġ)ReachablesWWsWW@:Zఠ$lfunsWWsWW@sA@@;)@@@z@ఠ$armssWWsWW@sA@@8Р@@@@{@8@@@{@@z@@@z@@@,sWW@@88@@@@{@8@@@{@@{@@@{@@@{@@T@@@U@@@{@@@9i9h@@@{ @@@{ @99 @:@@@{@9@@@{@@{ @@@{ @@@{ @@{)@@@ภ)ReachablesWWsWW@:ɠఐp$lfuntWXtWX@o@p@q@@;@@@{O@{O@{3tttttttt@F tm@n@o@@@ภ0°tWXtWX@j(@ఐҠ!it#WXt$WX@O@@@@@{O@{O@{O@{$@@ఐؠ#lamt8WX t9WX @c@@ @@@{O@{O@{O@{9@@tEWXtFWX@@@#@@@{O@{O@{F@ఐ$armstYWXtZWX@M@@s@@@{O@{O@{Y@@  @@A@@@{O@{`@@vtlWX@@b@@Ġ)Reachablet{XXt|XX'@;N@tXX(tXX)@@<@@@{(@@@:@@@{)@@@ @@:!: @@@{+@@@{*@@Ġ)ReachabletXX+tXX4@;m@tXX5tXX6@@<6@@@{4@@@9Ԡ@@@@{7@9@@@{8@@{6@@@{5@@@@@99@@@@{<@9@@@{=@@{;@@@{:@@@{9@@Q,@@@E@@@{> @@@:l:k@@@{A@@@{@@::@=@@@{E@:@@@{F@@{D@@@{C@@@{B@@{?,@@@డn>+fatal_error$MiscuX:X@uX:XD@ uX:XEuX:XP@@n<@@@n<@@@{@@{@@@@{Ѡ@@@@{@@{@@@{@@@{P@{@@{^@@:letrec: multiple functionsu-X:XRu.X:Xl@@u0X:XQu1X:Xm@@nf@@@{P@{P@{r@@: @@s@@@Au;W#W' @@@@@@}o@@@@}p@@}n@@@}m@@@}lH@ @@@ !@@0@@@AuS|VcVe#@@21@0@@@}@/@@@}@@}@@@}@@@}`@:8A:@б@@@б@@@б@гӠȠВ@гԠǰ@@@@@yW@@гؠĠ:@@@@yX@@@@ @@yY @@ @@@y[$@г|г}В@г~@@@@@y\:@@г:@@@@y]F@@@@ @@y^L@@ @@@y`P@@@@@ybT@@8@@yc@@ydX@@E@@ye@@yf\@@b@@yg@@yh`@r@@@;3@@~ @;1@@~ @;/@;.@yA@;,@@@~ @@~ @@@~ @@~;);(@@;'@@@~@@~@@@~@@@~@@~@@~@@~F@}@@@v xUU@@}@;vv2 {1. Compilation} vXoXovXoX@@@@@@3vvvvvvvv@;@@v0v/ The bindings are split into three categories. Static bindings are the ones that we can pre-allocate and backpatch later. Function bindings are syntactic functions. Dynamic bindings are non-recursive expressions. The evaluation order is as follows: - Evaluate all dynamic bindings - Pre-allocate all static bindings - Define all functions - Backpatch all static bindings Constants (and unreachable expressions) end up in the dynamic category, because we substitute all occurrences of recursive variables in their definition by a dummy expression, making them non-recursive. This is correct because: - [Value_rec_check] ensured that they never dereference the value of those recursive variables - their final value cannot depend on them either. Functions that are not already in syntactic form also generate an additional binding for the context. This binding fits into the static category. Example input: {[ let rec a x = (* syntactic function *) b x and b = (* non-syntactic function *) let tbl = Hashtbl.make 17 in fun x -> ... (tbl, c, a) ... and c = (* block *) Some (d, default) and d = (* 'dynamic' value (not recursive *) Array.make 5 0 and default = (* constant, with (spurious) use of a recursive neighbor *) let _ = a in 42 ]} Example output: {[ (* Dynamic bindings *) let d = Array.make 5 0 let default = let _ = *dummy_rec_value* in 42 (* Pre-allocations *) let c = caml_alloc_dummy 2 let b_context = caml_alloc_dummy 1 (* Functions *) let rec a x = b x and b = fun x -> ... (b_context.tbl, c, a) ... (* Backpatching *) let () = caml_update_dummy c (Some (d, default)); caml_update_dummy b_context (let tbl = Hashtbl.make 17 in { tbl }) ]} Note on performance for non-syntactic functions: The compiler would previously pre-allocate and backpatch function closures. The new approach is designed to avoid back-patching closures -- besides, we could not pre-allocate at this point in the compiler pipeline, as the closure size will only be determined later. For non-syntactic functions with local free variables, we now store the local free variables in a block, which incurs an additional indirection whenever a local variable is accessed by the function. On the other hand, we generate regular function definitions, so the rest of the compiler can either inline them or generate direct calls, and use the compact representation for mutually recursive closures. v,XXv-clco@@@@@@A+,rec_bindingsFv7cqcvv8cqc@@;@@&static@@u@p!!t@@@~D@q@@@~E@t&lambda@@@~F@@~G@@@~Iv]ccv^cc@@vvA)functions@@uܠ@pF!t@@@~L@t)lfunction@@@~M@@~N@@@~Pv|ccv}cc@@vA'dynamic @@u@pe!t@@@~S@t&lambda@@@~T@@~U@@@~Wvccvcd@@vA@@A@@@@@vcqcqvd d#@@@@vA@#hhJvcc@I@@Ш@гk$listvccvcc@В@гp%Identvccvcc@wvccvcc@@@3vvvvvvvv@<@;@@@A@@@@@,@@@)@@ @@@г~*block_sizevccvcc@@@@@г&Lambdavccvcc@vccvcc@@@!@@@"*@@@#vcc:@@@@~J'@@#uvcc@t@@Ш@г$listvccvcc@В@г%Identw ccw cc@w ccwcc@@@J@@@г&Lambdawccwcc@wccw cc@@@\@@@]@@@^w%cc+@@@@~Qb@@#w,cc@@@Ш@г$listw5cdw6cd@В@г%IdentwDcdwEcd@wHcdwIcd@@@@@@г&LambdawVcd wWcd@°wZcdw[cd@@@@@@@@@w`cd+@@@@~X@@@A@@@@H@ఠ.empty_bindings!wod%d)wpd%d7@wA@@E@@@~G@~y3wvwuwuwvwvwvwvwv@<HB@@@ະ3B @@@~xD@@@3"!@@A@A @3@@B@A@@A*@'&staticwd:d>wd:dD@ภ`Ѱwd:dGwd:dI@m,@@@X@W@@@~@T@@@~@S@@@~@@~@@@~G@~3@))functionswdKdOwdKdX@ภ`wdKd[wdKd]@mS@@@Z@Y@@@~@V@@@~@@~@@@~G@~U@J'dynamicwd_dcwd_dj@ภawd_dmwd_do@mu@@@]@\@@@~@Y@@@~@@~@@@~G@~w@@@wd:d<wdqdt@@z@A@wd%d%@@@}x x " Allocation and backpatching code xdvdvxdvd@@@@@@3xxxxxxxx@@@@@@ఠ0compile_indirect"xddxdd@x.A@@@o@@@G@~@@~o@@@~G@~@@~G@~"@࣠@&newval$Ax4ddx5dd@xMA@@3x5x4x4x5x5x5x5x5@2(x<ddx=ee@@@@@  @@@ఠ(indirect%xJddxKdd@xcA@@o@@@~I@~3xPxOxOxPxPxPxPxP@(7@@ @@@డv+transl_prim&Lambdaxcddxddd@ xgddxhdd@@@`Q@@@ s@@ r@`Y@@@ q@@ pp%@@@ o@@ n@@ m@nv8h8hnw8h8@@p'N@ @@@@@@~@@~@@@@~@@~p;@@@~@@~@@~A@@0CamlinternalLazyxddxdd@@xddxdd@@6@@@~J@~J@~U@@(indirectxddxdd@@xddxdd@@B@@@~J@~J@~i@@Z @@mj@A@xdd @@ภ&Lapplyxeexee @hu<\'ap_funcxe exe e@ఐ(indirectxe exe e#@@@@@p@@@~H@~3xxxxxxxx@ @@@@@c@@@H@H@<+ap_tailcally1eReVy2eRea@ภ0Default_tailcally9eRedy:eRet@<@@@<@@@)H@-^@<*ap_inlinedyGevezyHeve@ภ.Default_inlineyOeveyPeve@;@@@<@@@3H@7t@<.ap_specialisedy]eey^ee@ภ2Default_specialiseyeeeyfee@;@@@<@@@=H@A@@@ynee 2@@i@@@~H@D@@8@@q@@@~@<@@&@F=A@aG@FD@A@A@A@@v@ఠ-compile_alloc&yeeyee@yA@@@q+@@@G@H@@IqC@@@G@J@@KG@G3yyyyyyyy@@@@@@࣠@$size(Ayeeyee@yA@@3yyyyyyyy@+yeey gg@@@@@  @@@ఠ%alloc)yeeyee@yA@@@O@@@kI@O@@P@c@@@I@U@@Vq@@@`I@W@@XI@Q@@RI@N3yyyyyyyy@3?Q@6@7@@@࣠@$prim+Ayeeyee@zA@@(3yyyyyyyy@7yeeyf;fM@@@@@  @@$size,Azeezee@zA@@13zzzzzzzz@!?@@@@@@@@ภ%Lprimzeezee@dภ&Pccallzefzef@Oqఐ9$primz$efz%ef @@@]3z$z#z#z$z$z$z$z$@".U@%@&@@@@@@l@@@bK@j @ภcCz6ffz7ff9ApIภ&Lconst z?ff @pDడx)const_int&LambdazNff"zOff(@ zRff)zSff2@@@@@@ @@ p[@@@ @@ @pX33pY33@@r E@@@@@@@@@pj@@@~@@}H@@ఐz$sizezyff3zzff7@R@@U@@z}ff!z~ff8@@p@@@{@L@_@@Q @@r5@@@dK@tK@zg@ภc|]Ap,@^A@y@@@uK@t@@zfff@@es@@@cK@s|@ఐ@&no_loczf;fFzf;fL@@6@@e{@@@K@@@@@r^@@@a@A@I@@A@@ఐ$sizezffzff@@@43zzzzzzzz@ @@@@@Ġ-Regular_blockzffzff@oఠ$size-zffzff@zA@@vI@@@3zzzzzzzz@@@@@@@@S@@S@@@ఐ.%alloczffzff@(@@@PG@@@@@@%@@@@@r@@@@@@@3zzzzzzzz@=,%@&@'@@@@ఐy8*alloc_prim{ff{fg@x{@@Ph@@@K@K@@@ఐG$size{#fg{$fg @!@@S@@@K@K@+@@@ @@,@Ġ,Float_record{8g g{9g g@o7ఠ$size.{Ag g{Bg g@{ZA@@v@@@@@@@@@@@@@ఐ%alloc{Rg#g){Sg#g.@@@@P@@@@@@@@@@@s @@@@@@@3{c{b{b{c{c{c{c{c@+$@%@&@@@@ఐx蠐7alloc_float_record_prim{sg#g/{tg#gF@xc@@P@@@K@K@@@ఐF$size{g#gG{g#gK@!@@@@@K@K@+@@@ @@,@Ġ*Lazy_block{gLgP{gLgZ@o @@@@ @@ @@@ภ%Lprim{g^gd{g^gi@fภ&Pccall{g^gj{g^gp@Qఐx/alloc_lazy_prim{g^gq{g^g@x,@@Q@@@J@J@@@ @@n"@@@J@@ภd۰{gg{ggAqడz++lambda_unit&Lambda{gg@ {gg{gg@@s@@@ @q33q33@@sF@ @@s@@@J@J@J@.@ภd+Aq@,A@{^@@@J@;@@|gg4@@f٠@@@J@C@ఐB&no_loc| gg| gg@A@@f@@@ J@ S@@ug@@T@@@A|ffi@@3||||||||@V@@@(k@@>@ulA@G@s@A@p@po@@ఠ.compile_update/|- gg|. gg@|FA@@@s@@@4G@@@@s@@@{G@!@@"@ G@'@@(s@@@wG@)@@*G@#@@$G@@@G@3|P|O|O|P|P|P|P|P@@@@@@࣠@$size1A|a gg|b gg@|zA@@.3|b|a|a|b|b|b|b|b@=|i gg|j-ll@@@@@  @@%dummy2A|u gg|v gg@|A@@73|v|u|u|v|v|v|v|v@!E@@@@@@@@&newval3A| gg| gg@|A@@=3||||||||@K@@@@@@@@@@ఠ$prim4| gg| gg@|A@@z@@@AK@.3||||||||@)\@ @!@@@@ఠ&newval5| gg| gg@|A@@yG@G@G@G@/@@  @@@ @@@2@ఐn$size| gg| gh@S@@)@Ġ-Regular_block|h h|h h@q@|h h|h h@@xK@@@6?@@@ @@@@@@@Ġ,Float_record|h h!|h h-@p@|h h.|h h/@@xP@@@9R@@@ @@S@@S@@@@T@@@@ఐy+update_prim}h3h9}h3hD@x@@eb@@ఐ&newval}h3hF}h3hL@k@@n@@@@@x@f@@<u@Ġ*Lazy_block}%hMhS}&hMh]@p@@@@@@@@@@ఐy40update_lazy_prim}3"k*k0}4"k*k@@x@@M@G@@ఐ&newval}C#kBkT}D#kBkZ@@@@Ġ%Lprim}P$k`kj}Q$k`ko@h-Ġ.Pmakelazyblock}Y$k`kp}Z$k`k~@U@}^$k`k}_$k`k@@U@@@Q@@@ @@o@@@R@@}j$k`k}k$k`k@@h@u@@@T@@@S@@}v$k`k}w$k`k@@hC@@@U@@@,}|$k`k@@0@@0@@@ఐ&newval}(lJlT}(lJlZ@ް@@G@d@D@@})l[le})l[lf@@E@@E@@@ఐ0compile_indirect})l[lj})l[lz@@@@uL@@@[@@ZuO@@@Y@@X@@ఐ/&newval})l[l{})l[l@ @@h@@@@/@@@A}#kBkH}*ll@@2@@@@@@@A} gg@@@@ @@q@A@} gg @@ภ%Lprim},ll},ll@hภ&Pccall},ll},ll@S*ఐ@$prim},ll},ll@?@@@A@@S7@@@J@J@3}}}}}}}}@DR >7@8@9@@@@@@pL@@@yJ@ @ภg},ll},llAt ఐ%dummy ~,ll@w @@@ภg~ ,llAtఐb&newval ~,ll@) @@`-@ภg"As@ #A@}h@@@J@:@@*A@}m@@@J@A@@~*,ll2@@i@@@zJ@I@ఐD:&no_loc~9-ll~:-ll@Cİ@@i @@@J@Y@@x@@u@@@x]@@@@A@G@@A@@@~]~\6 Compilation function ~Y/ll~Z/ll@@@@@@3~X~W~W~X~X~X~X~X@ 4-@.@/@@@ఠ.compile_letrec6~i1ll~j1ll@~A@@@q4@pU@@@ J@@/Value_rec_types6recursive_binding_kind@@@J@@v=@@@J@@@J@_@@@xG@@@@vI@@@ZG@@@G@@@G@@@G@I@࣠@.input_bindings8A~1ll~1lm@~A@@@3~~~~~~~~@YO~1ll~}xx@@@@@  @@$body9A~1lm ~1lm @~A@@*3~~~~~~~~@!W@@@@@@@@@ఠ3subst_for_constants:~2mm~2mm)@~A@@qv@@@&M@@@@-J@3~~~~~~~~@+K@"@#@@@డ}_$List)fold_left~3m,m0~3m,m4@ ~3m,m5~3m,m>@@k@@@@+J@@@@G@J@@@ @@@@@@@@@@q֠@@@@@@@@@@@3@6@@@@࣠@%subst;A*3m,mD+3m,mI@CA@@)I@@@@x=A@ఠ"id<=3m,mK>3m,mM@VA@@J@3@??@@@@@@_"A@@@@@@@J3m,mOK3m,mP@@G@ @@@R3m,mRS3m,mS@@G@@@W3m,mJX3m,mT@@@@@ @@@@  @@డy@#Map#add%Identt4mXm`u4mXme@ x4mXmfy4mXmi@@}4mXmj~4mXmm@ @n  @@@qZ@@@@@@@@@r@@@@@r@@@@@@@@@3@VaZ@[@\@@@@ఐh"id4mXmn4mXmp@ @@g@@డ~.dummy_constant&Lambda4mXmq4mXmw@ 4mXmx4mXm@@wh@@@ @u4E4Eu4E4_@@wjG@ @@.@@ఐ%subst4mXm4mXm@@@;@@`@@r@@@@@3m,m?4mXm@@@@@@@@@@@@K@JK@F@@డy#Map%empty%Ident5mm5mm@ 5mm5mm@@5mm5mm@ @J @@s*J@O@@@N@@ఐj.input_bindings5mm5mm@O@@@@%@@5@A@2mm@@@ఠ0all_bindings_rev>&7mm'7mm@? A@@@@@J@W3,++,,,,,@K_X@Y@Z@@@డ~$List)fold_left?8mm@8mm@ C8mmD8mm@@l@@@@%J@\@@e@@@d@@c@@b@@a@ @@`@s@@@^@@]@@[@@Z@@Y3^]]^^^^^@2@@@@࣠@,rev_bindings?Ap8mmq8mm@ A@@%E@@@@yQA@ఠ"id@8mm8mm@ A@@ 3@Y ;@@@@@@ఠ%rkindA8mm8mn@ A@@@@ఠ#defB8mn8mn@ A@@@@8mm8mn@@@+@&@@@&@@  @@ఐ&%rkind9n n9n n@6@&@'@г8/Value_rec_types9n n!9n n0@=9n n19n nG@@@G@@@3@MVX@P@QH<F@6@7@@ @@9n n9n nH@@@T@@@ @Ġ'Dynamic:nNnX:nNn_@;'Dynamic/Value_rec_types6recursive_binding_kind@@@@@@AB@@A:typing/value_rec_types.mliYY@@@ B@@@@@t@@@3@-@@@@x@@@@@@ະ  ʠ@ @@@ܠ@ @@@ݠ@ @@@@@@@@O@@  @ @@@砠@ @@@@@@@@O@@ 'dynamic8;ncn9;ncn@ภ=?;ncn@;ncn@wR@ఐʠ"idM;ncnN;ncn@z@@R@@ఐ#defY;ncnZ;ncn@@@^@@];ncn^;ncn@@@G@J@J@J@J@J@BJ@PJ@\J@J@J@J@@J@J@DJ@RJ@_J@TJ@J@J@J@@@O@O@@ఐ.,rev_bindings;ncn;ncn@@@O@'dynamic;ncn;ncn@  @@ K@@@O@O@@@Q @@ -P@@@O@@@ఐO,rev_bindings;ncno;ncn{@5@@p@;ncnm;ncn@@s@Ġ&Static<nn<nn@;&Static@@@@B@@AUU@@@A@@@  @@O@@@@@R@@@ @@@@ఠ$sizeD=nn=nn@A@@u3@@@P@@ఐuP3compute_static_size=nn=nn@L?@@@y@@@@@uI@@@@@@@ఐq#def=nn=nn@;@@@@@@'@A@=nn@@ఐ8$size>no >no @7@8@9@@ui@@@3"!!"""""@UE@@@Ġ(Constant3?oo4?oo'@q@@@@u}@@@365566666@@@@@@Ġ+UnreachableB?oo*C?oo5@z@@@@u@@@@@@@@@u@@@ @@@@ఠ#defFVDp3pCWDp3pF@oA@@z@@@RR@3\[[\\\\\@:@@@డ%subst&LambdamEpIpWnEpIp]@ qEpIp^rEpIpc@@>@@@@>@@@1@@0@>@@@/@@.@>@@@-@@,> @@@+@@*@@)@@(@@'> >>@@@&@@@%@@$@>zM@@@#@@@"@@!@zU@@@ @@zX@@@@@@@@@@@3@@@@@࣠@|IA@EpIpiEpIpj@@>Z@@@rc@@@@|)HA@EpIpkEpIpl@@>\@@@o@@@@#envGAEpIpmEpIpp@A@@>c@@@@@@@ఐ#envEpIptEpIpw@>r@@@@@@@>p@@@V@3@% @@@EpIpdEpIpx@@@>@@@e@@d@>@@@c@@b@>@@@a@@`>@@@_@@^@@]@@\S@S@@>ภ=)x@)@>>@@@@@@@@t@@ఐY3subst_for_constants/EpIpy0EpIp@@@vGz@@@WS@S@@@@@@ఐ#defGEpIpHEpIp@s@@@@@@@A@LDp3p?@@ະ Ҡ @ @@@@ @@@@ @@@ @@@@@Q@@  @ @@@)@ @@@*@@(@@@'Q@"@ 'dynamicGppGpp@ภ@7GppGpp@y@ఐ"idGppGpp@Ű@@3@wKD@E@F@@@@ఐQ#defGppGpp@ @@ @@@Q@Q@ Q@@@GppGpp@@@Q@@@Q@Q@ %@ఐ],rev_bindingsGppGpp@C@@~2@'dynamicGppGpp@ N @@9#@@@Q@Q@ A@@) @@ \(@@@Q@H@@ఐ~,rev_bindingsGppGpp@d@@S@GppGpp@@V@@@@Ġ%BlockHppHpp@]ఠ$sizeEHpqHpq@A@@~@@@3      @@@@@@@@wU@@@@@wX@@@@@@ະ &staticJq(q6Jq(q<@ภ@Ѱ$Jq(qO%Jq(qQ@z7@ఐ"id2Jq(q@3Jq(qB@_@@321122222@6/@0@1@@@@ఐ<$sizeAJq(qDBJq(qH@ @@ @@@CQ@QQ@^Q@]@@ఐ#defVJq(qJWJq(qM@@@$@@ZJq(q?[Jq(qN@@@@@@@AQ@OQ@`3@ఐ,rev_bindingsrJq(qRsJq(q^@@@&@@&staticyJq(q_zJq(qe@  @@%@@@SQ@hQ@bO@@+ @@H*@@@@Q@NV@ +@*@@@{@'@@@|@@z@@@yQ@t@  @@@@@@@@@@@@@Q@~@@ఐN,rev_bindingsIqqIqq"@4@@o@IqqJq(qg@@r@Ġ(FunctionKqhqtKqhq|@t@@@@x@@@@@x@@@@@@ఐ?#defLqqLqq@ @@O@Ġ)LfunctionMqqMqq@tRఠ$lfunJMqqMqq@ A@@tZ@@@3@@@@@@@@k@@k@@@ະ Ġ@@@@ɠ@@@@ʠ@@@@@@@@@S@@ )functionsOqqOqq@ภAҰ%Oqr &Oqr @{8@ఐ"id3Oqr4Oqr@`@@332233333@IB@C@D@@@@ఐO$lfunBOqrCOqr@ @@@@@S@S@S@@@OOqqPOqr @@@ࠠ@@@S@S@%@ఐ,rev_bindingseOqr fOqr@ް@@2@)functionslOqrmOqr#@  @@Ԡ#@@@S@S@A@@) @@(@@@S@H@ @@@@٠@@@@@@@@@S@@@ఐ-,rev_bindingsNqqNqq@@@Ng@NqqPr$r3@@Qj@@Qr4rBQr4rC@@@@@@@@ఠ&ctx_idKRrGrYRrGr_@A@@Jq@@@T@@డ,create_local%IdentRrGrbRrGrg@ RrGrhRrGrt@@Jl@@@Jl@@@@@J@@@@@@@7letrec_function_contextRrGrvRrGr@@RrGruRrGr@@J@@@U@U@@@' @@7@A@RrGrU @@ఐK5split_static_functionSrrSrr@Kt@@@x@@@@@@K@@@@@@}@@@@@KK@@@@@@@@@@@@3@oh@i@j@@@@ఐv&ctx_id(Srr)Srr@ @@xE@@@U@U@@@డ#Set%empty%IdentDSrrESrr@ HSrrISrr@@MSrrNSrr@ @K@@@U@x@EE@@@L@@@U@U@B@@ఐɠ#defgSrrhSrr@@@O@@o@@LL@@@ @@@ W@Ġ+Unreachable|Trr}Trr@Mk@@@@LL@@@#@@@"3@k@@@ @LL@@@%@@@$@@@డ+fatal_error$MiscUssUss@ UssUss!@@װ@@@@@@E@@DgJ@J@J@J@}J@`J@V@C@@B1@@?letrec: no function for bindingUss#UssB@@Uss"UssC@@@@@LV@NV@ME@@1 @@}F@Ġ)ReachableVsDsTVsDs]@Mঠ$lfunVsDsaVsDseAH ఠL@A@O@@@1@4free_vars_block_sizeVsDsgVsDs{AHఠM@A@O@@@5@@@VsDs_VsDs}@@N@@@7V@6@ఠ#lamN VsDs VsDs@%A@@L@@@8@@@>VsDs@@LL@@@:@@@9@ @LL@@@<@@@;@@@@ఠ)functionsO-Wss.Wss@FA@@~@V@V@OY@@@YV@W@@XV@Q@@@SV@O3CBBCCCCC@.eb@d@cUR@T@SD=@>@?@@@ภCRWssSWss@}e@ఐݠ"id`WssaWss@@@@@ఐ$lfunlWssmWss@$@@-)@@pWssqWss@@@\tlt|\tlt@@KA@l@@L@@@MV@@@ASrr]tt@@P@@@Q@@@ALqq^tt@@T@@@A>nn_tt@@WG@@@X@@@A9n n@@Z@8mm_tt@@@e@@~@ @@@}i@@|@@{K@;K@7@@ఐS.empty_bindings`tt`tt@@@K@?f@@ఐ %.input_bindings`tt`tt@ @@ as@@@@@A@7mm@@@ఠ1body_with_patchesRbtubtu@A@@ NG@G@9G@>J@E3@@@@@@డf$List)fold_leftcuucuu @ cuu!cuu*@@u@@@@)G@J@J@@S@@{1@@@J@w@@@@J@x@@@@J@y@@zJ@M@@R @@Q@@P@@O@$@@N@{$@@@L@@K,@@I@@H@@G354455555@L@@@@࣠@$bodySAGcuu0Hcuu4@`A@@?_@@@@WA@ఠ"idTZcuu6[cuu8@sA@@E3[ZZ[[[[[@s U@@@@@@ఠ$sizeUicuu:jcuu>@A@@M@@ఠ#lamVucuu@vcuuC@A@@R@@zcuu5{cuuD@@@g@b@]@@|&@@  @@ภ)LsequenceduHuPduHuY@m~ఐ k.compile_updateduHu[duHui@ =@@@6@@@@@@P@@@@@@@@W@@@@@@@@@3@U^@X@YP@J@KE@?@@@@@@ఐX$sizeduHujduHun@@@@@ภ$LvarduHupduHut@{ఐ}"idduHuuduHuw@%@@*@@duHuoduHux@@N@/@@ఐt#lamduHuyduHu|@5@@<@@U@@@@@@N@D@ఐ$bodyduHu~duHu@@@O@@tduHu@@@@@T@cuu+euu@@@@@l@@@k@@j@@iK@K@'@@ఐ ]$bodyeuueuu@ 8@@ @@ఐ 0all_bindings_rev,euu-euu@@@@@@@@@&static8euu9euu@;euu<euu@@}1@@@fK@K@ @@J @@:Z@A@Gbtu @@@ఠ3body_with_functionsXRguuSguu@kA@@mJ@3TSSTTTTT@l|u@v@w@@@ఐ ?0all_bindings_revehuufhuu@y@@@@@@3jiijjjjj@@@@)functionsrhuushuu@@@@@@@Ϡ@ @@@@@@@@@ĠsͰiuuiuu@(@@@@-@,@@@ޠ@)@@@@@@@@J@@=@<@@@⠠@9@@@@@@@@Z@@@ఐנ1body_with_patchesiuviuv@a@@ed@ఠ,bindings_revYjvvjvv$@A@@e@d@@@ꠠ@a@@@@@@@@l@@u@t@@@@q@@@@@@@@|@@@@ఠ1function_bindingsZkv(v2kv(vC@  A@@}w@@@M@@@@ M@3@D=@>@?@@@డ}$List'rev_maplvFvNlvFvR@ lvFvSlvFvZ@@@@!a@/@@12!b@/@@11@@10@}@@@1/@@1.;@@@1-@@1,@@1+@w,,w,Z@@wY@*%@@@@@w~@@@M@@z@@@%M@@@M@@@Z@@@@@,@@@@@fe@@@@@@@3`__`````@`@@@@࣠@]A@ఠ"id[wlvFvaxlvFvc@!A@@0x@@ఠ$lfun\lvFvelvFvi@"A@@5@@lvFv`lvFvj@@@C@>@@@@ @@ຠw̡"idmvnv|mvnv~Aఐ- @Y@*@+@Y3@4(V@"@#@@@wӡ#defmvnvmvnv@ఐ4$lfunmvnvmvnv@@@h@@@mvnvzmvnv@@@lvFv[mvnv@@@@@@@N@*N@(@@ఐ ,bindings_revnvvnvv@ϰ@@@@@ N@0N@,z@@ @@@A@kv(v. @@ภ'Lletrecpvvpvv@xఐ1function_bindingspvvpvv@@@@@xx@@@8@@@7L@3@k M@@@@@@ఠ#lamasw w+sw w.@&A@@F@@sw w&sw w/@@@T@O@@@@ @@ภ$Llettw3w;tw3w?@{ภ&Stricttw3w@tw3wF@;&Strict{@@@ t@@@@C@@A!k!{!k!@@@i@@  @@{@@@M@3@=F}@@@A8w@2@3@@@ภ'Pgenvaltw3wHtw3wO@N@@@| @@@M@@ఐ["idtw3wQtw3wS@@@@ఐW#lamtw3wUtw3wX@%@@*@ఐ$bodytw3wZtw3w^@m@@5@@Qtw3w_@@@@@:@sw wtw3w`@@@@@@@@@@@@K@K@@@ఐˠ3body_with_functionsuwawguwawz@@@@@ఐ 0all_bindings_rev,uwaw{-uwaw@@@@@@@@@'dynamic8uwaw9uwaw@@@@@@K@K@@@ @@@A@Ervv @@@ఠ9body_with_pre_allocationscPwwwQwww@i'A@@J@3SRRSSSSS@2<5@6@7@@@డ$List)fold_leftfxwwgxww@ jxwwkxww@@z @@@@J@@@@@|@@@XJ@4@"@@@LJ@5@=@@@{J@6@@7J@ @@@@@@ @@ @#@@ @\$@@@ @@+@@@@@@3@K@@@@࣠@$bodydAxwwxww@(A@@>^@@@@iA@ఠ"idexwwxww@)A@@E3@r T@@@@@@ఠ$sizefxwwxww@*A@@M@@ఠ$_lamgxwwxww@+A@@R@@xwwxww@@@g@b@]@@9&@@  @@@ఠ%allochywwyww@,A@@@@@JN@>3@>G@A@B9@3@4.y@(@)@@@ఐ-compile_allocywxywx @@@@@@@C@@B@@@A@@@@@ఐW$size)ywx*ywx@$@@*@@@@.+@A@.yww@@ภ$Llet5zxx6zxx"@}pภ&Strict>zxx#?zxx)@@@@}y@@@VM@^3CBBCCCCC@ESL@M@N@@@ภ'PgenvalPzxx+Qzxx2@P@@@}@@@WM@b@ఐ"id`zxx4azxx6@\@@@ఐr%allockzxx8lzxx=@%@@@@@YM@eM@d/@ఐР$body}zxx?~zxxC@@@ :@@LzxxD@@,@@@U?@X@@@xwwzxxE@@@@@)@@@(@@'@@&K@qK@m?@@ఐ8body_with_dynamic_values{xFxL{xFxd@I@@~@@ఐ0all_bindings_rev{xFxe{xFxu@°@@>@@@|@v@&static{xFxv{xFx|@=@@H@@@#K@}K@w$@@` @@Pp@A@www @@ఐ9body_with_pre_allocations}xx@}@~@@@~3@}@@@@@@@@@@@@ @@@!@@@"@@@,#A@nG@*@A@'@'&@@ J@[@V@g@e@a[A@A@;5A@)B@u@@7@TY=@YdW#@WWA@VVA@VbU\@U]T@U T@TT|@TbT`@A@@p@@@@@@@3@@@@2Value_rec_compilerB@@ H************************************************************************A@@ A@L@ H %BMM&BM@ H OCaml +C,C@ H 1D2D3@ H Vincent Laviron, OCamlPro 7E448E4@ H =F>F@ H Copyright 2023 OCamlPro SAS CGDG@ H IHJHg@ H All rights reserved. This file is distributed under the terms of OIhhPIh@ H the GNU Lesser General Public License version 2.1, with the UJVJ@ H special exception on linking described in the file LICENSE. [K\KN@ H aLOObLO@ H************************************************************************gMhM@ /* Compilation of generic recursive definitions m L* The surface language allows a wide range of recursive definitions, but Lambda only allows syntactic functions in recursive bindings. This file implements the translation from generic definitions to Lambda. The first step occurs during typechecking, in [Value_rec_check]: [Dynamic] bindings need to be compiled as normal let bindings. This file mostly deals with the [Static] bindings. The three phases in this module are the following: - Sizing: we first classify the definitions by their size, which determines the compilation strategy for each binding. - Function lifting: we then apply a transformation from general function definitions to syntactic functions accepted by [Lletrec]. Examples: {[ let rec f x = f x (* Syntactic *) let rec f = fun x -> f x (* Syntactic *) let rec f = let g x = f x in g (* Not syntactic *) let rec f = let a = ... in (fun x -> f x) (* Not syntactic *) ]} - Compilation: we finally combine all of this to produce a Lambda term for the recursive bindings. Ϡ )* Allocation and backpatching primitives  > Note: [alloc] could be false, but it probably doesn't matter vz  wz  @.* {1. Sizing} / Simple blocks C  C  @ * Non-returning expressions, like [raise exn]. In [Value_rec_check], they would be classified as [Dynamic], but some of those appear during translation to Lambda. For example, in [let rec f = let [| x |] = ... in fun y -> x + y] the inner let binding gets translated to code that raises [Match_failure] for non-matching branches. Tracking [Unreachable] explicitly allows us to recover the size of the only non-raising branch. } -* Constant values. Can be either an integer-like constant ([0], ['a'], [None], the empty list or the unit constructor), or a structured constant (["hello"], [Some 1], ...). Integer constants cannot be pre-allocated, so need their own classification and compilation scheme (See {!Compilation} below). Structured constants could fit into the [Block] category, but we choose to reuse the [constant] classification to avoid sorting through the [Lconst] definitions. It also generates slightly better code. i * Function definitions. This includes more than just obvious, syntactic function definitions; see {!Function Lifting} for details. U * Allocated values of a fixed size. This corresponds to expressions ending in a single obvious allocation, but also some more complex expressions where the block is bound to an intermediate variable before being returned. < > [join_sizes] is used to compute the size of an expression with multiple branches. Such expressions are normally classified as [Dynamic] by [Value_rec_check], so the default behaviour is a compile-time failure. However, for partial pattern-matching (typically in let bindings) the compiler will later add a branch for the failing cases, and this is handled here with the [Unreachable] case. Note that the current compilation scheme would work if we allowed the [Constant] and [Block] cases to be joined, but [Function] needs to be a single function. s{1I@  We need to recognize the Pmakeblock that we transformed into primitive calls, to support size compilation in nested recursive definitions. Consider this example from Vincent Laviron: {[let f a = let rec x = let rec y = Some a in y in x ]} [let rec y = Some a in y] gets compiled to {[let y = caml_alloc_dummy 1 in caml_update_dummy(y, ...); y]} and we need to recognize from this definition that this value has known size [1]. @) ignored 5O5\@) ignored +F+S@ Unit-returning primitives. Most of these are only generated from external declarations and not special-cased by [Value_rec_check], but it doesn't hurt to be consistent. $;$C$%@ The block shape is unfortunately an option, so we rely on the number of arguments instead. Note that flat float arrays/records use Pmakearray, so we don't need to check the tag here. &w&'8'\@ < The size has to be recovered from the size of the argument ((()#@ These primitives are not special-cased by [Value_rec_check], so we should never end up here; but these are constants anyway. *** +*`*@8* {1. Function Lifting} W 3 The compiler allows recursive definitions of functions that are not syntactic functions: {[ let rec f_syntactic_function = fun x -> f_syntactic_function x let rec g_needs_lift = let () = ... in (fun x -> g_needs_lift (foo x)) let rec h_needs_lift_and_closure = let v = ref 0 in (fun x -> incr v; h_needs_lift_and_closure (bar x)) let rec i_needs_lift_and_eta = let aux x = i_needs_lift_and_eta (baz x) in aux ]} We need to translate those using only syntactic functions or blocks. For some functions, we only need to lift a syntactic function in tail position from its surrounding context: {[ let rec g_context = let () = ... in () and g_lifted = fun x -> g_lifted (foo x) ]} In general the function may refer to local variables, so we perform a local closure conversion before lifting: {[ let rec h_context = let v = ref 0 in { v } and h_lifted = fun x -> incr h_context.v; h_lifted (bar x) ]} Note that the closure environment computed from the context is passed as a mutually recursive definition, that is, a free variable, and not as an additional function parameter (which is customary for closure conversion). Finally, when the tail expression is a variable, we perform an eta-expansion to get a syntactic function, that we can then close and lift: {[ let rec i_context = let aux x = i_lifted (baz x) in { aux } and i_lifted = fun x -> i_context.aux x ]} {1177@ The closure blocks are immutable. (Note: It is usually safe to declare immutable blocks as mutable, but in this case the blocks might be empty and declaring them as Mutable would cause errors later.) 9"9"99@, Eta-expand ::::@ D Note: knowing the arity might let us generate slightly better code :::;A@ 2 Note: When there are no local free variables, we don't need the substitution and we don't need to generate code for pre-allocating and backpatching a block of size 0. However, the general scheme also works and it's unlikely to be noticeably worse, so we use it for simplicity. @T@XAVA@3* {1. Compilation} Ƞ * The bindings are split into three categories. Static bindings are the ones that we can pre-allocate and backpatch later. Function bindings are syntactic functions. Dynamic bindings are non-recursive expressions. The evaluation order is as follows: - Evaluate all dynamic bindings - Pre-allocate all static bindings - Define all functions - Backpatch all static bindings Constants (and unreachable expressions) end up in the dynamic category, because we substitute all occurrences of recursive variables in their definition by a dummy expression, making them non-recursive. This is correct because: - [Value_rec_check] ensured that they never dereference the value of those recursive variables - their final value cannot depend on them either. Functions that are not already in syntactic form also generate an additional binding for the context. This binding fits into the static category. Example input: {[ let rec a x = (* syntactic function *) b x and b = (* non-syntactic function *) let tbl = Hashtbl.make 17 in fun x -> ... (tbl, c, a) ... and c = (* block *) Some (d, default) and d = (* 'dynamic' value (not recursive *) Array.make 5 0 and default = (* constant, with (spurious) use of a recursive neighbor *) let _ = a in 42 ]} Example output: {[ (* Dynamic bindings *) let d = Array.make 5 0 let default = let _ = *dummy_rec_value* in 42 (* Pre-allocations *) let c = caml_alloc_dummy 2 let b_context = caml_alloc_dummy 1 (* Functions *) let rec a x = b x and b = fun x -> ... (b_context.tbl, c, a) ... (* Backpatching *) let () = caml_update_dummy c (Some (d, default)); caml_update_dummy b_context (let tbl = Hashtbl.make 17 in { tbl }) ]} Note on performance for non-syntactic functions: The compiler would previously pre-allocate and backpatch function closures. The new approach is designed to avoid back-patching closures -- besides, we could not pre-allocate at this point in the compiler pipeline, as the closure size will only be determined later. For non-syntactic functions with local free variables, we now store the local free variables in a block, which incurs an additional indirection whenever a local variable is accessed by the function. On the other hand, we generate regular function definitions, so the rest of the compiler can either inline them or generate direct calls, and use the compact representation for mutually recursive closures.  #* Allocation and backpatching code 㠠 h if you add new allocation primitives below, you should update {!find_size_of_alloc_prim} as well. fSfUff@  Consider the following example from Vincent Laviron: {[let rec v = let l = lazy (expensive computation) in let () = maybe_force_in_another_domain l in l ]} The naive/simple compilation scheme would do a [caml_update_dummy_lazy(v, l)], and the dummy-update code could run concurrently with another domain forcing [l]. To avoid this issue, lazy blocks get updated via [caml_update_dummy_lazy(dummy, CamlinternalLazy.indirect newval)], where [CamlinternalLazy.indirect] returns a fresh/local thunk that is not getting forced concurrently (whereas [newval] might be). hahg!k!k)@ No need to wrap the thunk if was just constructed. This removes indirections on terms defined as lazy thunks at the toplevel: [let rec x = lazy ...] %kk'llI@7* Compilation function  The result never escapes any recursive variables, so as we know it doesn't inspect them either we can just bind the recursive variables to dummy values and evaluate the definition normally. @o9oECp$p2@@-./boot/ocamlc)-nostdlib"-I&./boot*-use-prims2runtime/primitives"-g0-strict-sequence*-principal(-absname"-w8+a-4-9-40-41-42-44-45-48+-warn-error"+a*-bin-annot/-strict-formats"-I&lambda"-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_events"-c=> 9/builds/workspace/main/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@0hNl$=b3XWWXXXXX@V@@(Asttypes0eT$BbRM dc5Build_path_prefix_map0DGl}%Y5Lhi8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Cmi_format0`M{?w}@*Data_types0v\3,Svh)Debuginfo0_ |PooGq#Env0S B2*Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N 0x_edT-uq0pZ/Dg/e&{m؜)Load_path0,j " nn7ݠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0Bpg]?[q+Outcometree0BuG^)= 9c )Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0dU=\I/}%Shape0 M``ll&Stdlib0t0VoS%{<F:.Stdlib__Buffer0,I[?z.Stdlib__Digest0#z25I*.Stdlib__Domain0'Ϳo\0m.K.Stdlib__Either0HD ?|>.Stdlib__Format00FClW/Stdlib__Hashtbl0(L%bԠ,Stdlib__Lazy0$1mlࠠ.Stdlib__Lexing0^m|e,Stdlib__List0C|Z`>s䠠+Stdlib__Map0*4ɇ2ɠ%Subst0=aqT/!p+.Type_immediacy00$ jbv\"k&%Types0"|Vȷ`X )Unit_info0'T Χ@aRN0ZRWfP2;ȣw0`4xiVC(Warnings0Ef{&@@Ae@YTYBq{@@FFxƑx@2q2{C'C1őq@-U-_nב@@33P@P|@@@8s8}@  is@ϕDCC[ԑ[ްQ@R\DN@}|n@ * 4OOQQ@ӑYc>Hu@MM7@Yc?@@V# P:@ۑ~a~k@. .@RۑR{{@YCY/@@@$@** YY@@ɑӰ9`9j@=;=E@_i@@@@1;fs2<@@V`UjUt{@(AYtYiiGQ@@]gKБKڰT4T>@u1Pv@  X0XGYgY]@L%L/WޑWY=YG@h@@0@FEE@ H R@@@WW@VNVXVV@323<@@  ە@))YZ$@QQ@iM@@ U _@ak@@@P&@@@@@A@@