Caml1999T037L5^/C,Shape_reduceР%Shape%Shape6typing/shape_reduce.mlRR@@ 3@@@@@@#intA;@@#intA@@@@@&_none_@@A@A@$charB;@@$charA@@@@@ @A@&stringQ;@@&stringA@@@@@@@@%bytesC;@@%bytesA@@@@@@@@%floatD;@@%floatA@@@@@@@@$boolE;@@%falsec@@%@$trued@@+@@@A@@@@@,@A@$unitF;@@"()e@@6@@@A@@@@@7@A@ #exnG;@@@A@@@@@;@@@#effH;@@O@A@A@@@@@@D@@@,continuationI;@@Q@@P@B,continuationA@nY@@@@@@T@@@%arrayJ;@@R@A%arrayA@@@@@@_@@@ $listK;@@S@A"[]f@@l@"::g@@@T@@y@ @@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\#$@@@A@'FailureY#,@'@@A@0Invalid_argumentX#5@0@@A $#@-Match_failureV#>@@=@9@;@@a@@A5!4!@)Not_foundZ#O@@@A&=)<)@-Out_of_memoryW#W@@@A.E1D1@.Stack_overflow^#_@@@A6M9L9@.Sys_blocked_io_#g@@@A>UATA@)Sys_error[#o@j@@AG^J]J@:Undefined_recursive_modulea#x@@w@s@u@@h@@AXo[n[@:Continuation_already_takenb#@@@A`wcvc@&Stdlib@@@@A3@@@R@@@3@@@A+&result*ATT@@;@@(Resolved+#Uid!t@@@ @@UU@@BA.Resolved_alias<#Uid!t@@@ *@@@ @@VV'@@CA*Unresolved=!t@@@ @@W(*W(;@@DA,Approximated><#Uid!t@@@ @@@ @@X<>X<\@@EA:Internal_error_missing_uid?@@Y]_Y]{@@FA@@A@@@@@T@@@@@A@#YYUU@O@г[]UU@`U^@_@@h3@x;@@@A@@@@@@@@@@ d@@@@f@#bb!V"V@S@гdf,V-V@i0V1V@@@r@@гl&result;V!m@@s$n@@@@p@#llAW(,BW(6@d@гnoJW(:m@@t3n@@@@p@#llPX<@QX<L@]@гn&optionZX<Vg@гrtcX<PdX<S@wgX<ThX<U@@@R@@@S x@@@@z@#vvpY]at@s@@@w@@A@s@@sv@3nmmnnnnn@@@Aఠ,print_result@[}[}@GA@@@&Stdlib&Format)formatter@@@(B@ @@ +@@@@ 9B@ $@@ *$unitF@@@$[B@ &@@ )@@ (3@@@@࣠@#fmtAA[}[}@HA@@/3@=@8@@ !@.@@ %(@@ 'C@ "@@ #C@ @C@D@@@@@@&resultBA[}[}@IA@@<3@*O@!@"@@@@@@ఐ&result\\@M@@@@N3@@@@Ġ(Resolved]]@;G[@@@ @HA@AD@AA@@>ఠ#uidC]]@JA@@S@@@ ;3@!@@@@@@@q@@q@@@డz&Format'fprintf^^@ ^^@@@@@@@@@&Stdlib&format!a@ Ҡ@@@ʠ@@@@@@@@ @@@@@*format.mli.....k@@.Stdlib__Format@/*@@@@@@7@@6@'@@@@@FF@#@@#@%Shape#Uid!T!t@@@#F@NF@#@@#B@GF@#@@#@@#F@J@@K@@@O F@P@@QF@L@@MF@1@@@4@@@5@@@3@@2:@@0@@/3@@@@@@@ఐꠐ#fmt^^@ư@@@@ภ8CamlinternalFormatBasicsv&Formatx^^A;&Format8CamlinternalFormatBasics'format6!a@!b@!c@!d@!e@!f@@@@"@'#fmt$ @@@"ڠ&stringQ@@@"@B@@A@A*@@@r@ภ(Open_box;(Open_box%!a@ Π!b@ Ϡ!c@ Р!d@ Ѡ!e@ Ҡ!f@ @@@!M@"@@@!N@AA@BAAH Q SI  @@@O@ภO&FormatQ֠ภX-End_of_formatZ;-End_of_format!f@J!b@K!c@L!e@M@@@"@@@@AYAA.../!@@@y@@@ؠ]H@#LZF@##F@#7G@#HG@#YIF@#$G@#8G@#IG@#Z H@#PsH@#Q@@@#[G@#f<@ %@%@@@@#\G@#iG@#hH@@,@)H@#<(!"#H@#@H@#A@@@#JG@#XW@@;@ H@#*5./2F@#yG@#'-G@#(@@@#9G@#Gh@ภVˠ.String_literalU;.String_literal+!a@!b@!c@!d@!e@!f@@@@"8@A@@@"9R'#@@@":@BKAYAAI$}$}J$%@@@k@)Resolved:@@@@@#zG@#}G@#|@ภ.Formatting_lit;.Formatting_litw!a@!b@!c@!d@!e@!f@@@@"\@.formatting_lit@@@"]($ @@@"^@BQAYAA)()())@@@q@ภX%BreakZ;%Break@@@!J@@@@!D#intA@@@!E@@@!F@C@GC@A|  |  9@@@@@"@ @@@@@#G@#G@#%@A @$@@@#G@#G@#0@@@(@@@#G@#G@#;@@@\@@@#G@#@@ภ.%Alpha-;%Alpha@@!b@@@"T@!x@@@"S!c@@@"R@@"Q@@"P@ @@"O!a@@@"N@@"M!d@٠!e@ڠ!f@@@@"L@9/$@@@"U@AOAYAA0''1(.(j@@@io@ภ}{ڠภ)Close_box;)Close_box@@@@GC@AHz Iz @@@~@@@@@@#G@#@ภ@@n[F@#F@#H@#ȠF@#xF@#F@#H@#ɠH@#ʠH@#ˠH@#̠H@#@@@#G@#@@@ F@# "H@#$H@#&H@#@@@#G@#@@@"H@#(/H@#23@@@#G@#@@@0H@#k4H@#n@@@#{G@#@@@۠Ԡ֠@@@#:G@#w @@@ĠIH@#ߠ@@@#%G@#6@1@[Resolved:@ %a@]@@@@@#&G@#G@##@@@@cV>@@@EG@#",@@డ#Uid%print^^@ ^^@@@&Stdlib&Format)formatter@@@ @@ @u@@@ @@ $unitF@@@ @@ @@@0typing/shape.mliI  I  @@,IdentifiableD@*%@@F@#f@@ఐ#uid^^@p@@F@#u@@@@ev@Ġ.Resolved_alias _ _@;Q@OBAAD@AC@@@ఠ#uidD__@*KA@@Z@@@ ?3@9@@@ఠ!rE&_'_@9LA@@a@@@ @@@@"._@@@@@@@డ&Format'fprintf<`!'=`!-@ @`!.A`!5@@'@@@@@@$K@@$J@'@@B@(B@(cB@(fB@'+B@'6B@%B@&B@$ZF@%.@@%>@ @@@%F@$bF@%'@@%=F@%+@@%<@@%;F@$^@@$_@ @@$c@@0F@%@@%@F@$jF@%@@%F@%@@%@@%F@$f@@$g@ @@$k$F@$l@@$mF@$h@@$iF@$d@@$eF@$`@@$aF@$E@@@$H @@@$I@@@$G@@$FZ@@$D@@$C3@@@@@@@@@ఐ #fmt`!6`!9@@@7@@ภ"!`!:`!QA ภ- ޠภ5ภ=c8ภEb#a@#@H@$ΠF@$F@$G@$G@$۠F@$G@$G@$G@$ܠ H@$ҠH@$@@@$G@$]@AE@E@1@@@$G@$G@$h@@L@iH@$' !"H@$ H@$@@@$G@$w@@[@H@$4-.1F@$G@$,G@$@@@$G@$@ภ @ t?&Alias:y@y@$@@@$G@$G@$@ภ ภ'(Π@@@@@%G@%G@%@A@@@@%G@%G@%@@@@@@%G@%!G@% @@@@@@%G@%@ภUVภ]F^Eภekfj@@+@@@%UG@%Z@ภrs# ->@@@@@%gG@%jG@%i@ภonภ65@@7@@@%G@%G@%@A@=@@@%G@%G@%)@@@A@@@%G@%G@%4@@@u@@@%wG@%9@ภG%ภOĠl-k@-@#F@%F@%5F@%rjH@% H@%H@%@@@%G@%_@@C@9H@%l$F@$F@%F@%4H@%m"H@%nH@%o'H@%p*H@%q@@@%xG@%{@@_@UH@%\H@%]8H@%^3H@%_=H@%`@H@%a@@@%hG@%v@@u@kH@%J2H@%KNH@%LIH@%MSH@%NVH@%O@@@%VG@%f@@@F@%%aH@%/cH@%0eH@%1@@@%HG@%T@@@H@%Tn?H@%qr@@@%G@%?@@@$H@$`JMH@$MN@@@$G@% @@@RY@@@$G@$@@@=H@$@@@$G@$@5@[Alias:@ %a@] ->@ %a@@@@@$G@%G@%@@@@~WJ @@@$YG@$@@డ #Uid%print aRZ aR]@  aR^ aRc@@@@jF@%@@ఐ#uid aRd aRg@!@@\F@%'@@ఐ^,print_result aRh aRt@'@@XF@%6@@ఐƠ!r aRu aRv@>@@XG@%E@@@@UF@Ġ*Unresolved bw{ bw@;+ @)ABAD@A$@@!ఠ%shapeF bw bw@ MA@@4@@@ C3        @)@@@@@@@y@@y@@@డ&Format'fprintf c c@  !c "c@@@@@@@@%@@%@@@@@@%F@&@@&@!t@@@' F@%F@&@@&F@%F@&@@&@@&F@%@@%@@@% F@%@@%F@%@@%F@%ݠ@@@%@@@%@@@%@@%4@@%@@%3 b a a b b b b b@f_@`@a@@@@ఐŠ#fmt tc uc@@@@@ภ P Q c cA٠ภ [ \ ภ cO dNภ k lภ s t#@#@ҠvH@&^sF@&5F@&IG@&ZG@&kiF@&6G@&JG@&[G@&l H@&bH@&c@@@&mG@&x[@E@E@@@@&nG@&{G@&zf@@L@"H@&N' !"H@&RH@&S@@@&\G@&ju@@[@H@&<4-.1F@&G@&9,G@&:@@@&KG@&Y@ภO Ġ t+Unresolved:y@y@@@@&G@&G@&@ภc ؠ ภk  l@@@@@&G@&G@&@A@@@@&G@&G@&@@@@@@&G@&G@&@@@@@@&G@&@ภ k jภ  ภ $ #@@@@@&G@&@ภ + ,@@~F@&F@&H@&ڠF@&F@&F@&H@&۠H@&ܠH@&ݠH@&ޠH@&@@@&G@&@@@ F@&D3"H@&$H@&&H@&@@@&G@&$@@ @]H@&(/H@&23@@@&G@&2@@@ǠkH@&}4H@&@@@&G@&@@@&@ՠȠ@@@&LG@&K@@1@H@&@@@&7G@&HX@3@[Unresolved:@ %a@]C@C@@@@&8G@&G@&d@@JI@@@@@%G@&4m@@డ %print c c@@&Stdlib&Format)formatter@@@@@@@@@@@$unitF@@@@@@@@___@@C@#"@@F@'@@ఐ%shape c c@@@G@'@@@@ v@Ġ,Approximated d d@; = ,@ ;ACAD@A /@@ ,Ġ$Some (d )d@; n  ~@@W@ pA@AA@A @@ pఠ#uidG 7d 8d@ JNA@@ Q@@@ K Y@@@ ?d @d@@ [ Z@@@ M@@@ L c@@@, @@  d@@  d@@@డ &Format'fprintf Ve We@  Ze [e@@ A@@@ @@@'@@'@ A@@ @@@'(F@'@@(@ @@@(BF@'0F@'@@( F@')F@'@@(@@(F@',@@'-@@@'1 F@'2@@'3F@'.@@'/F@' @@@' @@@'@@@'@@'2@@'@@'3        @ mf@g@h@@@@ఐ #fmt e e@ ذ@@ '@@ภ     e eA ภ    Πภ %  ภ - S  (ภ 5 R #Q@#@ tH@'qF@'kF@'G@'G@'iF@'lG@'G@'G@' H@'H@'@@@'G@'[@1E@E@ !@@@'G@'G@'f@@L@ YH@'' !"H@'H@'@@@'G@'u@@[@H@'r4-.1F@'G@'o,G@'p@@@'G@'@ภ  0 t/-Approximated:y@y@@@@'G@'G@'@ภ   ภ   @@@@@'G@'G@'@A@@@@'G@'G@'@@@@@@'G@'G@'@@@@@@'G@'@ภ  E Fภ  M6 N5ภ  U[ VZ@@@@@(G@( @ภ  b  c @@ ~F@'F@'H@(F@'F@'F@'H@(H@(H@(H@(H@(@@@(G@((@@@  F@'B3"H@'$H@'&H@'@@@(G@($@@ @ [H@'Ǡ(/H@'ʠ23@@@'G@(2@@@ iH@'4H@'@@@'G@'@@@&@ Ƞ@@@'G@'K@@1@ H@'K@@@'mG@'~X@5@[Approximated:@ %a@]C@C@ @@@'nG@(*G@()d@@JI@@ ݠ@@@''G@'jm@@డ#Uid%printee@ ee#@@S@@F@(>@@ఐ#uid-e$.e'@@@F@(E@@@@ @Ġ,Approximated=f(,>f(8@ Ġ$NoneFf(9Gf(=@; @@@@AA@A@@ @@@@ e d@@@ V@@@ U m@@@ @@  n@@  n@@@డ &Format'fprintf`gAGagAM@ dgANegAU@@ K@@@ @@@(Q@@(P@ K F@(aF@(K @@@(N @@@(O@@@(M@@(L @@(J@@(I @@ఐ ޠ#fmtgAVgAY@ @@  @@ภ i jgAZgApA ภ t u  4Approximated: No uid@@ @@@(G@(G@( @ภ  0 /@@ LF@(F@(H@( ?@@@(`G@(G@(  @@@(G@( @@6@ H@({@@@(G@( @7F@F@ @@@(G@(G@( @@ML@@  w&w@@@(_G@( @@U@@ T @Ġ:Internal_error_missing_uidhquhq@;  @@@@AD@A @@ @@@@ i @@ i @@@డ r&Format'fprintf ii@ ii@@ @@@ @@@(@@(@  F@(F@(֠ @@@(٠ @@@(@@@(@@( @@(@@( K@@ఐ #fmt:i;i@ g@@  X@@ภ  HiIiA ภ ! V"  U+Missing uid@@ :@@@):G@)=G@)< y@ภ 5 6 @@ LF@)'F@)9H@)+ @@@(G@)&G@)8  @@@);G@)G @@6@ H@)@@@)(G@)7 @7F@F@ @@@))G@)JG@)I @@ML@@ ow&w@@@(G@)% @@U@@  @@@A\W@@ 3@ @@@ YA@@ !@@)@ @@) @@)@@)B@) @@@[}}e@@f@ @ఠ*find_shapell@OA@@@#Env!t@@@7VB@)@@)@%Ident!t@@@8B@)@@)%Shape!t@@@7RB@)@@)B@)@@)B@)3@ 2@@@࣠@#envAll@PA@@43@ CCln 7@@@@@  @@"idAl l@QA@@83@!K@@@@@@@@@ఠ)namespacemm@.RA@@ 2Sig_component_kind!t@@@)E@)3#""#####@)W@ @!@@@ภ%Shape5m6m@2Sig_component_kind:m;m@@&Module@mAm@@;&Module$@@@)@@@DI@@A `RW[ aRWc@@@ Z@@ @@-@@@))@A@Rm@@డ#Env-shape_of_path#Envbn  cn @ fn gn @@)namespace2Sig_component_kind!t@@@1@@1@@@@1@@1@$Path!t@@@1@@1@@@1@@1@@1@@1@.typing/env.mlitu@@C@2-@@*(@@@7A@@7@@@@@7?@@7>@#@@@7=@@7<@@@7;@@7:@@79@@783@@@@@@Eఐ)namespacen n '@ @@P@@@7XE@7ZE@7Y@@ఐܠ#envn (n +@@@ $@@ภ&Pidentn -n 3@;&Pident$Path!t@@@7@@@@7@A@@D@A/typing/path.mliSTVSTi@@@ B@ఐ"idn 4n 6@ϰ@@&N@@n ,@@{@@@7TE@8U@@@@"V@@@#@A@FB@9@A@ @  @$Make Bp9@p9D@$A@Т&ParamsCp9Ep9K@Б$fuel*qRX+qR\@г#int3qR_4qRb@@ @@@9332233333@}@~@@A @@@>qRT @@PVA@ @@ /read_unit_shapeIrciJrcx@б)unit_nameг&stringVrcWrc@@ @@@93VUUVVVVV@$7!@A@@г&optionercfrc@гr!torcprc@@ @@@9@@@@@@9 @@/&@@9 @@9#rc{@@@rce@@WA@@@*@aK@D @@3@/F @A3@T@@p9Ns@@БA+"nfDw  w  @@;@@#uid@@#Uid!t@@@9@@@9аw  !w  3@@]A$desc@@'nf_descD@@@9Ӱw  4w  B@@^A,approximated@@}@@@9ְw  Cw  U@@_A@@A@@@@@w  w  W@@@@YA@#33&w  $@%@@Ш@г6&optionw  ,w  2@г;=w  &w  )@@w  *w  +@@@I3@@@~@@@XAg;@@@A@@@@@3@@@0F;@@@A@@@@@x X ZA C Y@@@@ZA*delayed_nfD;@@@A@@@@@ U   U  @@@@[A)local_envD;@@@A @@@M[@9@@@@W  W @@@@.\A@@50@@@{.6?@@~@@91@r@#nng&w  8@f@@Ш@гq'nf_desc/w  :0w  A@@y@@@|@@9C@v@#rrm8w  O@l@@Ш@гu$boolAw  Qv@@|Qw@@@@9T@{@@A@w@+Ix X ^Jx X e@@;@@$NVar]#var@@@9@@Yy h lZy h y@@l`A$NApp@@@9ڠ@@@9@@lz z ~mz z @@aA$NAbsi@@@9ܠ#var@@@9ݠ!t@@@9ޠ@@@9@@{  {  @@bA'NStruct$Item#Map!t@@@=@@@=@@|  |  @@cA&NAlias㐠@@@=@@}  }  @@dA%NProj䐠%@@@=$Item!t@@@=@@~  ~  @@eA%NLeaf@@    '@@fA*NComp_unit搠@@@=@@@ ( ,@ ( B@@gA&NError琠@@@=@@A C G@@hA@@A@@@@@@@@@#y h ny h r@@гy h v@@ @@@@@#z z z z @@г"nf z z  z z @@@@г"nfz z @@&@@@@@#{  {  @@г)local_env&{  '{  @@7@@г/{  0{  @@@@@г8{  9{  @@I@@г*delayed_nfB{  @@R@@@@@#H|  I|  @@гU|  V|  @Y|  Z|  @@°^|  @ @гĠ*delayed_nfg|  h|  @@x@@@y@@@@@#ŠŰo}  p}  @@гǠ*delayed_nfy}  @@@@@@@#Ǡǰ~  ~  @@гɠ"nf~  ~  @@@@гΠа~  ~  @Ӱ~  @@@@@@@@#ѠѰ  "@@@@@#Πΰ@ ( .@ ( 8@@гР&string@ ( <@@@@@@@#РаA C IA C O@@гҠ&stringA C S@@ϰ@@@@@@A@@+U  U  @@;@@%Thunk萠@@@=!t@@@=@@U  @@iA@@A@@@@@@@@@#U  @@г)local_envU  U  @@@@гU  @@ @@@@@@A@@+W  W  @@;@@@A%Ident#Map!t^@@@A@@@A@@@A@@@@@@@@@Aг%IdentW  W @!W "W @@&W  @  @г!&option/W  0W  @г&*delayed_nf8W  9W  @@.I@@@3J @@@>K!@@#@@o"@398899999@I@@@ఠ)approx_nfJ]K](@]jA@@@@@@ME@M@@M@@@ME@M@@ME@M3ZYYZZZZZ@nUi]@@@࣠@"nfAo])p]+@kA@@3nmmnnnnn@.w]x]M@@@@@  @@ະ3*@@@M@@@3@@A@A@3@@B@A@@A@Ӡ@@@M@@@MF@M@ @@@MF@M@,approximated]8]D@ภ$true]G]K@;O_@@@M@@@AB@@A}@@R@ @@@@@MF@M3@AMb@D@E@@@@ఐR"nf]0]2@ @@m@].K@@i@ULA@vE@MS@A@P@PO@h@ఠ-in_memo_table_OU_Ob@lA@@@U'Hashtbl!t@@QE@O@@QE@O@@@QE@M@@M@E@M@@M@@@@Q@@QE@QA@QE@M@@M@ E@M@@M$E@M@@ME@M@@ME@M@@ME@M@@ME@M3        @@@@@@࣠@*memo_tableA_Oc_Om@0mA@@E3@T%_OQ&e)4@@@@@  @@(memo_keyA1_On2_Ov@DnA@@@30//00000@!\@@@@@@@@!fAB_OwC_Ox@UoA@@J3A@@AAAAA@T@@@@@@@@#argAS_OyT_O|@fpA@@K3RQQRRRRR@^@@@@@@@@డ'Hashtbl$findk`l`@ o`p`@@@!a@N!b@N@@@N@@N@@@N @@N@@N@+hashtbl.mli@@/Stdlib__HashtblF@$@@@@@@O@@O@@@O@@O@@O3@FR@I@J@@@@ఐ*memo_table``@t@@@@ఐ(memo_key``@p@@@@O@@@ఠ#resoaa@qA@@3@,@@@@@@@ఐ #resaa@@ @ @@3@9@@@Ġ)Not_foundbb@;)Not_found#exnG@@@ @@@_ A@A&_none_@@A@@aI@@@@@@@@QX@b@@ Z@@@@ఠ#respcc@rA@@E@QE@Q?@ఐѠ!fcc@@@K@@ఐ͠#argcc@@@X@@@@Y@A@"c@@ డ'Hashtbl'replace2d3d@ 6d7d@@@`!a@Nx!b@Nv@@@O@@O@@@O@ @@O$unitF@@@O@@O@@O@@O@2@@L@,'@@@~`@@@Q@@Q@@@Q@i@@Q@@@Q@@Q@@Q@@Q3mllmmmmm@xq@r@s@@@@ఐe*memo_tabledd@J@@@@ఐ^(memo_keydd#@F@@@@ఐ#resd$d'@'@@*@@k@@E@@@QL@Q1@ఐ#rese)1@7@@:@{@@;@@@@@@A`@@3@@@@A@E@Q@A@@@A+#envqEg6=g6@@@;@@$fuelr@@5#ref@@@Q@@@QhEIhEW@@tA*global_envs@@!t@@@QiX\iXn@@uA)local_envt@@@@@Qjosjo@@vA1reduce_memo_tableu@@b'Hashtbl!t@@@@Qꠠ@ !t@@@Q@@Qt@@@Q@@@Qkk@@"wA4read_back_memo_tablev@@'Hashtbl!t@@@Q,!t@@@Q@@@Q)l*l@@hEV@гu#intFhEOGhER@@}3CBBCCCCC@;}v@w@x;@@@A@@@@@"@@@@@ @@@ @@@@Q @@#~~wViXf@v@@Ш@г#EnvaiXhbiXk@eiXlfiXm@@@ @@@@Q#@@#ojo|@@@Ш@г)local_envxjo~yjo@@2@@@@Q5@@#rk@q@@Ш@гkk@kk@@В@г)local_envkk@@W@@@гkk@@a@@@b@@г"nfkk@@l@@@mk'@@@@Qq@@#l@@@Ш@гll@ll@@г"nfll@@@@гll@@@@@l@@@@Q@@@A@@@@3@@@@ఠ$bindwoo@yA@@@G@@@S@@@@@ఐڠ#envp ?p B@@@,@)local_envp Cp L@ @@3@@R5@@@@_F@@@R:@0@.@@@S-@-@@@S.@@S,I@S&-@@@S/I@S)@@@S%@ɠ&$@@@S>I@S:%@@@S?I@S;@@@S9@@ఐ#envSp Tp @@@Zp@Wp @@2r@!A@cF@SN@A@@@1Aఠ'reduce_grPZhrPa@z}A@@@s@@@TF@SU@@S@!t@@@TF@SY@@S@@@]F@S[@@S@@S3@[@@@@@࣠@#envArPbrPe@CA@@(3@;@6@@SV@3@@SZ,@@S\G@SW@@SXG@SO@A@B%force@@@@T}F@S]@@S^@@@@T1F@Sa@@SbFF@Sc@@SdG@S_@@S`G@SP@@@~A(reduce__@dF@Se@@Sf@b@@@SmG@Si@@Sj`F@Sk@@SlG@Sg@@ShG@SQ@;A;I@@A)read_back@9F@Sn@@So@v@@@SvG@Sr@@Ss!t@@@SwG@St@@SuG@Sp@@SqG@SR@'+'1'+':@@@A*read_back_@!F@Sx@@Sy@@@@SG@S|@@S}'!t@@@SG@S~@@SG@Sz@@S{G@SS@#(($((@@6AA.read_back_desc@BF@S@@S@@@@]F@S@@S$desc@@@]~F@S@@SG@S@@SG@ST@C) )D) )@@VBA@@@@@@!tAPrPfQrPg@cDA@@3ONNOOOOO@@@@@@@@@@ఠ)local_envcsjrdsj{@vEA@@@@@SI@S3gffggggg@%@@@@@ఐ蠐#envxsj~ysj@$@@ @)local_envsjsj@ @@@A@sjn@@@ఠ(memo_keytt@FA@@@@@@SI@S@)F@SF@S@@SI@S3@7E>@?@@@@@@ఐM)local_envtt@@@@@ఐo!ttt@P@@G@@tt@@@,@P@@S&@A@t @@ఐ-in_memo_tableuu@@@@@@@@S@G@@SH@SɠF@^F@ZF@ZF@ZaF@Z]F@ZJF@ZFF@XF@YF@X|F@XmF@XoF@X F@X"F@XF@X!F@WF@WF@W F@UhF@SH@S@@@S@@S@<@@S@@H@S@@S:A@S@@S@@@S?@@S@@S@@S@@S3#""#####@@@@@@@ఐ#env7u8u@@@@1reduce_memo_table>u?u@ϰ @@OeZ@@@S@@ఐ (memo_keyPuQu@(@@vH@S-@@ఐ(reduce__aubu@@@@@@T@@@@T@@T@@T@@TG@@ఐ預#envyuzu@%@@ T@@}u~u@@@ @@@T@@T@@T^@@ఐC!tuu@$@@k@@@@l@@@@@@*@A@@.@@T&@)@@T%"@@T$@@T#F@T @@@rPR@@@@@@S@@@S@@S@@S3@,@@@࣠@#envA@GA@@ 3@*@@@@@@%paramAĠ%Thunk@;@@@M@B@@A@A@@ఠ)local_env @HA@@@@@T43@M/2@&@'@@@ఠ!t@IA@@@@@T5@@@@@8@@@@ఐ'reduce_ @f@@@@@T=@@@T<@@T;@@T:3@,81@2@3(!@"@#@@@@РVT@@@T^@@@T]J@TZ@O@@@TbJ@T`@)local_env0,15Aఐ] @(@T@@@TMJ@TX0@͠M@K@@@Tn@J@@@To@@TmJ@TgJ@@@TpJ@Tj@@@Tf@CA@@@TJ@T{B@@@TJ@T|@@@Tz@@ఐ#envp#q&@@@f@t!u7@@i@@ఐ!t89@q@@ J@Tx@@@@y@A@@@@T@@@T@@T@@TF@T@@@@͠Ͱ@@@@@S@'@@@S@@S@@S@@S3@@@@࣠@#envAঠ$fuelJPJTANఠ@JA@@@@T@@@TH@T3@0@@@*global_envJVJ`Aaఠ@KA@@@@TH@T@)local_envJbJkAsఠ@LA@@@@TH@T'@@AJOJo@@*@HHJsJv@MA@@@TI@TJNJw@@+7@@@@!tA@Jy Jz@@@@@T3      @{YV@X@WB?@A@@0-@/@.m!@%@"@@@@*NA@@@TI@Tг'J}(J~@@@@@T@@.Jx/J@@@@@@T%@@@@@ఠ&reduce?@@ROA@@@I@T@@T@I@T@@TDI@T@@TI@T@@TI@T3ONNOOOOO@GUM@P@>@@@࣠@#envAbc@uPA@@3a``aaaaa@,jk@@@@@  @@!tAvw@QA@@)3uttuuuuu@!4@@@@@@@@ఐ!'reduce_@@@@ @@T@@@T@@T@@T3@&E@@@@@@ఐA#env@&@@Z@@ఐ:!tC@D@@^@@(E@@1@OFA@nI@U M@A@J@@ఠ,delay_reduce@RA@@@@@@U*I@U @@U @ @@@UI@U@@U@@@UI@U@@UI@U @@UI@U 3@@@@@@࣠@#envA@SA@@'3@6@@@@@  @@!tA@TA@@03@!>@@@@@@@@ภ%Thunk @?ఐ2#env@@@U3@'M@@@@@)local_env#$@ @@ [@@@UK@U+K@U)@ఐ:!t56@@@f@@,F@@x@@@U @SJA@|I@U0Q@A@N@@ఠ&returnIJ@\UA@@@ @@@ULI@U2@@U3 @@@U@ N$desc Aఐx @J@L@ [,approximated@ఐ렐!t@@@@@@UV@UTe@,approximated+@G@@ ;@@@URJ@UUq@@@@@s@A@I@UY@A@@Aఠ-force_aliases1=1J@&WA@@@"I@U[@@U`#I@U]@@U_3@@@@@@࣠@"nfA+1K,1M@>XA@@3*))*****@"@@@U\@@U^J@UZ@"@#@@@@ @@ఐ"nfE1VF1X@-@@@@.3DCCDDDDD@'@@@$descO1YP1]@ Ͱ @@ @@@Ug @Ġ&NAlias_ck`cq@;  @@@M@ ADAH@A @@ ఠ*delayed_nfncroc|@YA@@ @@@Um,@@@@@ @@@Un0@@ @@@Uo3@@@@ఠ"nf@ZA@@M@Uu3@C#@@@@@ఐ蠐%force@@@@@@Uz@@@Uy@@Ux@@Uw@@ఐ#env@@@N@U&@@ఐM*delayed_nf@0@@N@U5@@*@@6@A@@@ఐ-force_aliases@@@@@@U@@U3@ISL@M@N@@@@ఐZ"nf@ @@Y@@@@@#@@Z@@@@5@@@Uq@@8@@@Ur@@@ఐҠ"nf@@@@@@A1P@@3@@@@A@@@@U@@UI@U@@@ 15@@@ఠ8reset_uid_if_new_binding  @ &[A@@@ @@@UI@U@@UI@U@@UI@U3        @@@@࣠@"t'A / 0@ B\A@@3 . - - . . . . .@% 7 8-U@@@@@  @@ఐA!t F G@@@@@@U@U3 I H H I I I I I@(4@@ @@@#uid U V@@@@@@U@@@U@Ġ$None i" j&@#@@@@ˠ@@@U@@@U3 n m m n n n n n@%@@@ @Ӡ@@@U@@@U@@@ఐV"t' * ,@4@@c@Ġ$Some -5 -9@i@ -: -;@@@@@UM@@@ @@@@@U@@@UU@#uid -? -B@ ]AN@U@@@U  @@c@@ @@@U@@@Uj@@@ະ =#uid -P -SAఐ# @ @$@!@('@@@U@@@UL@U3        @2 @@@ R!@@@UL@U@ X@@@UL@U@@ఐ"t' -H -J@@@@ -F@@@@@A  @@@A@I@U@A@@డh!<!]j!]k@@!a@@@%@@@$$boolE@@@#@@"@@!)%lessthanBA @@@@*stdlib.mli @@S@! @@@ \@@@VH@U@@U@ @@U@@@U@@U@@U3!,!+!+!,!,!,!,!,@$@@@@@@డ!!!@]d!A]e@@#ref!a@@@@3@@2@@1'%field0AA<@@@:;@@@@@@@@@VI@UZ@ఐ J)approx_nf!]s!]|@ @@@ E@@@V @@V H@@@V@@Vp@@ఐd&return!]~!]@@@@@@@V@@V a@@@V@@V@@ภ&NError!]!]@;d@AGAH@A@@ڠ*NoFuelLeft!]!]@@!]!]@@@@@V&J@V(J@V'@@!]!]@@&@@@V J@V%@@!]}!]@@ @@@V@V)J@V@@X @@I@V@ఐ!t!!@@@@@@V.@V,@$desc""@Y@@@@@V-@Ġ)Comp_unit""@;)Comp_unit@@@@&stringQ@@@@AFAH@A;24<2I@@@A@ఠ)unit_name"/"0@"B^A@@@@@V33"1"0"0"1"1"1"1"1@@@@@@#@@@@@V4@@@@@V5@@@డ./read_unit_shape&Params"M"N@ "Q"R@@  @@@V@@V"i@@@V@@@V@@V@@@@@@@V@@V@@@V@@@V@@V3"n"m"m"n"n"n"n"n@CJC@D@E@@@+ఐQ)unit_name" "@ @@8@@@VL@VL@V@@> @@-/@@@V@@@V@Ġ$Some"%")@tఠ!t"*"+@"iA@@J@@@V9@@@@@OQ@@@V@@@VA@@VX@@@V@@@VH@@@ఐ&reduce"/"5@@@@@@V@~@@V|@@V@@V3""""""""@]0)@*@+@@@@ఐ/#env"6"9@Ȱ@@ pM@V@@ఐF!t":";@@@ vM@V!@@-@@ "@Ġ$None"<H"<L@@@@@@@@V@@@V@@@@@V@@@V@@@ఐ̠&return#<P#<V@@@@d@@@V@@V@@@V@@V@@ภ*NComp_unit#+<X#,<b@;X@VAFAH@AR@@Oఐ)unit_name#7<c#8<l@İ@@e@@@VM@VM@V@@#B<W#C<m@@@@@VM@V@@5@@ k@@@A#K#Ln{@@ n3#H#G#G#H#H#H#H#H@@@@Ġ#App#X|#Y|@;#AppC@@@@ @@@ @BBAH@A|}}}@@@|@ఠ!f#p|#q|@#_A@@(@@@V;3#r#q#q#r#r#r#r#r@F@@@ఠ#arg#|#|@#`A@@7@@@V<@@@/#|@@ K@@@V=@@ N@@@V>@@@@ఠ!f##@#jA@@K@V3########@n4-@.@/&@ @!@@@ఐ-force_aliases##@|@@@@@V@@V@@ఐ&reduce##@@@@|@@V@x@@Vv@@V@@V,@@ఐ&#env##@@@ gM@W;@@ఐr!f##@D@@ mM@W J@@*@@K@@+=@@L@A@#?@@ఐ^!f##@]@^@_@@^3########@^h@@@$desc$$@~ @@K@@@W  @Ġ$NAbs$$@;@DBAH@A@@ఠ(clos_env$$@$.kA@@@@@W3$$$$$$$$@(@@@ఠ#var$*$+@$=lA@@@@@W@ఠ$body$8$9 @$KmA@@@@@W@ఠ(_body_nf$F$G@$YnA@@@@@W+@@@>$N@@@@@W0@@@@@W3@@@@ఠ#arg$_-$`0@$roA@@ @@@W7M@W#3$c$b$b$c$c$c$c$c@rVO@P@QHA@B@C;4@5@6.'@(@)@@@ఐ,delay_reduce$z3${?@@@@ @@@W+@@W*@@@@W)@@W( @@@W'@@W&@@W%&@@ఐ렐#env$@$C@@@ @@@W;N@W=N@W<:@@ఐ-#arg$D$G@ @@@@@W9N@W?N@W>N@@= @@RO@A@$) @@@ఠ#env$K]$K`@$pA@@ @@@W^M@W@3$$$$$$$$@esl@m@n@@@ఐ 栐$bind$Kc$Kg@ S@@@ @@@WL@@WK@ @@@WJ@@WI@@@@WH@@@WG@@WF @@@WE@@WD@@WC@@WB+@@Р ;9@@@W@@@WN@W}@ 4@@@WN@W@ )local_env%Ks%K|@ఐ(clos_env%K%K@@@=@@@WmN@WxZ@ 6@4@@@W@3@@@W@@WN@W3@@@WN@W@@@W@ Ϡ,*@@@WN@W+@@@WN@W@@@W@@ఐ#env%YKj%ZKm@E@@ b@@@WN@WN@W|@%dKh%eK@@ j@@@WeN@W@@ఐK#var%uK%vK@ @@@@@W@@ภ$Some%K%K@\ఐ/#arg%K%K@°@@@@@WaN@WN@WN@W@@%K%K@@ @@@W`N@W@@@@@A@%KY @@ఐ8reset_uid_if_new_binding%%@~@@@`@@@W@@W@@W3%%%%%%%%@@@@@@@ఐ&reduce%%@@@@@@W@@@W@@W@@W@@ఐ#env%%@$@@ qN@W)@@ఐ$body%%@@@ wN@W8@@*@@9@@+C@@ :@OD@@ (@=E@@ @@%%@@E@@@W@@H@@@W @@@@ఠ#arg& &@& qA@@ M@W@ఐܠ&reduce&&@?@@@@@W@@@W@@W@@W@@ఐ #env&0&1 @ @@ N@X @@ఐ#arg&? &@ @@@ N@X "@@*@@#@A@&F@@ఐ&return&P&Q%@3@@@@@@X@@X@@@X @@X 3&X&W&W&X&X&X&X&X@dVO@P@Q@@@@ภ$NApp&i'&j+@;  @ BAAH@A@@ఐݠ!f&u,&v-@@@@ఐs#arg&/&2@#@@r&@@&&&4@@@@@XM@X.@@<@@ M@X1@I @@ m@@@A&&5B@@ 3&&&&&&&&@@@@@@ @Ġ$Proj&CK&CO@;$Proj@W@@@#;$Item!t@@@@BEAH@A1@@@#A@@ఠ#str&CP&CS@&aA@@r@@@VD3&&&&&&&&@@@@ఠ$item&CU&CY@&bA@@&@@@VE@@@3&CZ@@ @@@VF@@ @@@VG@@@@ఠ#str&^l&^o@&rA@@ K@X'3&&&&&&&&@4-@.@/&@ @!@@@ఐ⠐-force_aliases&^&^@ư@@@@@X;@@X:@@ఐ ɠ&reduce'^r' ^x@ ,@@@ @@XE@ @@XD @@XC@@XB,@@ఐ p#env'^y'^|@ @@ M@XP;@@ఐr#str',^}'-^@D@@ M@XQJ@@*@@ K@@+=@@L@A@'4^h?@@@ఠ%nored'?'@@'RsA@@@&@@@XWK@XS@@XT@@@XdK@XU@@XVK@XR3'O'N'N'O'O'O'O'O@nxq@r@s@@@࣠@ AĠ"()'c'd@;'@@@N@@@@A@@A':@@'@@@@"3'f'e'e'f'f'f'f'f@1'o'p@@@@@@@ఐ 3&return'|'}@_@@@@@@X]@@X\0@@@X[@@XZ@@ภ%NProj''@;3@BEAH@A@@͠ఐ#str''@J@@6@ఐࠐ$item''@@@@@@XnN@XuN@XtH@@'E@@@@@XfN@XlO@@?K@@jP@YLA@yK@XxS@A@P@ఐ砐#str''@u@@3''''''''@y@@@@@$desc''@Q @@@@@X{ @Ġ'NStruct'' @;U@SACAH@AE@@Bఠ%items' ' @(tA' ' @@`Z@@@X@@@X/@@@ @@D@@@X3@@G@@@X6@@@డ($Item#Map$find (  ((  ,@ (  -(  0@@(  1(  5@ @@#Map#key@@@<@@<@ !t!a@;@@@<@@<@@<@@<@'map.mli@@+Stdlib__MapU@-#@@@ @@@X@@X@@@@XM@X@@@X@@X@@X@@X3(Q(P(P(Q(Q(Q(Q(Q@ne@h@i@@@@ఐ$item(c  6(d  :@z@@@@@X@@ఐ%items(s  ;(t  @@@@I-@@@XN@XN@X(@@j @@/)@Ġ)Not_found( F `( F i@@@@@'@@@X3((((((((@9@@@( F V@@@@@X@@@ఐ_%nored( F m( F r@Ұ@@@Z@@@X@@XR@@@X@@X@@ภQ( F s( F u@P@@@m@@@XO@X,@@@@-@ఠ"nf( v ( v @(uA@@-@@@Xw@@0@@@Xz@@@ఐƠ8reset_uid_if_new_binding( v ( v @@@@@@@X@@X@@X3((((((((@#@@@@@@ఐC%force( v ( v @G@@@E@@X@>@@X8@@X@@X@@ఐ Z#env) v ) v @ @@VP@Y)@@ఐP"nf) v ) v @3@@ZP@Y8@@*@@W9@@+C@@>:@@@A)  )  @@A@@)&  )'  @@p@@@X_@@s@@@Xb@@@ఐ%nored)7  )8  @k@@@@@@Y @@Y @@@Y @@Y x@@ภ)L  )M  @@@@@@@YM@Y@@@@v@@@A)V)W  @@y3)S)R)R)S)S)S)S)S@@@@@@{@'@@|t@Ġ#Abs)e !)f !@;#AbsP@%#var@@@ $@@@ @BAAH@A"|"|@@@&{@ఠ#var) ! ) ! @)cA@@@@@VM3))))))))@U@@@ఠ$body) !) !@)dA@@F@@@VN@@@1) !@@Z@@@VO@@]@@@VP@@@@ఠ'body_nf )!!%)!!,@)vA@@@@@Y2K@Y3))))))))@81@2@3*#@$@%@@@ఐ ,delay_reduce)!!/)!!;@ a@@@@@@Y&@@Y%@@@@Y$@@Y#@@@Y"@@Y!@@Y "@@ఐ점$bind)!!=)!!A@Y@@@@@@YB@@YA@@@@Y@@@Y?@@@@Y>@@@Y=@@Y<@@@Y;@@Y:@@Y9@@Y8M@@ఐ Z#env*!!B*!!E@ @@@@@Y[M@Y]M@Y\a@@ఐ#var*!!F*!!I@j@@@@@Ybq@@ภ$None**!!J*+!!N@@@@'&@@@YW@@@YVM@Ys@@*7!!<*8!!O@@?@@@Y6@YuM@YT@@ఐ$body*J!!P*K!!T@@@}@@@Y4L@YwL@Yv@@ @@@A@*V!!! @@ఐ &return*`!X!b*a!X!h@ C@@@@@@Y|@@Y{@@@Yz@@Yy3*h*g*g*h*h*h*h*h@@@@@@@ภ$NAbs*y!X!j*z!X!n@iఐ )local_env*!X!o*!X!x@ p@@@@@YK@YK@Y @ఐ#var*!X!z*!X!}@@@"@@@YK@YK@Y2@ఐ$body*!X!*!X!@@@.@@@YK@YK@YD@ఐ'body_nf*!X!*!X!@L@@:@@@YK@YK@YV@@*!X!i*!X!@@@@@YK@Y^@@l@@K@Ya@y @@@Ġ#Var*!!*!!@;#Var@t@@@ @A@AH@A#{#{@@@'tz@ఠ"id*!!*!!@+eA@@@@@VU3********@ @@@@@@@@@@VV@@@@@VW@@@డ#Map$find%Ident+!!+!!@ +!!+!!@@+!!+!!@ @@@@@@h@@@g@j!a@?K@@@@f@@@e@@@d@@@c@h@dU@"@@@+@@@Y@@Y@98@@@Y@@YK@Y@@@Y@@Y @@Y@@Y3+G+F+F+G+G+G+G+G@ e^@_@`@@@@ఐl"id+Y!!+Z!!@ @@@@@Y@@ఐ)local_env+i!!+j!!@V@@@&@Y"@@`@@0#@Ġ$None+y##+z##@3@@@@ts@@@Y@@@Y3+~+}+}+~+~+~+~+~@7@@@ @|{@@@Y@@@Y@@@ఐ K&return+##+##@ w@@@@@@Z @@Z H@@@Z @@Z @@ภ$NVar+##+##@;] K@[A@AH@AV@@Sఐɠ"id+##+##@j@@j@@@ZM@Z M@Z=@@+##+##@@ @@@ZM@ZE@@5@@F@Ġ$Some+##+#$@ఠ#defà+#$+#$@+wA@@@@@Y3++++++++@@@@@@@@ݠ@@@Y@@@Y @@@@@Y@@@Y@@@ఐO%force+$ $%+$ $*@S@@@Q@@Z&@J@@Z%D@@Z$@@Z#3,,,,,,,,@3,@-@.@@@@ఐi#env,$ $+,$ $.@@@eN@Z1@@ఐI#def,%$ $/,&$ $2@@@iN@Z2!@@-@@f"@ঠ#uid,9$8$J,:$8$M@Ġ$Some,A$8$P,B$8$T@ @,F$8$U,G$8$V@@@@@Z?O@Z:3,H,G,G,H,H,H,H,H@D@@@@@@@@@@Z<@@@Z; @@A,W$8$H,X$8$\@@ @"nfĠ,]$8$`,^$8$b@,pxA @@@ZHP@Z=@@@@@@@ఐ"nf,m$8$f,n$8$h@@@@@3,l,k,k,l,l,l,l,l@i@@@ঠ#uid,$$,$$@Ġ$None,$$,$$@C@@@@@@@ZS@@@ZR@@A,$$,$$@@@"nfŠ,$$,$$@,yAI@@@Z_P@ZT@@@@@@@ະ(#uid,$$,$$@ఐ!t,$$,$$@c@@"p@@@Zv@Zs3,,,,,,,,@+%@)@&@@@#uid,$$,$$@,@@'&@@@Zq@@@ZpN@Zt@O@@@ZN@Z~@U@@@ZN@Z@@ఐN"nf,$$,$$@)@@@@@ZN@ZN@Zz3@,$$,$$@@6@@@A,$ $,%%*@@3,,,,,,,,@@@@Ġ)Not_found-%+%A-%+%J@#@@@@,@@@Z@- %+%7@@@@@Z@@@Z@@@ఐc*find_shape-%N%^-%N%h@@@@^@@@Z@@Z@U@@@Z@@ZN@@@Z@@Z@@Z@@ఐe*global_env-;%N%i-<%N%s@)@@|@@@ZN@ZN@Z@@ఐb"id-O%N%t-P%N%v@@@@@@Z @@9@@v@@@Z @Ġ)Not_found-c%|%-d%|%@@@@@,b@@@Z@-j%|%@@@@@Z@@@ఐ.&return-w%|%-x%|%@Z@@@@@@Z@@Z+@@@Z@@Z@@ภ$NVar-%|%-%|%@ఐ"id-%|%-%|%@K@@K@@@ZO@ZO@Z@@-%|%-%|%@@@@@ZO@Z@@3@@@ఠ#resƠ-%%-%%@-zA@@@@@Z3--------@o@@@@@@@Z@@డ,1!=-%%-%%@@!a@@@@@@ @@@@@@@&%equalBA Ǡ@@@@ y y@@+VQ@@@@ @@@ZN@Z@@Z@ @@Z@@@Z@@Z@@Z3--------@HA@B@C@@@@ఐO#res.%%.%%@ @@@@ఐ !t.%%.%%@@@)O@Z@@@@ @@@ZO@Z%@ఐ۠&return.$%%.%%%@@@@s@@@Z@@Z@@@Z@@Z;@@ภ$NVar.:%%.;%%@ఐW"id.D%%.E%%@@@@@@[O@[O@[X@@.O%%.P%%@@@@@ZO@[`@@3@@xa@ఠ#resǠ.a%%.b%%@.t{A@@@@@Z@@@@@Z@@@ డ,$decr.v%&.w%&@@ 6#intA@@@C@@@B@@A$unitF@@@@@@?%%decrAA x@@@ v   w I@@,@ @@@ S@@@[ @@@[ @@[ @@@[ @@[3........@YIB@C@D@@@@ఐ$fuel.%&.%& @@@ q;@@@[@@@[P@[P@[@@J@@#@@@[O@[!@ఐ&reduce.& &.& &!@@@@@@[!@@@[ @@[@@[5@@ఐ6#env.& &".& &%@ϰ@@wO@[,D@@ఐ#res.& &&.& &)@N@@}O@[-S@@*@@T@@@U@@@A.%N%X@@@@@A.!!.&*&7@@{@Ġ$Leaf/&8&@/ &8&D@;$Leaf @@@@AH@A($(%@@@+@@@  @@@@@V[!@@@@@V\$@@@ఐؠ&return/!&8&H/"&8&N@@@@p@@@[Z@@[Y@@@[X@@[W:@@ภ%NLeaf/7&8&O/8&8&T@;m@@@@AH@Al@@i@@@@@@[cK@[gM@@! @@cN@Ġ&Struct/L&U&]/M&U&c@;&Struct 7@#Map!t% @@@@@@@ACAH@A(t~(u~@@@+}@ఠ!m/h&U&d/i&U&e@/{fA@@%#@@@Vc@@@Vb3/n/m/m/n/n/n/n/n@B@@@@@) @@8@@@Vd@@;@@@Ve@@@@ఠ#mnfȠ/&i&w/&i&z@/|A@@Z@@@[K@[m@@@[K@[h3////////@d2+@,@-@@@డ/$Item#Map#map /&i&}/&i&@ /&i&/&i&@@/&i&/&i&@ @@@!a@;#@@,delay_reduce/&i&/&i&@@@@@@@[@@[@5@@@[@@[K@@@[@@[@@[{@@ఐl#env0&i&0&i&@@@"@@@[N@[N@[@@0$&i&0%&i&@@@V@@@[@@[l@@@[@@[@@ఐҠ!m0:&i&0;&i&@@@f@@@[L@[L@[@@ @@@A@0G&i&s @@ఐ&return0Q&&0R&&@4@@@@@@[@@[@@@[@@[30Y0X0X0Y0Y0Y0Y0Y@@@@@@@ภ'NStruct0j&&0k&&@ఐ#mnf0t&&0u&&@@@@@@[@@@[K@[K@[$@@0&&0&&@@@@@[K@[,@@:@@|K@[/@G @@@Ġ%Alias0&&0&&@;%Alias@&Q@@@@ADAH@A))@@@-3~@ఠ!t0&&0&&@0gA@@&d@@@Vj300000000@@@@@@@@x@@@Vk@@{@@@Vl@@@ఐ{&return0&&0&&@@@@@@@[@@[x@@@[@@[300000000@+$@%@&@@@@ภ&NAlias0&&0&&@~ఐ,,delay_reduce0&&0&&@@@@@@@[@@[@#@@@[@@[9@@@[@@[@@[,@@ఐZ#env1&&1&&@@@@@@[L@[L@[@@@ఐo!t1&&1&&@J@@N@@@[L@[L@[T@@1&&&1'&&@@@@@[@[L@[^@@10&&11&&@@|@@@[K@[f@@t@@Yg@Ġ%Error1B&'1C&'@;%Error-@*@@@@AGAH@A*cJL*dJ]@@@-B@ఠ!s1W&'1X&'@1jhA@@@@@Vq-@@@@@"@@@Vr1@@%@@@Vs4@@@ఐ$)approx_nf1n&' 1o&'@_@@@@@@[@@["@@@[@@[31v1u1u1v1v1v1v1v@K*#@$@%@@@@ఐA&return1&'1&'@m@@@@@@\ @@\>@@@\@@\@@ภ&NError1&'1&'%@ݠఐS!s1&'&1&''@/@@@@@\L@\L@\9@@1&'1&'(@@ @@@\L@\A@@1&'1&')@@m@@@\@\L@\K@@Y @@L@@@A1 @@311111111@@@@1]a@@@@@@@@@\@@r@@@@g@@}@A@@@@\@b@@@\@@\@@\@@\F@\@@@1;=#@@@@@@S@n@@@S@@S@@@S@@S@@S311111111@p@@@࣠@#envA2'+';2'+'>@2}A@@321122222@n@@@@@@"nfA@2'+'@2'+'B@@ }@@@\322222222@,@@@@@  @2,~A@@@\I@\г"nf2*'+'E2+'+'G@@@@@\@@21'+'?22'+'H@@@@@@\ @@@@ఐo-in_memo_table2A'O'S2B'O'`@@@@j0@@@]H@\2_Y@@@\H@]5H@\@@@\@@\@@@\@@Q@@@]3H@\@@\A@\@@\@ @@\@@\@@\@@\@@\32k2j2j2k2k2k2k2k@[ia@d@X@@@@ఐ#env2'O'a2'O'd@i@@@4read_back_memo_table2'O'e2'O'y@ @@s?7@8@90)@*@+@@@@ఐF#nft5))5))@@@m@@@^[K@^]K@^\@@' @@+@@@^L@^^K@^Y!@ఐ)read_back6))6)*@(@@@@@@^c@@^b@@@^a@@^`8@@ఐj#nfu6)*6)*@@@@@@@^lK@^nK@^mL@@" @@+@@@^M@^oK@^jT@@n6-)*@@V@Ġ$NAbs68** 69**@(ఠ$_envנ6A**6B**@6TA@@#@@@^36C6B6B6C6C6C6C6C@@@@ఠ!xؠ6P**6Q**@6cA@@#@@@^@ఠ"_t٠6^**6_**@6qA@@#@@@^@ఠ"nfڠ6l**6m**!@6A@@#@@@^+@@@<6t**"@@?-@@?-@@@ภ#Abs6{*&*.6|*&*1@ ఐ5!x6*&*26*&*3@4@5@6@@ #@@@^uJ@^zJ@^y366666666@CXQ@R@SJ<5@6@7/(@)@*@@@ఐؠ/read_back_force6*&*56*&*D@Q@@@@@^~@@@^}@@^|@@ఐJ"nf6*&*E6*&*G@!@@K@^+@@@@,t@@@^v@^K@^3@@I6*&*H@@5@Ġ'NStruct6 *I*O6 *I*V@ఠ$nstr۠6 *I*W6 *I*[@6A@@$H$B@@@^ @@@^366666666@@@@@@ @@@@@@@ภ&Struct6 *_*g6 *_*m@డ6$Item#Map#map 6 *_*o7 *_*s@ 7 *_*t7 *_*w@@7 *_*x7  *_*{@ @W @@@@UJ@^@@^,@@@^J@^J@^J@^@@^@@^@@@@^@@^@@@^@@^@@^37&7%7%7&7&7&7&7&@YR@S@T@@@@ఐn/read_back_force78 *_*|79 *_*@@@@k@@^C@@@^@@^@@ఐt$nstr7L *_*7M *_*@!@@"B@@@^K@^K@^,@@7X *_*n7Y *_*@@ E@@@^J@^K@^7@@x @@(8@Ġ&NAlias7m **7n **@ఠ"nfܠ7v **7w **@7A@@$@@@^#37x7w7w7x7x7x7x7x@,@@@@@@@I@@I@@@ภ%Alias7 **7 **@ఐǠ/read_back_force7 **7 **@@@@@@@^@@@^@@^377777777@K+$@%@&@@@@ఐ2"nf7 **7 **@ @@K@^@@7 **7 **@@-h@@@^@^K@^@@3 @@}@Ġ%NProj7 **7 **@0ఠ"nfݠ7 **7 **@7A@@%@@@^'377777777@@@@ఠ$itemޠ7 **7 **@7A@@%@@@^(@@@ 7 **@@@@@@@ภ$Proj7 **7 **@Kఐ)read_back7 **7 **@@@@{@@@^@@^@@@^@@^377777777@>7@8@90)@*@+@@@@ఐF"nf8 **8 **@@@@@@^K@^K@^@@' @@-@@@^@^K@^!@ఐQ$item8+ **8, **@'@@@@@^J@^J@^3@@M86 **@@5@Ġ%NLeaf8A*+8B*+@ @@@@r@@r@@@ภ$Leaf8J*+ 8K*+@ B@@@{@Ġ*NComp_unit8W++8X++ @,ఠ!sߠ8`++!8a++"@8sA@@%@@@^,38b8a8a8b8b8b8b8b@@@@@@@@3@@3@@@ภ)Comp_unit8o++&8p++/@Zఐ!s8y++08z++1@@@@@d@@@^J@^J@^388~8~88888@4* @@@@ @@L@Ġ&NError8+2+88+2+>@Πఠ!s8+2+?8+2+@@8A@@%@@@^/P@@@@@lQ@@lQ@@@ภ%Error8+2+D8+2+I@fఐ!s8+2+J8+2+K@@@@@s@@@^J@^J@^388888888@m) @@@@ @@@@@A8))@@388888888@q@@@@@@@@V@A@@@@_@@@_@@_@@_F@_@@@8) ) @@1 @N@ఠ1reduce_memo_table8++8++@8A@@&Stdlib#ref$@!@@E@d@!@@E@d@E@dE@`0!@@E@dE@`1@@@`FF@`@@@`'F@_399999999@p@@@డ+Local_store's_table+Local_store9++9++@ 9++9++@@@@!a@_@@_!b@_@@_@@_@ @@_O @@@_@@_@@_@5utils/local_store.mli^GG^Go@@+Local_storeA@'"@@@@#intA@@@`HF@`@@`b@@`@@`@ @@`ni@@@`@@`@@`39Q9P9P9Q9Q9Q9Q9Q@@@@@@ఠ#arg939tA94@&random&optionL$boolE@@@`D@@@`C@@`B@3@@@`A@@`@$@@@`?@@`>@@`=|@డ7'Hashtbl&create9++9++@ 9++9++@@20-@@@N@@@N@@N@]@@@N@@N$ʠ!a@Nɠ!b@N@@@N@@N@@N@$-A ! !$.B c @@$,A@,'@@V@A@9@@ఠ#eta99A9@@@`+q@@@ఐlm9k@9@l9@k399999999@ 9q@@@mภ$None9+@ @ol@@@`8@@@`7399999999@ I@@@@ఐ&'9%@9@&9@%399999999@ T+@@@@9@399999999@@@@@A,99A@@9@@-@@`*G@`E@9@@@j9++9++@@G@`I@@@@@A@9++@@@@ఠ4read_back_memo_table: +,: +,@:A@@.%9"@@E@dDE@`m#@@E@dEE@`n@@@`F@`S@@@`dF@`N3:":!:!:":":":":"@ OH@I@J@@@డ"'s_table+Local_store:7+,:8+,"@ :;+,#:<+,*@@ @@@@@@@`F@`U@@`X7@@`W@@`V@ @@`Tl>@@@`R@@`Q@@`P3:O:N:N:O:O:O:O:O@-@@@@@ఠ:0:qA:1@@@@`@@@`@@`@(@@@`~@@`}%\W@@@`|@@`{@@`zQ@డ8'Hashtbl&create:+,+:+,2@ :+,3:+,9@@@@*d@A@:[@@ఠ:d:A:e@P@@`hC@@@ఐ>=:n>@:o@?:o@>3::::::::@yC@@@=ภ:x,`@@>;@@@`u@@@`t3::::::::@@@@@ఐ$:$@:@%:@$3::::::::@)@@@@:@3::::::::@@@@@A*::A@@:@@,@@`gG@`@7@@@j:+,::+,<@@G@`x@@@@@A@:++@@@@ఠ&reduce:,>,D:,>,J@:A@@@$@@@`F@`@@`@!x@@@aF@`@@` @@@a}F@`@@`F@`@@`F@`3::::::::@@@@@@࣠@*global_envA;,>,K; ,>,U@;A@@'3;;;;;;;;@6;,>,@;!-M-o@@@@@  @@!tA;,>,V;,>,W@;/A@@03;;;;;;;;@!>@@@@@@@@@ఠ$fuel;/,Z,b;0,Z,f@;BA@@*@@@`I@`@@@`I@`3;9;8;8;9;9;9;9;9@+Q@"@#@@@డ9#ref;J,Z,i;K,Z,l@@!a@@@0@@@/@@.,%makemutableAAD@@@BhhCh@@8@@@@.@@`1@@@`@@`,@@డ*Y$fuel&Params;x,Z,m;y,Z,s@ ;|,Z,t;},Z,x@@*T@@@V@*F@*D @@JF@@;@@PG@A@;,Z,^ @@@ఠ)local_env;,|,;,|,@;A@@"ڠ&@`@@@`I@`3;;;;;;;;@_sl@m@n@@@డ'#Map%empty%Ident;,|,;,|,@ ;,|,;,|,@@;,|,;,|,@ @"!a@?@@@?@"@"E@ @@.)@A@;,|,@@@ఠ#env;,,;,,@;A@@#@@@`I@`3;;;;;;;;@?OH@I@J@@@Р#w$fuel;,,;,,Aఐ @P@%*%(@@@`@@@`I@`@#*global_env;,,;,,Aఐ @@ +@#)local_env< -3-9< -3-BAఐ @7@#V((@@@`@@`I@`I@`@@@`K@#1reduce_memo_table<+,,<,,,@డ:<5,,<6,,@@@@'cSE@@@a I@a@@@a@@a@@`m@@ఐs1reduce_memo_table@@+k@@@,I@^@@-@@@.@A@GF@a@A@@@/Aఠ5is_stuck_on_comp_unit=4#-q-{=5#-q-@=GA@@@+@@@a@@a(@@@bF@a@@a3=@=?=?=@=@=@=@=@@Lpi@j@k@@@࣠@"nfA@=S#-q-=T#-q-@@+@@@a3=T=S=S=T=T=T=T=T@+@(@@@aG@a@@a'@@aG@a@0@1@@@@=zA0@@@aH@aг"nf=x#-q-=y#-q-@@%@@@a$@@=#-q-=#-q-@@@E@@@a+@@@@ఐA"nf=$--=$--@?@B@+@@)A@@@a@a3========@BP @@@$desc=$--=$--@)@@+@@@a @Ġ$NVar=%--=%--@@=%--=%--@@+d@@@a3========@ @@@@@ @@,@@@a@@,@@@a@@@ภ%false='..='..@;=x)#@@@@B@@A=@@=w@@@@Ġ$NApp=(..=(.. @pఠ"nf=(.."=(..$@=A@@+.@@@aK@aQ@@=(..&=(..'@@+@@@aY@@@=(..(@@,=@@@a^@@^@Ġ%NProj>(..+>(..0@n'"nf>(..2> (..4@>A@@$r@@>(..6>(..7@@+R@@@az@@@>(..8@@,^@@@a@@@@A@@,b@@@a@@@ఐ5is_stuck_on_comp_unit>&(..<>'(..Q@Ͱ@@@@@@b @@b @@b3>+>*>*>+>+>+>+>+@TM@N@O@@@@ఐ["nf>=(..R>>(..T@ @@@@@bJ@bJ@b@@" @@@Ġ'NStruct>T).U.[>U).U.b@q@>Y).U.c>Z).U.d@@+Ǡ+@@@a@@@a@@@ @@,@@@a@@@Ġ$NAbs>n).U.g>o).U.k@^@>s).U.l>t).U.m@@,@@@a@@@,@@@a@@ @+@@@a@@@+@@@a@@@@@,@@@a@@@@8@@,@@@a@@@ภͰ>).U.q>).U.v@@@@W@Ġ&NAlias>*.w.}>*.w.@B@>*.w.>*.w.@@+@@@a@@@ @@,@@@a@@,@@@a@@@ภ>*.w.>*.w.@@@@z @Ġ*NComp_unit>+..>+..@@>+..>+..@@+@@@a4@@@ @@-@@@a8@@-@@@a;@@@ภ*6>+..>+..@*5@@@C@Ġ&NError>,..>,..@$@>,..>,..@@,@@@aW@@@ @@-:@@@a[@@-=@@@a^@@@ภ6>,..>,..@5@@@f@Ġ%NLeaf? -..? -..@@@@@-U@@@bv@@-X@@@by@@@ภQ?-..?-..@P@@@@@@A?$--@@c@A@@@@@b@@b@@bF@b@@@?(#-q-s@@@堰Aఠ6reduce_aliases_for_uid?5/..?6/..@?HA@@@'A@@@c8F@b@@b@-@@@b@@b=@@@cCF@b@@b@@b3?J?I?I?J?J?J?J?J@@@@࣠@#envA?[/..?\/..@?nA@@"3?Z?Y?Y?Z?Z?Z?Z?Z@0@+@@b@*@@@bG@b@@b)@@bG@b@@bG@b@;@<@@@@@@"nfA@?}/..?~/./@@-@@@b3?~?}?}?~?~?~?~?~@%1I@(@)@@@  @?AE@@@bI@bг"nf?/./?/./@@@@@b@@?/..?/./@@@Z@@@b @@@@ఐ4"nf?0/ /?0/ /@2@5@)@@3@@@b3????????@3A@@@ঠ#uid?1//#?1//&@+FĠ$Some?1//)?1//-@3ఠ#uid?1//.?1//1@?A@@.0@@@b3????????@&@@@@@@@.9.8@@@b@@@b @$desc?1//3?1//7@+hĠ&NAlias?1//:?1//@@ ఠ#dnf?1//A?1//D@@A@@-S@@@b'@@@@@.K@@@b+@,approximated@ 1//F@ 1//R@+ĠL@1//U@1//Z@K@@@@.P@@@b>@@A@1//!@1//_@@@@@bK@bF@@@@@bI@@@@ఠ&result@.2/c/o@/2/c/u@@AA@@F@cFF@c3@0@/@/@0@0@0@0@0@ha@b@cB;@<@=@@@ఐ6reduce_aliases_for_uid@C2/c/x@D2/c/@@@@ @@c@@@@c@@c@@c@@c@@ఐ#env@[2/c/@\2/c/@ذ@@!)@@ఐ&%force@j2/c/@k2/c/@&@@@(s@@@c(@@c'@&@@@c&@@c%&@@@c$@@c#@@c"I@@ఐ0#env@2/c/@2/c/@@@NV@@ఐ#dnf@2/c/@2/c/@^@@&@@@c6M@c;M@c:j@@@2/c/@2/c/@@`@@@c@c=@@@cA@/@@@ঠ#uid@4//@4//@,iĠ$Some@4//@4//@4Ơఠ#uid@4//@4//@A A@@/S@@@b3@@@@@@@@@I@@@@@@@/\/[@@@b@@@b @,approximatedA 4//A4//@,ĠMA4//A4//@L@@@@/Q@@@b@@AA4//A4//@@@@@bK@b$@@@@@b'@@@ภ(ResolvedA+4/0A,4/0@>:ఐ>#uidA54/0 A64/0 @=@>@?@@?@@@cKJ@cMJ@cL3A;A:A:A;A;A;A;A;@O @@@@ @@@ঠ#uidAO50 0AP50 0A,ఠ@AgA@//@@@b@@@b@,approximatedAd50 0Ae50 0&@,Ġ,ǰAk50 0)Al50 0-@,@@@@/@@@b@@@Ar50 0As50 0/@@@@@bK@b@@@@@b@@@ภ,ApproximatedA50 03A50 0?@5eఐ5#uidA50 0@A50 0C@8@:@9@@??@@@cT@@@cSJ@cWJ@cU3AAAAAAAA@J@@@@@@T@ঠ#uidA60D0LA60D0O@--Ġ$NoneA60D0RA60D0V@3l@@@@00@@@b@@@b@,approximatedA60D0XA60D0d@-?ĠA60D0gA60D0l@@@@@0@@@c@@AA60D0JA60D0q@@U@@@cK@c"@@X@@@c%@@@ภ:Internal_error_missing_uidA<11A<11@2@@@.@@@AA0/ / @@3AAAAAAAA@0@@@A@@@@c@@@@c@@c@@c@@cF@c@@@A/..@@@@ఠ.reduce_for_uidB>11B>11@BA@@@+6@@@cF@c@@c@(@@@d~F@c@@c?@@@dF@c@@cF@c@@cF@c3BBBBBBBB@@@@࣠@*global_envAB->11B.>11@B@A@@%3B,B+B+B,B,B,B,B,@4B5>11B6L3I3l@@@@@  @@!tABA>11BB>11@BTA@@.3B@B?B?B@B@B@B@B@@!<@@@@@@@@@ఠ$fuelBT?11BU?11@BgA@@!13@@@cI@c@@@cI@c3B^B]B]B^B^B^B^B^@+O@"@#@@@డ@#refBo?11Bp?11@%@@@@@c!/@@@c@@c@@డ1i$fuel&ParamsB?11B?11@ B?12B?12@@@@1-@@"@@7.@A@B?11@@@ఠ)local_envB@22B@22@BA@@)-@c@@@cI@c3BBBBBBBB@FZS@T@U@@@డ.#Map%empty%IdentB@22B@22!@ B@22"B@22%@@B@22&B@22+@ @  @@$@A@B@22 @@@ఠ#envBA2/27BA2/2:@BA@@*@@@cI@c3BBBBBBBB@5E>@?@@@@@Р*y$fuelBB2?2EBB2?2IAఐ @F@,,,*@@@c@@@cI@c@**global_envBC2K2QCC2K2[Aఐޠ @@+@*)local_envC F22CF22Aఐy @7@*X//@@@c@@cI@cI@c@@@cK@*1reduce_memo_tableC-D2]2cC.D2]2t@డA!!C7D2]2wC8D2]2x@!@@@!.e U G@@@d(I@d@@@d@@d@@dm@@ఐ u1reduce_memo_tableCSD2]2@ +@@"@@@d&J@d)J@d'@@' @@@*4read_back_memo_tableCdE22CeE22@డA"/"1CnE22CoE22@".@@@".. c ^@@@dWI@dL@@@dN@@dM@@dK@@ఐ ~4read_back_memo_tableCE22@@@"I@@@dUJ@dXJ@dV@@' @@@@@CA2/2=CG22@@@A@CA2/23@@@ఠ"nfCH22CH22@CA@@*)@@@d|I@dh3CCCCCCCC@@@@@@ఐ*R'reduce_CH22CH22@*@@@+@@@dp@@do@*M@@@dn@@dm*I@@@dl@@dk@@dj @@ఐ#envCH22CH22@*@@+@@@dJ@dJ@d4@@ఐ!tCH22CH22@@@A@@6@@EB@A@CH22@@ఐȠ5is_stuck_on_comp_unitCI22CI23@@@@@@@d@@d/^@@@d@@d3DDDDDDDD@]kd@e@f@@@@ఐr"nfDI23DI23@ @@@@@dI@dI@d@@% @@"@@@dI@d@ภ*UnresolvedD,J33"D-J33,@:0ఐ*P)read_backD8J33.D9J337@*T@@@,A@@@d@@d@*@@@d@@d*M@@@d@@d@@dC@@ఐ#envDVJ338DWJ33;@@@,_@@@dI@dI@dW@@ఐƠ"nfDjJ33<DkJ33>@a@@*@@@dI@dI@dk@@DuJ33-DvJ33?@@B@@@d@dI@du@@S @@av@ఐT6reduce_aliases_for_uidDL3I3ODL3I3e@*@@@,@@@d@@d@Q@@@d@@dB@@@d@@d@@d@@ఐԠ#envDL3I3fDL3I3i@@@,@@@dI@dI@d@@ఐ"nfDL3I3j@@@{@@@dI@dI@d@@<@@F@dI@d@DI22@@@@@@3@@@@@%@<@@k@A@F@d@A@@@@3<36A@32B@21B@20B@0/@0-@.&. A@,+[@++F@+;+9@++@++@**@**@  @  @ @@@@@@@3DDDDDDDD@@@DsDM3m3p@/3DDDDDDDD@3 @@@3@33z3EDDEEEEE@3@@@@Ep99 @ @,Local_reduce"FEO3r3yEO3r3@E&A@гР4$MakeEP33E P33@@4 43@33@@33A@3s2B@3)1iB@3#17B@00#@0h-@.~.xA@-L+@++@++@+v+t@+^+\@+?+=@+ +@ n @ B N@ u@@@TX@@3EMELELEMEMEMEMEM@44H@4@444@43@@33A@33B@3\1B@3V1jB@1!0V@0.@..A@-+@, +@++@++@++@+r+p@+S+Q@  R@ u @ 8@Q&@R"@@@@4r@@@Б@ఠ$fuel EQ33EQ33@EA@@D@@@dG@d3EEEEEEEE@J@@@JEQ33EQ33@@ @A@EQ33@@@ @ఠ/read_unit_shape ER33ER33@EA@@)unit_name@@dG@d@@d90@d@@@dG@d@@dG@d3EEEEEEEE@w;4@5@6@@@࣠*  A@ER33ER33@@3EEEEEEEE@)ER33ER33@@@@@ER33 @@ภ$NoneER33 @7@ @@9#@@@d@A@6G@d@A@@@&@a&@E>@?@@@@3EEEEEEEE@,H@@EP33ES33@ 3EEEEEEEE@@@@@ES33@4gG;@@4b@@4`F4_4^@@@e@@@e4]@4Z4Y@@4WG@@@e4V@4S4R@@4P@@@e4O@4L@@A@@@@@4K@@@4HA@ ;@@3АF+3@@@e@@3@3ʠ3ɐ-@@@e@@@e@@3@3à34)G@@@eFE3@@@eFJ3@@@e4AG@@@e@@3@33FZ333@@@e@@@e@@3@33@@@e@@3@33:@@@eFr33@@@e@@3@33@@3@333@@@e@@3@333@@@e@@3@3@@A@@@@@4z@@@4wB@7;@@2P@@@eF2@@@e@@2@2@@A@@@@@4@@@4B@W;@@@A2222U@@@e@@@e@@@e@@@@4@@@4B@2[@~@@@e@@e@@@e@@e@2`@2a@1@D,11֠1ՠ1@@@e@@e@1@@e@@1@@e1ĐA@e@@e@1@@e1@@e@@e@@e@@e@1@1@0G;@@0@@EC00 @@@e@@@e0 @0 0@@00@@@e0@00@@@@@e/@//@@EY//@@@@e@G/@@@e@@e@@@e@@@e/@//@@Er//@@@eG/@@@e@@@e/@/@@A@@@@@/@@@/A@/$@L@@@e@@e@///@@@e@@e@3!@@@e@@@e@@e@@@e@@e@@e@@e@/>@/?@-@#@@@e@@e@GL-@@@e@@e@@@e@@e@@e@-@-@-@9@@@e@@e@@@@e@@e2@@@e@@e@@e@-@-@-@N@@@e@@e@Gw-@@@e@@eH@@@e@@e@@e@-@-@-@d@@@e@@e@Z@@@e@@eG-@@@e@@e@@e@-@-@-@z@@@e@@e@p@@@e@@eG-@@@e@@e@@e@-~@-{@-|@@@@e@@e@@@@e@@eDE-u@@@e@@e@@e@-t@-q@ӠE522ߠ@@@@e@G0@@@e@@e@@@e@@@e@@@e@@@ EU32@@@eG0@@@e@@@e@@@e@ @ @ @11@@@e@@e@H.@@@e@@eH .@@@e@@e@@e@ '@ (@ @@@@f@@e3h@@@e@@e@ @ @ @@@@f@@f@@@@f@@fF\@@@f@@f@@f@@@,!@1X1W@@@f@@f @HB.@@@f @@f E@@@f @@f @@f@:@;@@F@@H@O3r3rF@G@I@ఠ,local_reduce#HMU33HNU33@H`A@@@11~@@@h@@h@Hi.@@@h@@hHm.g@@@h@@h@@hH@h3HbHaHaHbHbHbHbHb@[@nmA@]TB@)B@;B@@@A@ih@HG@43@! @  @@@@@@@|{@ih@@@T~@@@డ&reduce,Local_reduceHU33HU33@ HU33HU34@@@S@@@h@@h@R@@@h@@hQ@@@h~@@h}@@h|@ @ ڰ@@eQ@A@HU33@@@T@ఠ4local_reduce_for_uid$HV44HV44@HA@@@11@@@h@@h@H/^@@@h@@hFC@@@h@@h@@hH@h3HHHHHHHH@y@@@@@డ.reduce_for_uid,Local_reduceHV44HV44*@ HV44+HV449@@@)@@@h@@h@(@@@h@@hFj@@@h@@h@@h@@@@;(@A@IV44@@@+@GjGdA@FFV@9Z7@8@@ 8@@@@@@7@XQ@R@S@@3IIIIIIII@=[@@@W,Shape_reduceQ@@ԱP@@8O@@% N@@O M@A7I@A7H@@FG@@G7@@A7A7@ H************************************************************************IAA@@IBA@L@ H IGBMMIHBM@ H OCaml IMCINC@ H ISDITD3@ I Ulysse Gérard, Thomas Refis, Tarides IYE44IZE4@ I Nathanaëlle Courant, OCamlPro I_FI`F@ H Gabriel Scherer, projet Picube, INRIA Paris IeGIfG@ H IkHIlHi@ H Copyright 2021 Institut National de Recherche en Informatique et IqIjjIrIj@ H en Automatique. IwJIxJ@ H I}KI~KP@ H All rights reserved. This file is distributed under the terms of ILQQILQ@ H the GNU Lesser General Public License version 2.1, with the IMIM@ H special exception on linking described in the file LICENSE. ININ7@ H IO88IO8@ H************************************************************************IPIP@ e We implement a strong call-by-need reduction, following an evaluator from Nathanaelle Courant. ItIu @ J A type of normal forms for strong call-by-need evaluation. The normal form of an abstraction Abs(x, t) is a closure NAbs(env, x, t, dnf) when [env] is the local environment, and [dnf] is a delayed normal form of [t]. A "delayed normal form" is morally equivalent to (nf Lazy.t), but we use a different representation that is compatible with memoization (lazy values are not hashable/comparable by default comparison functions): we represent a delayed normal form as just a not-yet-computed pair [local_env * t] of a term in a local environment -- we could also see this as a term under an explicit substitution. This delayed thunked is "forced" by calling the normalization function as usual, but duplicate computations are precisely avoided by memoization. IC [ ]IT  @  When reducing in the body of an abstraction [Abs(x, body)], we bind [x] to [None] in the environment. [Some v] is used for actual substitutions, for example in [App(Abs(x, body), t)], when [v] is a thunk that will evaluate to the normal form of [t]. IX I[@  Memoization is absolutely essential for performance on this problem, because the normal forms we build can in some real-world cases contain an exponential amount of redundancy. Memoization can avoid the repeated evaluation of identical subterms, providing a large speedup, but even more importantly it implicitly shares the memory of the repeated results, providing much smaller normal forms (that blow up again if printed back as trees). A functor-heavy file from Irmin has its shape normal form decrease from 100Mio to 2.5Mio when memoization is enabled. Note: the local environment is part of the memoization key, while it is defined using a type Ident.Map.t of non-canonical balanced trees: two maps could have exactly the same items, but be balanced differently and therefore hash differently, reducing the effectivenss of memoization. This could in theory happen, say, with the two programs (fun x -> fun y -> ...) and (fun y -> fun x -> ...) having "the same" local environments, with additions done in a different order, giving non-structurally-equal trees. Should we define our own hash functions to provide robust hashing on environments? We believe that the answer is "no": this problem does not occur in practice. We can assume that identifiers are unique on valid typedtree fragments (identifier "stamps" distinguish binding positions); in particular the two program fragments above in fact bind *distinct* identifiers x (with different stamps) and different identifiers y, so the environments are distinct. If two environments are structurally the same, they must correspond to the evaluation evnrionments of two sub-terms that are under exactly the same scope of binders. So the two environments were obtained by the same term traversal, adding binders in the same order, giving the same balanced trees: the environments have the same hash. IvI@  Note: instead of binding abstraction-bound variables to [None], we could unify it with the [Some v] case by binding the bound variable [x] to [NVar x]. One reason to distinguish the situations is that we can provide a different [Uid.t] location; for bound variables, we use the [Uid.t] of the bound occurrence (not the binding site), whereas for bound values we use their binding-time [Uid.t]. I!!I##@ $ This var already has a binding uid I$i${I$i$@; Set the var's binding uid I$$I$%@ The [nf] normal form we receive may contain a lot of internal sharing due to the use of memoization in the evaluator. We have to memoize here again, otherwise the sharing is lost by mapping over the term as a tree. I''I(^(~@ f Sharing the memo tables is safe at the level of a compilation unit since idents should be unique I+M+OI++@ 7 This should not happen if we only reduce closed terms I&--I&-.@  A missing Uid after a complete reduction means the Uid was first missing in the shape which is a code error. Having the [Missing_uid] reported will allow Merlin (or another tool working with the index) to ask users to report the issue if it does happen. I70u0{I;11@@-./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&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_events"-cJJ 9/builds/workspace/main/flambda/false/label/ocaml-linux-32 >10/.-,+*)('&%$#"! @@0W9џP5,.:;3J3J2J2J3J3J3J3J3@J1@@(Asttypes0eT$BbRM dc5Build_path_prefix_map0DGl}%Y5Lhi8CamlinternalFormatBasics0|.e1R$|o0CamlinternalLazy0zY# #4#-*Cmi_format0`M{?w}@*Data_types0v\3,Svh90S B2*Format_doc0uy@GmWUࠠ%Ident0>ЃzV)j⠠,Identifiable0]/*N )Load_path0,j " nn7ݠ\0%a2tFࠠ(Location0nBɊOn?7~ؠ)Longident0wP q;ɡ$Misc0Bpg]?[q+Outcometree0BuG^)= 9c )Parsetree0v o[pY Y$Path0k.tbGmᠠ)Primitive0dU=\I/}J0 M``llJ0D&p{'}d&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__Map0*4ɇ2ɠ%Subst0=aqT/!p+.Type_immediacy00$ jbv\"k&%Types0"|Vȷ`X )Unit_info0'T Χ@aR(Warnings0Ef{&@@ATdn686B@@8.7m@7573@@=G@9C;\;f@-ّ-9K9@@1U/{@IfI@0ݑ@43@s}@11ɰIKH@&ˑ&@@!!&m&w99@@jt%)%3@@ 6 @-}-3J3T44@4q4@8t7@5F5P: :&@IWI@88 HϑH@:?:I@4g3IUI@''Ȱ9L7@@ @ 2 < - 7Xb1C`@,U,_8788V@:D7&70@@$3$=4K3@@@@+g+q@IIa@0087ѰII@@@8ӓ8@@%,$$-A-K@@9"899M9Ǖ9`@ @ J@,,9ٕ9x@@@MW>D@@1=1G9I8@@1Ű99@97@1ɑ/4͕4\@;;@@@@PKœ@:D::@@@@@@ @ @@@AB@@@~@{@@@ @@@@ABCIS@IP@@@J0AIԓ@IBI@@@IBI@@@ABJ5BJ*@@@J)BJ@@@JBJ@@@ABC@@AD@@